Tomcat 源码分析
文章平均质量分 50
Golden_Dog
这个作者很懒,什么都没留下…
展开
-
Tomcat中ClassLoader一些小结
前提:Tomcat容器本身包装了几个ClassLoader。standardClassLoader用来加载容器本身,webappClassLoader用来加载项目class文件,并且有一个父子关系存在。1. servlet 本身由WebappClassLoader 加载,从servlet中获得的ServletContext,HttpSession,HttpServletRequest均属于容器原创 2016-10-09 13:17:15 · 1678 阅读 · 0 评论 -
Tomcat 启动小结
1. 启动(windows 为例)直接运行startup.bat 不在环境变量中配置CATALINA_HOME与CATALINA_BASE:a. CATALINA_HOME使用当前bat所在目录上一级b. CATALINA_BASE使用CATALINA_HOME在环境变量中配置CATALINA_HOME与CATALINA_BASE:a. CATALI原创 2016-10-29 18:43:04 · 232 阅读 · 0 评论 -
Tomcat 总体结构分析
1. 总体概念tomcat作用可以简单概括成:通过接收到的请求寻找到对应的servlet。tomcat把功能的实现分解成两个大块:connector和container。connectors:负责请求的接收并转发给containercontainer:管理整个项目。具体对请求处理是丢给了Valve。2. 主要构成与server.xml中的配置对应原创 2016-10-29 20:07:54 · 397 阅读 · 0 评论 -
Tomcat Acceptor/Poller
Tomcat主要通过Acceptor和Poller来接收请求。【Acceptor】采用阻塞式循环等待客户端请求,将接收到的请求包装一下,然后放入Poller的events同步队列中【Poller】1. Poller对应一个selector2. Poller循环查看selector中是否有socketchannel处于就绪状态?-2.1 如果存在则将其丢给线程原创 2016-11-13 13:55:11 · 1450 阅读 · 0 评论 -
Tomcat session过期处理
StandardSession 的 isValid()主要处理过期判断逻辑public boolean isValid() { if (!this.isValid) { return false; } if (this.expiring) { return true; }原创 2018-01-06 23:56:09 · 966 阅读 · 0 评论 -
Tomcat 请求流程
以NIO为例1. NioEndpoint.Acceptor 阻塞处理 accept() 并把合适的socket 放置BlockingQueue2. NioEndpoint.Poller 从BlockingQueue拿socket,使用NIO的非阻塞方式 处理read(),把read()事件ready的socket交给线程池处理3. read() http请求内容并包装request原创 2018-01-06 21:47:19 · 321 阅读 · 0 评论 -
NIO实现服务端 和 客户端
重点:selector 的regist和 select 方法是用的同一个锁,所以需要注意避免阻塞https://bugs.openjdk.java.net/browse/JDK-6446653以下DEMO基本思路为tomcat实现备注:由于java的nio是采用水平触发,为了避免不断的write事件,需要引入blockingQueue来控制写流程服务端import jav...原创 2019-07-28 11:33:45 · 285 阅读 · 0 评论