简体   繁体   中英

/WEB-INF/classes vs /WEB-INF/lib

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?

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 eg JBOss, Glassfish, Jetty it might have a different order, but I am not sure about those.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM