Tomcat
hixiaoxiaoniao
这个作者很懒,什么都没留下…
展开
-
Tomcat源码分析---设计模式
责任链模式(Chain of Responsibility)责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,知道链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。责任链模式的简略类图如下所示:Tomcat中责任链模式...原创 2018-06-22 12:19:29 · 403 阅读 · 0 评论 -
Tomcat源码分析---线程池原理
Tomcat线程池目前出现过三种,第一个是5.0的线程池模型,这个线程池目前在6.x的版本还存在,主要是用于AJP的,第二个是5.5.x时代使用了一仲线程池第三个是6.x版本的线程池,实际上这个不是tomcat的线程池了,tomcat使用的是JDK的线程池ThreadPoolExecutor首先来分析一下最老的版本5.0使用的线程池线程池只有一个类,ThreadPool,它里面包含了两个内部类一个...原创 2018-06-26 21:09:12 · 1243 阅读 · 0 评论 -
Tomcat源码分析---BIO请求处理过程
NIO和BIO在设计的架构上,很多东西都差不多,下面从一些类图开始介绍,NIO的部分完全可以参照这个图,两者都是非常类似的。首先看一下处理请求的核心类Http11Processor,和这个类关联的一些主要类图如下:NIO和BIO在设计的架构上,很多东西都差不多,下面从一些类图开始介绍,NIO的部分完全可以参照这个图,两者都是非常类似的。首先看一下处理请求的核心类Http11Processor,和这...原创 2018-06-26 21:07:40 · 895 阅读 · 0 评论 -
Tomcat源码分析---NIO请求处理过程
NIO的启动过程这里就不再介绍了,具体请看《Tomcat源码分析---启动过程》一文。这里要补充几点,1.在启动的时候,执行到NioEndpoint#init()方法的最后一行,很不起眼的一句:selectorPool.open();也就是调用NioSelectorPool#open(),它会启动NioBlockingSelector的一个内部类线程BlockPoller,不过很奇怪的事,大...原创 2018-06-26 21:02:58 · 1613 阅读 · 1 评论 -
Tomcat源码分析---停止过程
当Tomcat执行完后,会注册一个钩子线程,之后主线程main会启动一个ServerSocket,监听8005的数据。这两个方式都是用来做关闭处理的,钩子线程会调用Catalina#stop(),由Catalina负责关闭整个容器。当执行shutdown.bat命令后会发起一个socket连接,连接器到本地的8005端口,这样原本处于等待的BIO连接器就激活了,会转而继续执行后续的方法,后续的方法...原创 2018-06-26 20:59:31 · 727 阅读 · 0 评论 -
Tomcat源码分析---后台线程管理
Tomcat后台管理以前也接触过,比如对普通session,持久session,集群session的超时管理,就是后台线程去做的。在看时序图之前首先看一下后台线程,也就是ContainerBase的内部类ContainerBackgroundProcessor里面的一个重要方法processChildren(),它是由ContainerBackgroundProcessor#run()每隔一定的时...原创 2018-06-26 20:58:04 · 590 阅读 · 0 评论 -
Tomcat源码分析---启动过程
Tomcat启动是由Bootstrap开始的,大家都知道Tomcat最顶层的容器是Server,而Server又是是由Catalina调用的,理论上可以不用Bootstrap,只用Catalina就可以启动tomat了,使用Bootstrap的理由是。设计者希望有多种方式启动Tomcat,Catalina是一种固定的启动方式,而调用它的方式可能有很多种,Bootstrap是用命令行的方式去调...原创 2018-06-25 11:41:03 · 2579 阅读 · 1 评论 -
Tomcat源码分析---Session的管理
Session的作用范围介于请求和上下文之间,多次请求可以公用一个session,但这个session是有时间限制的,而上下文是一直存在的。一个请求就对应一个Request,当请求结束了Request就会被回收,而session是通过request获取的,实际上request获取session的时候是委托给Manager,由Manager去获取一个session再交给request的。 ...原创 2018-06-25 11:35:57 · 282 阅读 · 0 评论 -
Tomcat源码分析---集群原理
nnn原创 2018-06-25 11:26:51 · 309 阅读 · 0 评论 -
Tomcat源码分析---请求在容器中
Tomcat容器处理请求的过程第一部分如下图所示:首先通过CoyoteAdapter调用connector.getContainer().getPipeline().getFirst().invoke(request, response);将请求转给容器,关于这句话的意思,请看 Tomcat源码分析---设计模式容器经过一系列的valve处理,最终会将请求转到servlet或者JSP,前面...原创 2018-06-25 11:25:57 · 178 阅读 · 0 评论 -
Tomcat-乱码
首先,说说JSP/Servlet中的几个编码的作用。 在JSP/Servlet中主要有以下几个地方可以设置编码,pageEncoding="UTF-8"、contentType="text /html;charset=UTF-8"、request.setCharacterEncoding("UTF-8")和 response.setCharacterEncoding("UTF-8"),其中前两个只...原创 2018-06-25 11:24:13 · 156 阅读 · 0 评论 -
Tomcat-配置JMX
Tomcat的JMX支持默认应该是关闭的,首先我们得打开Tomcat的JMX支持,同时指定远程访问的IP地址、接口、是否支持SSl,是否验证访问 等信息。 在Tomcat启动的VM arguments中加入下面的参数: Xml代码 1.-Dcom.sun.management.jmxremote 2.-Dcom.sun.management.jmxremote.port=8060 3.-...原创 2018-06-25 11:22:57 · 2348 阅读 · 0 评论 -
tomcat-web.xml配置
web.xml元素介绍我将自己知道的web.xml的元素整理了一下: web.xml首先是肯定要包 含它的schema. <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://...原创 2018-06-25 11:22:14 · 567 阅读 · 0 评论 -
Tomcat-数据源配置
这里我的Tomcat版本为5.0.28,这个版本应该说是Tomcat比较稳定的一个版本。 在 $TomcatHome$/conf/server.xml文件($TomcatHome$是指你的tomcat安装路径),然后在<Host>节点下添加: 或者在catalina/localhost/下 添加一个xx.xml 文件 <Context path="/...原创 2018-06-25 11:20:46 · 122 阅读 · 0 评论 -
Tomcat-极限启动时间
2008-7-11 7:27:26 org.apache.coyote.http11.Http11Protocol init信息: Initializing Coyote HTTP/1.1 on http-80802008-7-11 7:27:26 org.apache.catalina.startup.Catalina load信息: Initialization processed in 16...原创 2018-06-25 11:20:08 · 193 阅读 · 0 评论 -
Tomcat-阀
Tomcat 阀用于对Catalina 容器接收到的Http 请求进行预处理,可以加入到Eegine、Host和Context 三种容器中,作用范围如下:Engine :加入到Engine 中的Tomcat 阀可以预处理该Engine接收到的所有的Http请求Host :加入到Host 中的Tomcat 阀可以预处理该Host接收到的所有的Http请求Context :加入到Context 中的T...原创 2018-06-25 11:19:28 · 311 阅读 · 0 评论 -
Tomcat-对集群原理的一些思考
一个用户是否会读到另一个用户正在写但没写完的数据?所谓的脏读不会的,因为一个session就对应一个用户,这是不会出现A用户读到B用户的session的。另外假设有10个节点,当请求经过apache到节点1,然后创建一个session,然后容器一边发送session复制的通知(异步通知),一边将相应数据写给用户。 假设发送的session数据还没达到节点2的时候,用户很快又访问到了节点2,此时就有...原创 2018-06-26 21:09:59 · 161 阅读 · 0 评论