tomcat读书笔记-WEB应用加载篇

Context Config
  1. AFTER_INIT_EVENT 主要负责加载config,加载顺序是META-INF/configFileconf/<Engine名称>/<Host名称>/congfig.xml.defaultconf/context.xml

  2. BEFORE_START_EVENT 主要是用来更新docBase属性及是否对原资源目录进行copy避免加锁

  3. CONFIGURE_START_EVENT 主要用来加载Web Context,读取web.xml形成WebXml对象,并根据这个配置进行加载Web Context

StandardWrapper

这个维护了具体的servlet实例,在StandardContext启动过程中,StandardWrapper处理分成两个部分

  1. 当ContextConfig完成web容器初始化后,先调用StandardWrapper.start,此时StandardWrapper组件状态变为STARTED,发送启动广播
  2. 对于启动时加载的Servlet(即load-on-startup > 0),调用StandardWrapper.load方法,完成servlet的加载

具体过程如下:

  1. 创建servlet实例,注入所依赖的JNDI资源
  2. 读取javax.servlet.annotation.MutipartConfig配置。这个配置是用来multipart/form-data请求处理,包括临时文件存储路径、上传文件最大字数、请求最大字数、文件大小阈值。
  3. 根据javax.servlet.annotation.ServletSecurity()配置添加servlet安全
  4. 调用javax.servlet.Servlet.init()进行servlet初始化

请求处理过程

首先要讲到的是tomcat通过org.apache.tomcat.util.http.mapper.Mapper维护请求连接与Host、Context、Wrapper等Container的映射。通过通过org.apache.catalina.connector.MapperListener监听器监听所有的Host、Context、Wrapper组件,在相关组件启动、停止时注册或者移除

其次要讲到的是如何将Connector与Mapper连接起来,这里用到的就是org.apache.catalina.connector.CoyoteAdapter,当Connector收到请求时,调用CoyoteAdapter.service()方法完成请求处理

具体过程如下:

  1. 根据Connector的请求(org.apache.coyote.Request)和响应(org.apache.coyote.Response)对象转化为Servlet请求(org.apache.catalina.connector.Request)和响应(org.apache.catalina.connector.Response)
  2. 转换请求参数并完成请求映射。
  3. 请求URI解码,初始化请求路径的参数
  4. 请求映射,得到请求结果org.apache.tomcat.util.http.mapper.mapper.MappingData, 然后最终映射为一个有效的Wrapper
  5. 如果当前Connector不允许跟踪,那么就设置allowTrace为false。如果当前请求的方法是trace,那么就返回405响应码。
  6. 执行连接器的认证及授权。
  7. 得到Engine的第一个value并执行完成客户端的处理。
  8. 如果为异步请求,获取请求事件监听器ReadListener,如果数据返回,则触发ReadListener.onAllDataRead方法。如果是同步请求,直接Flush并关闭请求输入流,flush关闭响应输出流
MapperWrapper映射

映射顺序为exactWrappers > wildcardWrappers > extendsionWrappers > 欢迎文件 exact > wildcard > extendsion)

默认的servlet

在${catalina_home}/conf/web.xml自带了两个默认的servlet,分别是defaultServlet和jspServlet

defaultServlet主要用于处理静态资源,例如js,html等

这里记得比较乱,是因为在读tomcat这本书的时候。书里在介绍的时候,写的像阅读代码一样没有太多总结,而太多的具体详细过程对我没有一个直接的印象,所以只记录我觉得涉及到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值