tomcat4.1.x以上中类的加载
快速开始
1.某一个特殊的web应用用到的类或者资源,应该把它解压缩放在这个web应用的web-inf/classes下,或者把jar文件放在这个web应用的web-inf/lib下
2.很多web应用公用的类或者资源,应该把它解压缩放在%catalina_home%/shared/classes下(如果是4.0.x则是%catalina_home%/classes),或者把jar文件放在%catalina_home%/shared/lib下(如果是4.0.x则是%catalina_home%/lib)
预览
象很多应用程序服务器一样,tomcat4.x安装了一种特殊的class loader(这个类继承了抽象类java.lang.classloader),所以它允许容器的不同部分和应用程序访问相应的不同的资源。
在java2(jdk1.2以上)环境中,class loader被抽象成一个树型。当一个class loader被请求装载一个特殊的类或资源时,它把这个请求委派给自己的上一层,当上一层没有找到这个类或资源时,它才在自己的范围内查找并加载。web 应用程序类的装载有细微的不同,但是主要的原理都是一样的。
当tomcat4启动时,它建立如下所示的树型关系。
bootstrap
|
system
|
common
/ \
catalina shared
/ \
webapp1 webapp2 …
详细解释
当tomcat初始化时,它建立了如上图所示的class loader结构。
bootstrap
这个class loader 包含了基本的运行时的类,和一些扩展类(在%java_home%/jre/lib/ext 目录下),这些类都由jvm自动加载。
system
这个class loader 通常用来初始化classpath环境变量的内容,所有的这些类对tomcat内在的类和所有的web应用程序是可见的。但是标准的tomcat4.x启动脚本(%catalina_home%/bin/catalina.sh 或者 %catalina_home%/bin/catalina.bat)忽略classpath,而丛下面的地方装载
1.%catalina_home%/bin/bootstrap.jar-包含了main()方法初始化tomcat4.x server,而且class loader依靠它实现。
2.%java_home%/lib/tools.jar-包含了javac 编译程序,它可以把jsp页面转换为servlet。
common
这个class loader加载的类对tomcat内在的类和所有的web应用程序是可见的,通常web应用程序的类不应该放在这里。
解压后的类或资源放在%catalina_home%/common/classes 目录下,没有解压的类或资源的jar文件放在
%catalina_home%/commons/endorsed 和%catalina_home%/common/lib directories 目录下。这里默认的包含了如下资源和类:
1.jndi.jar – the java naming and directory interface api classes (这个包仅仅在jdk1.2才会被加载,jdk1.3或更高版本由jvm自动加载)。
2.naming-common.jar – tomcat实现的jndi 描述内存中的命名上下文。
3.naming-resources.jar – tomcat实现的特殊的jndi用来表现web应用程序的静态资源。
4.servlet.jar – servlet 和 jsp 用到的类。
5.xserces.jar – xml解析器默认情况下对tomcat内在的类和所有的web应用程序是可见的,如果要对一个特殊的web应用程序用特殊的xml解析器,可以把这个解析器放在/web-inf/lib中。
catalina
这个class loader 为tomcat自己初始化所有的类和资源,这些类和资源对web应用程序来说都是不可见的,所有的解压缩的类和资源都在%catalina_home%/server/classes目录下,所有的压缩的类和资源的jar文件都在%catalina_home%/server/lib目录下。
shared
这个类装载器载入的类和资源能对所有的web应用程序可见(如果tomcat的内置类也要用到这些,则应该把这些放入到common装载器中)。
没有压缩的类和资源放在%catalina_home%/shared/classes目录中,压缩的类和资源的jar文件放在%catalina_home%/lib(为了和前面的版本兼容)或者%catalina_home%/shared/lib目录中。通常包含了以下几个默认包:
1.jasper-compiler.jar – 编译把jsp转换成servlet并编译他们所用到的类。
2.jasper-runtime.jar – 运行由jsp编译成servlet后的class要用到的环境。
3.naming-factory.jar – 为web应用程序提供默认的jndi服务所要用到的类。
webappx
tomcat实例为每一个web应用程序实现一个webapp class loader,所有的解压缩类和资源都放在这个web应用程序的/web-inf/classes目录下,所有的类和资源的压缩文件jar都放在这个web应用程序的/web-inf/lib目录下,这些类和资源只对这个web应用程序是可见的,对其它的web应用程序都是不可见的。
和前面不同的是,当一个web应用程序请求加载一个类时,它首先在这个web class loader范围内加载,而不是和通用的规则一样先从父class loader开始加载。
因此web应用程序类的加载是按一下的顺序的
1.这个应用程序的/web-inf/classes
2.这个应用程序的/web-inf/lib/*.jar
3.jvm 的bootstrap classes r
4.system class loader classses (见上面的描述)
5.%catalina_home%/common/classes
6.%catalina_home%/common/endorsed/*.jar
7.%catalina_home%/common/lib/*.jar
8.%catalina_home%/shared/classes
9.%catalina_home%/shared/lib/*.jar
Tomcat4.1.x以上中类的加载-JSP教程,J2EE/EJB/服务器
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Tomcat4.1.x以上中类的加载-JSP教程,J2EE/EJB/服务器
相关推荐
- 暂无文章
