1.主流的web服务器都实现自己的类加载器,因为一个功能完整的web服务器要解决以下4个问题:
①部署在同一个服务器上的web应用使用的java类库可以实现相互隔离.例如,不同的web应用使用了同一个第三方类库的不同版本,不能要求在一个服务器中只能使用一个版本的第三方类库,必须能够实现同一类库不同版本能够在web程序中独立使用.
②部署在同一个服务器上的不同web应用直接可以共享某些类库.例如,10个使用spring架构的web应用,我们不能使用10套类库.这不是浪费空间的问题,而是所有类库都需要加载到服务器内存中才能使用,如果不能共享,就容易出现过度膨胀的风险.
③服务器需要尽可能保证自身的安全不受部署应用的影响.基于安全考虑,服务器使用的类库应该和应用所使用的类库相互独立.
④支持JSP应用的web服务器,大多数都需要支持热部署(HotSwap-热替换)能力.
由于存在以上问题,在部署web应用时,一个classpath就无法满足要求了.因此各种web服务器都不约而同的提供了多个classpath路径供存放第三方类库,这些路径一般都以"lib"或"classes"命名.被放置到不同路径的类库,具备不同的访问范围和服务对象.
通常,每一个目录都有一个相应的类加载器去加载里面放置的java类库.
2.Tomcat服务器目录结构
2.1 在Tomcat5.x的目录结构中,有三组目录结构:/common/*,/server/*,/shared/*可以存放java类库,另外加上web
应用的目录/WEB-INF/*,一共4组,这些目录的含义如下:
①/common/*:类库可以被Tomcat和所有web应用共同使用.
②/server/*:类库只能被Tomcat服务器使用,对web应用透明.
③/shared/*:类库能被所有web应用共享,但是对tomcat透明.
④/WEB-INF/*:类库可以被本应用使用,对其他应用和Tomcat透明.
2.2 在Tomcat6.x版本中,/common/,/server/,/shared/目录已经合并成一个/lib目录.
3.Tomcat的类加载器结构
3.1 Tomcat5.x中,为了支持以上目录结构,并对目录中的类库进行加载和隔离,Tomcat自定义了多个类加载器,这些加载器使用双亲委派模型来实现.
类加载器结构:
见附件
各个类加载器的作用(Tomcat自定义的类加载器):
①Common类加载器:加载/common/*下的类库,CommonClassLoader加载器加载到类可以被Catalina类加载器和Shared类加载器使用,而他们各自加载到的类则不能被对方使用.
②Catalina类加载器:加载/server/*下的类库
③Shared类加载器:加载/shared/*下的类库
④WebApp类加载器:加载web应用下/WEB-INF下的类库,它可以使SharedClassLoader加载到的类.
⑤Jsp加载器:加载范围仅仅是当前jsp页面编译后的class,它的目的就是为了丢弃:当服务器检测到jsp页面发生变化时, 会替换掉当前的JasperLoader,然后新创建一个JasperLoader实例,实现HotSwap能力.
3.2 在Tomcat6.x中,只有在tomcat/conf/catalina.conf配置了server.loader和share.loader才会去创建CatalinaClassLoader和SharedClassLoader实例.否则,使用到这两类加载器的地方都用CommonClassLoader代替.
在默认配置文件中是没有设置这两项的./lib中的类库相当于5.x版本中/common目录中类库的作用.如果默认设置不能满足要求,可以配置以上两项,使用5.x的类加载器架构.
相关推荐
在Web容器(如Tomcat)中,每个Web应用都有自己的类加载器,这样可以确保不同应用的类之间隔离,避免冲突。而在OSGi环境下,类加载器被用来实现模块间的隔离,每个模块(Bundle)都拥有自己的类加载器,实现了更细...
2. **类加载机制**:Tomcat的类加载机制遵循“Web应用类优先”的原则,每个Web应用有自己的类加载器,保证了应用之间的隔离。 3. **部署与配置**:通过server.xml、web.xml等配置文件,可以定制Tomcat的行为,如...
在这个特定的场景中,我们关注的是版本8.5.87的源代码,并且涉及到类加载器WebappClassLoaderBase的修改,目的是使得Tomcat能够支持加载经过加密的Web项目。 WebappClassLoaderBase是Tomcat中的核心类加载器,它...
Bootstrap类加载器完成后,Tomcat会使用系统类加载器(System ClassLoader)加载服务器的全局配置文件,如`server.xml`。这个文件定义了Tomcat的整体架构,包括服务(Service)、连接器(Connector)和引擎(Engine)等组件...
2. **Coyote**:这是Tomcat的连接器组件,用于接收和响应HTTP请求。Coyote处理网络I/O,并将请求转发给Catalina进行处理。 3. **Jasper**:它是Tomcat的JSP引擎,负责编译JSP页面为Java类并执行。Jasper处理JSP的...
在结构上,Tomcat的顶层类元素包括`<Server>`和`<Service>`,连接器类元素负责通信接口,而容器类元素则分为`Engine`、`Host`和`Context`,它们分别负责处理请求、特定虚拟主机请求和特定Web应用请求。所有的Tomcat...
《Tomcat架构解析》这本书由刘光瑞撰写,由人民邮电出版社出版,是一本深入探讨Tomcat服务器架构的专业书籍。Tomcat作为Apache软件基金会的项目之一,是世界上最流行的Java应用服务器,尤其在轻量级Web应用领域,其...
深入理解Tomcat的架构原理对于任何Java开发者来说都是至关重要的,特别是对于系统管理员、性能优化师以及希望提升应用程序性能的开发人员。 Tomcat的架构基于模块化设计,主要由以下几个核心组件构成: 1. **...
7. **Loader**:加载器负责加载Web应用程序的类文件,通常使用Java的类加载机制。 8. **Logger**:日志组件记录Tomcat运行时的各种信息,对调试和故障排除非常关键。 9. **JMX(Java Management Extensions)**:...
由于提供的内容并不是Tomcat架构相关的技术细节,而是有关电子书的获取和版权说明,因此下面我将从技术角度详细解读Tomcat的架构。 Apache Tomcat是一个开源的Web服务器和Servlet容器,由Apache软件基金会负责管理...
5. "tomcat加载类的顺序.doc":详细说明了Tomcat加载类的具体步骤和顺序,这对于理解和调试类加载问题至关重要。 6. "Tomcat源码研究.pdf":提供了一个全面的源码分析概览,可能包括了Tomcat的主要组件、设计模式...
本篇文章将深入探讨Tomcat的架构,帮助读者理解其内部工作原理,以便更好地管理和优化基于Tomcat的应用。 ### 1. Tomcat的组件结构 Tomcat的架构主要由以下几个核心组件构成: #### (1) CATALINA:核心引擎 ...
Jasper是Tomcat中的JSP引擎,负责将JSP页面转换为Servlet类,从而提高JSP的执行效率。 三、Tomcat启动流程 当Tomcat启动时,会经历以下几个关键步骤: 1. **初始化Catalina组件**:读取配置文件,如server.xml,...
在启动过程中,Tomcat首先进行必要的初始化工作,包括建立类加载器(ClassLoader)以及构建用于解析配置文件的**Digester XML解析器**。 - **建立ClassLoader** - 类加载器由`lib`目录下的多个jar包组成。 - 主要...
书中会详细讲解Tomcat如何加载和管理Servlet,以及其部署应用程序的流程。 在架构方面,Tomcat主要由以下几个关键组件构成: 1. **Catalina**:这是Tomcat的主要组件,负责处理Servlet和JSP。Catalina实现了...
【Tomcat源码调试与架构学习】 Tomcat是一款流行的开源Java Servlet容器,它实现了Java EE规范中的Web应用服务器部分,负责解析HTTP请求并调用Java应用程序。深入理解Tomcat的源码有助于开发者优化性能、排查问题和...
《TOMCAT架构服务器优化指南》是一本深入探讨TOMCAT服务器优化的专业书籍,由刘光瑞撰写,并由人民邮电出版社出版。该书聚焦于如何提升TOMCAT服务器的性能,确保系统的稳定性和高效运行。TOMCAT作为一款广泛应用的...
总结来说,Tomcat的架构设计是高度模块化的,这种设计使得Tomcat能够灵活地扩展,以适应不断变化的Web服务需求。熟悉这些核心组件的工作原理和配置方式,对于任何在Tomcat上开发和部署应用的工程师来说都是至关重要...
2. **类加载器调整**:由于Tomcat和OSGI都有自己的类加载机制,整合时需要调整Tomcat的类加载策略,以兼容OSGI的模块化特性。这可能涉及创建一个新的类加载器,用于加载OSGI Bundle内的类。 3. **配置管理**:OSGI...
Tomcat使用了自定义的类加载器,这种加载机制使得每个Web应用都有自己的类加载器,保证了应用间的隔离性。此外,Tomcat还支持热加载和热部署,即在不重启服务器的情况下更新应用或类文件。这得益于其对JAR监视和重新...