- 浏览: 208139 次
- 性别:
- 来自: 福建省
文章分类
最新评论
-
c929833623:
...
Mysql JDBC驱动源码分析(Statement,ResultSet的创建)四 -
pythonlord:
顶 很有帮助,感谢楼主,好人一生平安
Mysql JDBC驱动源码分析(加载驱动)一 -
kiaonly:
代码有错误,我戳。
解释器模式(Interpreter)---java与模式(例子) -
wyzxzws:
小鸟学习了!
JAVA编码问题记录 -
xiaotao.2010:
写的不错! 弱弱说一句 建议使用URL二次转码, 这样可以避免 ...
JAVA编码问题记录
一,tomcat中每一个容器都有其生命周期,初始化/启动/结束 等,可以在各自的生命周期内的步骤中进行一系列需要的操作如日记通知,生命周期中采用最独特的设计模式,就是适配器模式(Addapter),与命令模式(Command)
在一个周期内涉及到的类是:(Lifecycle,LifecycleSupport(适配器),LifecycleEvent,LifecycleListener(命令))
在这里以StandardServer容器为例:
在server.xml被Digester类读取时添加了四个监听器:server.xml中
<!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
StandardServer 在初始化时又作了以下操作
public final class StandardServer implements Lifecycle, Server, MBeanRegistration /** * The lifecycle event support for this component. *LifecycleSupport适配器,依赖于Lifecycle */ private LifecycleSupport lifecycle = new LifecycleSupport(this); //构造函数 public StandardServer() { super(); ServerFactory.setServer(this); globalNamingResources = new NamingResources(); globalNamingResources.setContainer(this); if (isUseNaming()) { if (namingContextListener == null) { namingContextListener = new NamingContextListener(); //添加进lifecyclesupport中,加这个support中总共有五个监听器 addLifecycleListener(namingContextListener); } } //----------------------以上步骤为监听器的添加,添加完监听器,接下去就事件触发监听 public void start() throws LifecycleException { // Validate and update our current component state if (started) { log.debug(sm.getString("standardServer.start.started")); return; } // Notify our interested LifecycleListeners //事件触发为:开始启动前以下的lifecycle(LifecycleSupport上面定义的) lifecycle.fireLifecycleEvent(BEFORE_START_EVENT(Lifecycle中定义了一系列的事件), null); //正在启动 lifecycle.fireLifecycleEvent(START_EVENT, null); started = true; // Start our defined Services synchronized (services) { for (int i = 0; i < services.length; i++) { if (services[i] instanceof Lifecycle) ((Lifecycle) services[i]).start(); } } // Notify our interested LifecycleListeners //启动完 lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null); }
LifecycleSupport下查看如何触发:
// public void fireLifecycleEvent(String type, Object data) { //首先创建一个事件驱动,传到监听器中,监听器会根据事件的不同作出相应的操作 LifecycleEvent event = new LifecycleEvent(lifecycle, type, data); LifecycleListener interested[] = listeners; for (int i = 0; i < interested.length; i++) interested[i].lifecycleEvent(event); }
在这里贴出AprLifecycleListener的事件触发
public void lifecycleEvent(LifecycleEvent event) {
if (Lifecycle.INIT_EVENT.equals(event.getType())) { //日记打印. aprInitialized = init(); if (aprInitialized) { try { initializeSSL(); } catch (Throwable t) { if (!log.isDebugEnabled()) { log.info(sm.getString("aprListener.sslInit")); } else { log.debug(sm.getString("aprListener.sslInit"), t); } } } } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) { if (!aprInitialized) { return; } try { terminateAPR(); } catch (Throwable t) { if (!log.isDebugEnabled()) { log.info(sm.getString("aprListener.aprDestroy")); } else { log.debug(sm.getString("aprListener.aprDestroy"), t); } } } }
日记为:
2010-3-31 7:38:50 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\P......
这个命令模式跟java.awt中的addActionListener()是一样的,先添加所需的监听器根据不同的事件作出响应.
UML:
-----------------------------------------------------------------------------------------------------------
tomcat中所需要的日记,错误信息以及国际化是通过StringManager管理的
他是通过组合java.util.ResourceBundle进行管理,里面最主要的特点是,tomcat是通过各个不同的包进行日记管理
private StringManager(String packageName) { String bundleName = packageName + ".LocalStrings"; try { bundle = ResourceBundle.getBundle(bundleName); ----...
发表评论
-
Nginx1.1实现Resin4集群
2011-10-17 17:56 7285一,web服务器小论 以前的公司使用的web服务器是to ... -
Apache实现Tomcat集群
2010-06-08 20:14 1428一,配置介绍 1,linux 2,tomcat6. ... -
Tomcat源码---Session的分析一
2010-03-29 11:31 3841一,前面看了大致的tomcat的请求/响应,接下来的文章对to ... -
Tomcat源码---响应处理五
2010-03-25 16:01 1862一,响应工作我们应该从CoyoteAdapter#servic ... -
Tomcat源码---请求处理四(2)
2010-03-25 15:34 1613对以上的StandardWrapperValve#invok ... -
Tomcat源码---请求处理四(1)
2010-03-25 11:08 1642一,现在到了StandardWrapperValve# ... -
Tomcat源码---请求处理三
2010-03-25 10:39 1368一,这一章节主要讲request与response通过管道,阀 ... -
Tomcat源码---请求处理二
2010-03-24 15:04 1840一,经过以上文章(JIoEndpoint$Worker#run ... -
Tomcat源码---请求处理(接收,线程分配)一
2010-03-24 14:34 2826一,在以上文章中tomcat启动已经完毕,接着要做的是消息的请 ... -
Tomcat源码---容器启动六(4)
2010-03-24 11:14 1469现在容器已经启动成功的StanderService#start ... -
Tomcat源码---容器启动六(3)
2010-03-24 10:48 2291一,容器已经启动到部暑文件(webapps),接下去是Stan ... -
Tomcat源码---容器启动六(2)
2010-03-23 16:42 1501super.start()--->org.apach ... -
Tomcat源码---容器启动六(1)
2010-03-22 16:02 1528一,完成了以上的初始化工作,现在进行容器的启动工作由 ... -
Tomcat源码---初始化容器五
2010-03-22 15:03 1827一,上面文章完成了对server.xml载入以及解析,现在主要 ... -
Tomcat源码---载入相应的资源及解析四(2)
2010-03-19 16:47 1513一,根据以上文章所讲的对server.xml的解析作下简单的分 ... -
Tomat源码---载入相应的资源及解析四(1)
2010-03-19 16:22 1404一,进行了以上的类包加载后,现在主要的工作是载入server. ... -
Tomcat源码---启动.初始化(加载类包)分析三
2010-03-19 15:37 2224一,启动 Tomcat是从org.apache.catali ... -
Tomcat的简单了解二
2010-03-19 14:40 1835在查看源代码时,在网上找了一系列的文章,在些作详解: ... -
Tomcat中server.xml的配置分析一
2010-03-19 14:07 1818最近查看了tomcat6的源代码,了解了里面的大概 ...
相关推荐
5. **部署与生命周期管理**: Tomcat提供自动部署和管理Web应用的功能,这涉及到`StandardContext`和`LifeCycle`接口的实现。 6. **安全管理**: Tomcat的安全特性包括用户认证、角色授权等,这在`org.apache....
4. **Lifecycle**:Tomcat的组件遵循生命周期管理,包括初始化、启动、停止和销毁等阶段。 5. **Naming and Directory Interface (JNDI)**:Tomcat使用JNDI提供命名和目录服务,用于查找和绑定资源,如数据源、邮件...
在描述中提到的InstanceSupport.edx文件可能是一个教学资源,可能包含了关于Tomcat生命周期和事件管理的详细讲解和实例。通常,这种类型的文件可能是教育平台如EdX上的课程资料,用于辅助学习者理解相关概念。 了解...
7. **Lifecycle and Manager Interfaces**:定义了组件的生命周期方法,如初始化、启动、停止和销毁,以及Web应用程序的管理接口。 在Eclipse中查看源码,可以帮助开发者: - **定位问题**:当遇到错误或异常时,...
2. **生命周期管理**:在源码中,可以看到Tomcat如何通过生命周期接口(Lifecycle interface)和生命周期事件(LifecycleEvent)来管理各个组件的启动、停止和暂停等状态。了解这些,有助于我们掌握如何在运行时动态...
组件的生命周期管理 用Lifecycle管理启动、停止、关闭 Lifecycle接口预览 几个核心方法 Server中的init方法示例 为啥StandardServer没有init方法 LifecycleBase中的init与initInternal方法 为什么这么设计...
- **生命周期管理**:Tomcat使用接口`Lifecycle`和`LifecycleListener`来管理组件的生命周期事件,如启动、停止、暂停和恢复。 - **部署与配置**:Tomcat的`server.xml`配置文件定义了服务器的全局设置,而`web.xml...
5. **生命周期管理**:Tomcat使用Java的生命周期接口(Lifecycle)来管理和控制其组件的状态。每个组件都有若干个状态(如 初始化、运行、暂停、停止、销毁),并且可以注册监听器来响应这些状态变化。 6. **线程...
4. `Lifecycle`和`Container`接口:这两个接口定义了Tomcat组件的生命周期管理和容器结构。所有Tomcat组件都遵循这些接口定义的状态转换和嵌套容器模型。 5. `Server.xml`配置文件:这是Tomcat最重要的配置文件,...
Tomcat7的生命周期管理是另一个重要的概念。每个组件都有自己的启动和停止方法,这些方法在`Lifecycle`接口中定义。通过观察源码,我们可以了解到如何正确初始化和关闭Tomcat的各种组件。 此外,源码中还有许多值得...
- Tomcat使用了Java的生命周期接口(Lifecycle interface)来管理各个组件的状态,如启动、停止、暂停和恢复。 4. **容器概念**: - **Engine**:顶级容器,管理多个Host。 - **Host**:对应于域名,管理多个...
Servlet容器是Java EE平台的一个重要组成部分,它的主要职责是管理Servlet的生命周期,并处理来自客户端的HTTP请求。当一个HTTP请求到达Servlet容器时,容器会根据配置信息找到合适的Servlet来处理该请求,并将处理...
4. **Lifecycle**:在Tomcat中,每个组件都有一个生命周期,包括初始化、启动、停止和销毁等阶段。源码中关于生命周期的管理可以帮助我们理解组件如何正确地启动和关闭。 5. **Logging**:Tomcat使用内置的日志系统...
4. **生命周期管理**:Tomcat通过`Lifecycle`接口和`LifeCycleListener`机制来管理Servlet的生命周期,包括装载、初始化、启动、停止和卸载等阶段。 5. **JSP编译**:Jasper会监控JSP文件的改动,自动重新编译。JSP...
- `setContainer`方法确保只与一个`Container`建立关联,并管理其生命周期。 - `addConnector`方法设置关联关系,并初始化和启动`Connector`。 ##### 3. Connector组件 - **定义**:`Connector`组件是Tomcat中...
2. **生命周期管理**:通过`Lifecycle`接口和`LifecycleListener`接口,我们可以观察和控制Tomcat组件的生命周期,这对于自定义扩展或性能调整至关重要。 3. **请求处理流程**:从请求到达Coyote Connector,经过...
8. **生命周期管理**:Tomcat组件遵循一种称为"生命周期"的概念,使得它们可以在启动、运行和停止时执行特定的步骤。`Lifecycle`接口和`LifecycleListener`接口是这一概念的核心。 9. **线程模型**:Tomcat使用工作...
4. `Lifecycle`:管理组件的生命周期,包括初始化、启动、停止和销毁。 5. `JMX`:通过Java Management Extensions监控Tomcat的运行状态。 通过对这些核心模块的深入研究,可以了解到Tomcat如何接收和处理HTTP请求...
总的来说,Tomcat源码解读需要把握住Server和Service这两个核心组件,理解它们如何通过Connector与Engine协同工作,以及生命周期管理和启动流程的设计。同时,要关注Container的层次结构以及与配置文件的交互,这将...