导图社区 Tomcat——Server组件与Service组件
tomcat的两个抽象组件server和service的角色和组成介绍
Java多线程编程基础知识总结与复盘。本思维导图从Java多线程技能、对象及变量的并发访问、线程间的通信、Lock对象的使用、定时器Timer五个部分进行归纳整理。推荐收藏备用。
tomcat服务器整体模型和组成的各个级别组件介绍和作用分析
tomcat服务器组件connector组件的模型图、职责和组成的介绍
社区模板帮助中心,点此进入>>
英语词性
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
法理
刑法总则
【华政插班生】文学常识-先秦
【华政插班生】文学常识-秦汉
文学常识:魏晋南北朝
【华政插班生】文学常识-隋唐五代
【华政插班生】文学常识-两宋
Tomcat——Server组件与Service组件
Server组件
角色
Server组件可以看成Tomcat的运行实例的抽象
关联配置
server.xml配置文件
组成
6个监听器组件
详细
AprLifecycleListener监听器
在Tomcat初始化前,该监听器会尝试初始化APR库,假如能初始化成功,则会使用APR接受客户端的请求并处理请求。在Tomcat销毁后,该监听器会做APR的清理工作
JasperListener监听器
初始化Jasper组件,Jasper是Tomcat的JSP编译器核心引擎,用于在Web应用启动前初始化Jasper。
JreMemoryLeakPreventionListener监听器
主要提供解决JRE内存泄漏和锁文件的一种措施,该监听器会在Tomcat初始化时使用系统类加载器先加载一些类和设置缓存属性,以避免内存泄漏和锁文件
两种泄露原因
其中一种JRE内存泄漏是因为上下文类加载器导致的内存泄漏
JRE库的这些类使用上下文类加载器进行加载,并且保留了上下文类加载器的引用,所以将导致被引用的类加载器无法被回收,而Tomcat在重加载一个Web应用时正是通过实例化一个新的类加载器来实现的,旧的类加载器无法被垃圾回收器回收,导致内存泄漏
另外一种JRE内存泄漏是因为线程启动另外一个线程并且新线程无止境地执行
在JRE库中存在某些类,当线程加载它时,它会创建一个新线程并且执行无限循环,新线程的上下文类加载器会继承父线程的上下文类加载器,所以新线程包含了上下文类加载器的应用,导致该类加载器无法被回收,最终导致内存泄漏
GlobalResourcesLifecycleListener监听器
主要负责实例化Server组件里面JNDI资源的MBean,并提交由JMX管理
ThreadLocalLeakPreventionListener监听器
主要解决ThreadLocal的使用可能带来的内存泄漏问题
ThreadLocal引起的内存泄漏问题的根本原因也在于当垃圾回收器要回收时无法回收,因为使用了ThreadLocal的对象被一个运行很长时间的线程引用,导致该对象无法被 回收
解决ThreadLocal内存泄漏最彻底的方法就是当Web应用重加载时,把线程池内的所有线程销毁并重新创建,这样就不会发生线程引用某些对象的问题了
NamingContextListener监听器
主要负责Server组件内全局命名资源在不同生命周期的不同操作,在Tomcat启动时创建命名资源、绑定命名资源,在Tomcat停止前解绑命名资源、反注册MBean。
提供了监听器机制,用于在Tomcat整个生命周期中对不同事件进行处理。
GlobalNamingResources
提供了Tomcat容器全局的命名资源实现。
ServerSocket组件
监听某个端口以接收SHUTDOWN命令。
Service组件
Service组件则可以看成Tomcat内的不同服务的抽象
若干Connector组件和Executor组件组合而成的概念
Connector组件负责监听某端口的客户端请求,不同的端口对应不同的Connector。Executor组件在Service抽象层面提供了线程池,让Service下的组件可以共用线程池