- 浏览: 253286 次
- 性别:
- 来自: 南京
最新评论
-
mabusyao:
漠北空城 写道请问下,你这个是JDK版本是多少呢?!忘记了,应 ...
HashMap 源码解读 -
漠北空城:
请问下,你这个是JDK版本是多少呢?!
HashMap 源码解读 -
schumee:
完美团队~
项目沉思录 - 1.1 -
winie:
整理下 搞成引擎嘛 国产需要这样的engine
简单工作流引擎 -
mabusyao:
某位同学给我提供的堪称完美的解决方案:1. 将三个int数组放 ...
CraneWork
文章列表
本来想自己写的,结果在网上找到别人写的,概括的非常详细,就直接转过来了:
Tomcat中提供了多种处理Socket的实现:JIoEndpoint、AprEndpoint和NioEndpoint。其中JIoEndpoint是最常见的一种实现方式。
JIOEndpoint中的线程有3部分:Socket侦听线程、监控线程和Executor。
Socket侦听线程
该线程由内部类Acceptor实现其Runnable接口,使用JDK的ServerSocket类监听某个端口,当socket连接进来时,构建一个task,交给Executor来处理。
监控线程
该线程由As ...
类名
org.apache.catalina.Connector.Conector
继承关系
LifecycleMBeanBase
关联类
ProtocolHandler
Adapter
AbstractEndPoint
Handler
Processor
实现功能
监听Request,assgin给恰当的Processor,返回Response
分析
Connector
类名
org.apache.catalina.core.StandardService
继承关系
LifecycleMBeanBase
Service
关联类
Container
Connector
Excecutor
实现功能
管理子组件
分析
从这节开始,我们就真正进入了对开发人员来说至关重要的一些内容,Connector,Container以及Excecutor。而所有这些,都是被StandardService类管理和维护的。
类名
org.apache.catalina.core.AprLifecycleListener
继承关系
LifecycleListener
关联类
org.apache.tomcat.jni.Library
org.apache.tomcat.jni.SSL
实现功能
检查是否具有 APR/native 库,如果有则将其加载
分析
在StandardServer ...
类名
StandardServer
继承关系
LifecycleMBeanBase
Server
关联类
NaingResources
PropertyChangeSupport
Service
实现功能
管理Service及全局的resources
分析
实在是无法可想,你能预测事情的发展方向,却无法预测人心。
在此之中,如何保持内心的平和,是一件很有挑战性的事情。
类名
Catalina
继承关系
无
关联类
StringManager
Server
Digester
实现功能
类名
Bootstrap
继承关系
无
关联类
Catalina
ClassLoaderFactory
MBeanServer
实现功能
创建Tomcat的classLoader机制
代理Catalina方法调用
初始化全局变量CATALINA_HOME_PROP 和 CATALINA_BASE_PROP
分析
Tomcat启动
Tomcat中共有两个类用于Server的启动,Bootstrap和Catalina。作为Bootstrap的主要工作,是代理Ca ...
之前做的一个项目中,有一些对异常处理的封装,如果抛出的异常是项目特定的异常,则直接抛出。如果不是,则进行一个封装。
现在的做法是这样的:
catch (InputValidationFault ive) {
throw new InputValidationFault(ive.getMessage(), "");
} catch (InputLimitFault ile) {
throw new InputLimitFault(ile.getMessage(), "");
} catch (SystemUnavailableFault ...
JMX中有两种方式调用另一个MBean中的方法
先创建一个MBean实例,再调用该方法
HelloWorldMBean hwmbean = (HelloWorldMBean)server.instantiate("com.acxiom.bilyao.HelloWorld");
hwmbean.sayHello();
直接调用该方法:
ObjectName on = new ObjectName("HelloAgent:name=helloworld");
server.invoke(on, "sayHello2", ...
废话不多说,上代码:
HelloWorldMBean接口
package com.acxiom.bilyao;
public interface HelloWorldMBean {
public void setGreeting(String greeting);
public String getGreeting();
public void sayHello();
}
HelloWorld
package com.acxiom.bilyao;
import javax.management.Notification;
impo ...
我们常常会遇到这样的情况,当程序运行结束的时候,要将一些资源连接进行清理,释放内存,或者是删除一些临时文件。通常这并不会有什么问题,我们只需要在程序的结束部分写上清理代码即可。
但当我们处在多线程的环境下时,我们并不能确切的知道,何时所有的线程都已结束工作,程序准备退出。 又或者我们的程序中有一些守护线程,需要通过特殊的命令才能停止。那么此时,我们如何才能保证当所有的线程都结束,程序退出的时候,我们的清理代码被执行呢?
在Java中,有一种非常简单的方法,通过给Runtime提供shutdown hook来实现这样的需求:
try {
// R ...
Tomcat中的connector负责将从客户端发出的请求封装成Request对象,再交由processor进行处理。
为了提高性能,connector内部实现了一个简单的多例模式来获取processor,在启动阶段,会有一定数量的processor提前被产生并保留在内存中,当需要时直接从内存中取。如果当前所有processor都被占用,则会继续产生新的processor并丢进内存缓存。
/**
* The current number of processors that have been created.
*/
private int cur ...
老版Tomcat使用catalina作为其连接器和容器的架构,当一个request请求到达时,Tomcat会对其做一系列的封装,并传递给容器进行处理,处理完之后,又会有一些解析工作来获取相应的response。
这里简单的介绍一下request在catalina中的体系结构。
我们都知道当我们进行web开发时,一个servlet只会接收类型为HttpServletRequest的对象,并返回类型为HttpServletResponse的结果。两个类中分别包含了许多web开发人员需要调用的方法,通常这些方法足够使用。
然后作为web container,Tomcat还需要在request中保 ...