weblogic发布一个应用的一般目录是如下:
|----App-INF //放在这个目录下的Lib和classes不能实例化webapp
|----lib //放ejb和webapp公用的jar包
|-----classes //放ejb和webapp公用的类
|----META-INF
|-----Application.xml
|----mywebapp
|-----WEB-INF
|-----lib
|-----classes //放class类
|-----web.xml
|-----ejb.jar //ejb的jar包
对应的各层级ClassLoader如下:
BootStrap Classloader
|-----Extensioon ClassLoader
|------Weblogic Service System ClassLoader
|------Filtering ClassLoader
|------Application ClassLoader
|------Web Application ClassLoader
|-------Jsp ClassLoader
Application ClassLoader s用来加载EJB JARS,APP-INF/LIB,APP-INF/classes,EJB JARS中Classpath变量定制的路径下的类.
Web Application ClassLoader 用来加载WAR,WAR中classpath变量定制的路径下的类.weblogic 下classloader用的也是委托模型,首先bootstrap先进行寻找,找不到再由ExtClassLoader寻找,然后再由ExtClassLoader寻找,然后再由AppClassLoader一级一级往下找.这样的分层有一个好处,就是可以在JSP,Servlet中可以直接访问EJB的接口.这种上层装载EJB,下层装载servlet,最下层装载jsp文件的结构,使得经常变动的jsp,servlet等可以被重新加载 而不会涉及到EJB层.在weblogic中可以通过修改配置文件来修改这种加载顺序,在weblogic.xml中可以加入一下代码段.
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>