I'd like to package my Java EE6
web classes (beans, filters, servlets) into jar and place it into /WEB-INF/lib/
directory along with other utility jars and abandon /WEB-INF/classes/
directory totally.
Are there any substantial differences between the two in terms of classloading, acessing application context, etc?
Thanks.
PS: Whenever googling any of java specs I'm always redirected to Oracle documentation index which is dozen clicks away from original url. Anyone knows what's happening there?
WEB-INF. This directory, which is contained within the Document Root, is invisible from the web container. It contains all resources needed to run the application, from Java classes, to JAR files and libraries, to other supporting files that the developer does not want a web user to access.
I'd go for /WEB-INF/classes
. It allows you to run your application in debug mode and hot-swap classes on change. If you package everything as a jar, you'd have to repackage and redeploy the app every time you change a class.
Well, shortly: Imagine you have class org.example.Test.class
, if you put it into jar and in WEB-INF/lib/
directory, and copy the same class into WEB-INF/classes/
then classloader of that application will use last one (from WEB-INF/classes/
).
Sometimes you can use it as advantage - I have a library, and it has a bug... I look for source of that class (where bug is; I miss the part of how I know that bug is in that class, that's another story), I add that class to the project with fixed code, and it is compiled into WEB-INF/classes/
while library still exist in WEB-INF/lib/
. Fixed class will be used until library will be fixed.
In Tomcat Servlet container's definition: WEB-INF\classes
is searched before WEB-INF\lib
. You can choose to delegate your classloading to your custom classloader - even then the order above is maintained.
If you choose to go with a different provider e.g. JBOss, Glassfish, Jetty it might have a different order, but I am not sure about those.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With