类加载器与Tomcat.docVIP

  • 1
  • 0
  • 约2.73千字
  • 约 3页
  • 2017-08-09 发布于重庆
  • 举报
类加载器与Tomcat.doc

类加载器与Tomcat Tomcat基于标准的类加载,再加上自己的类加载器就形成了类加载器层次。下图详细描述了该层次结构。 从图中可以看到,它与直接委托模型有些不一样,Common类加载器代理Server类加载器,这意味着Web应用类加载器不能访问内部Server类,而Common类加载器可以。 Tomcat与System类加载器 Tomcat使用默认的System类加载器,但是Tomcat通过下面来设置CLASSPATH环境变量: CATALINA_HOME/bin/bootstrap.jar CATALINA_HOME/bin/tomcat-juli.jar JAVA_HOME/lib/tools.jar 由于Tomcat在上面的文件列表中设置了CLASSPATH环境变量,因此在Tomcat生命周期内,system CLASSPATH变量会忽略。只要用户记住Tomcat拥有自己的classpath, 独立于System的Classpath,那么用户将增加的类放置在“Tomcat Common类加载器”一节中列出的目录中,就不会有任何问题。 Bootstrap.jar文件包含了Tomcat启动时所需的类。Tools.jar包含了javac编译器,用于在运行时编译JSP页面为class文件。Tomcat-juli.jar用于Tomcat的Bootstrap日志中。 Tomcat Common类加载器 下面讲述的是Tomcat的Common类加载器层次结构。Common类加载器加载这些Tomcat和所有Web应用所需要的类时,它从下面路径中加载表7-1中的类文件。 CATALINA_HOME/lib/ JAR文件 描述 annotation-api.jar 包含注释类 catalina.jar Tomcat6服务器中核心实现类 catalina-ant.jar Tomcat Catalina Ant任务 catalina-ha.jar High availability包 Catalina-tribes.jar Tomcat通信包 el-api.jar 表达式语言(EL)API jasper.jar Jasper2编译和运行,将JSP文件转换成servlets jasper-el.jar Jasper2表达式语言实现 jasper-jdt.jar Eclipse JDT3.2 Java编译器 jsp-api.jar JSP 2.1 API servlet-api.jar Servlet 2.5 API tomcat-coyote.jar Tomcat连接器和有用类的集合 tomcat-dbcp.jar 提供数据库链接池机制和其他对象链接池服务 tomcat-i18n-**.jar 可用的国际化JAR包 尽管开发人员可以引用其所有的API,但是不应允许他们在CATALINA_HOME/lib下放置自己的类和JAR文件。如果开发人员希望所有类和JAR文件对于所有Web应用程序都是可见的,那么应该把它们放置在Shared类加载器能够访问到的位置。注意这个不适用于第三方库,例如数据库驱动。因为Tomcat需要经常访问到这些类。 把自定义类放置在Common类加载器路径下,这是不提倡的,主要因为下面两个原因: 自定义类将会造成与Tomcat的兼容性问题。例如,如果用户将XML解析器放置在这个目录下,它会带来无法修复的程序问题;而将Servlet API的老版本入围在该目录下,也会带来同样的问题。 很容易忘记哪个类JAR文件属于开发人员,哪些属于tomcat自有的。因此维护是很棘手的。 Tomcat Web应用类加载器 每个Web应用都有自己的类加载器,它们分别在 CATALINA_HOME/webapps/[webapp]/WEB-INF/lib和classes目录下搜寻JAR文件和类文件,Web应用类加载器有些独特,主要在于以下两点: 每个Web应用都有自己的类加载器的实例,这意味着Web应用不能看到其他人的类文件。 Web应用类加载器不采用委托模式,取而代之的是,在请求转发到其他类加载器之前,它试图自己首先加载类。这些行为使得Web应用很容易地覆盖Shared和Common类加载器下的类。 应该注意的是,Web应用类加载器并不能覆盖掉Java基本类,这也是不可能的。下列是Web应用类加载器唯一例外的时候,它们通常采用委托模式: Javax.* Org.xml.sax.* Org.w3c.dom.* Org.apache.xerces.* Org.apache.xalan.* 如果父类不能加载它们,则Web应用类加载器将自己试图加载它们。 类加载器顺序 为了回顾一下不同的Tomcat类加载器是如何一直协同

文档评论(0)

1亿VIP精品文档

相关文档