Tomcat
文章平均质量分 85
lcy84
这个作者很懒,什么都没留下…
展开
-
Tomcat的Session管理(一) - Session的生成
Session对象的创建一般是源于这样的一条语句: Session session = request.getSession(false);或者Session session = request.getSession();如果不在乎服务器压力可能多那么一点点的话。 在Tomcat的实现中,这个request是org.apache.catalina.connector.Request类的包装类org...原创 2009-05-07 10:02:56 · 110 阅读 · 0 评论 -
Tomcat请求处理(七) - Servlet实例的调用
Tomcat请求处理中Servlet实例的调用是和Filter的调用联系在一起的,是在StandardWrapperValve类的#invoke()方法中调用的,前面的文章中提到过,就是下面的这句: filterChain.doFilter(request.getRequest(), response.getResponse()); 它的源代码如下: Java代码 publ...原创 2009-05-07 11:36:52 · 103 阅读 · 0 评论 -
请求在Tomcat中传到了CoyoteAdapter的#service()方法中后,就要准备进入Pi
首先,来看一下Servlet的载入过程。 具体是在org.apache.catalina.core.StandardWrapper#allocate()这个方法中,源代码如下: public Servlet allocate() throws ServletException { if (unloading) throw new ServletExcepti...原创 2009-05-07 11:35:16 · 79 阅读 · 0 评论 -
Tomcat请求处理(五) -- 请求在容器间的流动
请求在Tomcat中传到了CoyoteAdapter的#service()方法中后,就要准备进入Pipeline了,如#service()方法中的这句所示: connector.getContainer().getPipeline().getFirst().invoke(request, response); 这里的Container是Engine,然后得到它的Pipeline对象,然后得到他的第...原创 2009-05-07 11:34:17 · 88 阅读 · 0 评论 -
Tomcat请求处理(四) -- Request, Response, 和Pipeline
1. Request和Response 当处理请求的时候,Tomcat使用org.apache.coyote.Request和org.apache.coyote.Response对象来封装对Socket的数据处理,就好像它们是输入流和输出流一样。 Request和Response是low-level的,并不是用于在开发中使用的,所以,Tomcat使用了适配器模式定义了两个类org.apache.c...原创 2009-05-07 11:33:02 · 105 阅读 · 0 评论 -
Tomcat请求处理(三) -- coyote请求处理
在上一篇文章文章中,Tomcat的请求处理到了JIoEndpoint$Worker#run()方法的handler.process(socket)这个调用中。 这个handler在JIoEndpoint中是这样定义的:protected Handler handler = null;这个Handler是在JIoEndpoint内部定义的一个接口,它的内部只有public boolean p...原创 2009-05-07 11:32:36 · 240 阅读 · 0 评论 -
Tomcat请求处理(二) -- 请求处理框架
书接上文。 当Tomcat的Acceptor监听到有请求到来时,就会结束阻塞,继续进行程序下面的动作。如下面的代码所示: public void run() { while (running) { while (paused) { try { Thread.sleep(1000); } catch (InterruptedExcep...原创 2009-05-07 11:30:57 · 46 阅读 · 0 评论 -
Tomcat请求处理(一) -- 服务器端口监听
其实tomcat在哪个类中监听请求的代码很容易找到: 在org.apache.tomcat.util.net.JIoEndpoint$Acceptor#run()中的这么一句: Socket socket = serverSocketFactory.acceptSocket(serverSocket); 可是ServerSocketFactory是个抽象类,我还是很想知道整个过程的来龙去脉的。 那...原创 2009-05-07 11:29:32 · 124 阅读 · 0 评论 -
Tomcat启动部分源代码分析(五) -- 应用程序加载
前面所叙述的tomcat启动中并没有webapps下边应用程序载入的内容,今天花了些时间在源代码中找到了一些相关的内容。 1. webapps下的应用程序的载入,要从Digester的HostRuleSet说起了: public void addRuleInstances(Digester digester) { digester.addObjectCreate(prefix ...原创 2009-05-07 11:28:24 · 62 阅读 · 0 评论 -
Tomcat启动部分源代码分析(四) -- 开启容器
四. 开启容器 最后是Bootstrap#start()方法的内容了,start()方法结束后,Tomcat就启动成功了。 下面来看一下Bootstrap#start()的内容: public void start() throws Exception { if (catalinaDaemon == null) init(); // 调用Catalina#star...原创 2009-05-07 11:27:17 · 57 阅读 · 0 评论 -
Tomcat启动部分源代码分析(三) -- 载入
二. 载入 2. Bootstrap的#Bootstrap#load(String[] arguments)方法。 方法的源代码如下述所示: private void load(String[] arguments) throws Exception { // 要调用的方法名 String methodName = "load"; // 参数名 Object param...原创 2009-05-07 11:23:57 · 83 阅读 · 0 评论 -
Tomcat启动部分源代码分析(二) -- 初始化
二. 初始化 1. 首先是Bootstrap的#init()操作。 public void init() throws Exception { // 设定Catalina setCatalinaHome(); setCatalinaBase(); // 初始化ClassLoader initClassLoaders(); // 设置...原创 2009-05-07 11:20:13 · 57 阅读 · 0 评论 -
Tomcat启动部分源代码分析(一) -- 概览
一. 概览 本文所涉及的Tomcat为6.0版本。 Tomcat的启动始于org.apache.catalina.startup.Bootstrap#main(),下面来列举一下相关的源代码: public static void main(String args[]) { if (daemon == null) { daemon = new Bootstrap(); ...原创 2009-05-07 11:17:45 · 141 阅读 · 0 评论 -
Tomcat的Session管理(二) - Session后台处理
Tomcat会开启一个后台线程每隔一段时间检查Session的有效性,这个线程是在Tomcat启动的时候当StardardEngine启动时随之启动的。可以参看StardardEngine的基类ContainerBase的#threadStart()方法: protected void threadStart() { if (thread != null) return; ...原创 2009-05-07 10:10:28 · 53 阅读 · 0 评论 -
出现java.lang.UnsupportedClassVersionError 错误的原因
出现java.lang.UnsupportedClassVersionError 错误的原因,是因为我们使用高版本的JDK编译的Java class文件试图在较低版本的JVM上运行,所报的错误。因为,高版本的JDK生成的class文件使用的格式,可能与低版本的JDK的.class文件格式不同。这样,低版本的JVM无法解释执行这个.class文件,会抛出java.lang.Unsupported...原创 2010-08-16 23:11:10 · 86 阅读 · 0 评论