初出茅庐系列之Servlet工作原理

Servlet

  • Servlet如何被加载
  • Servlet如何被初始化
  • Servlet如何工作
  • web.xml详解

前言

参考以下链接,在此感谢!
https://www.ibm.com/developerworks/cn/java/j-lo-servlet/
https://www.cnblogs.com/murthy/p/6560004.html

Servlet如何被加载

  • Tomcat容器启动,所有的容器都会继承 Lifecycle 接口,所有容器同时启动
  • Context容器调用StandardContext的start()启动
  • ContextConfig类会负责整个Context容器(web应用)的配置文件的解析工作
  • Context容器的会执行 startInternal方法后,servlet被加载

Servlet如何被初始化

  • ContextConfig的configureStart实现Web应用的初始化,应用的初始化主要是要解析web.xml文件
  • web.xml文件描述了一个Web应用的关键信息,也是一个Web应用的入口
  • WebXml对象中的属性设置到Context容器中,这里包括创建Servlet 对象、filter、listener 等等
  • Servlet 包装成 Context 容器中的 StandardWrapper
  • 初始化Servlet在StandardWrapper的initServlet方法中,这个方法很简单就是调用Servlet的init的方法

Servlet如何工作

  • 浏览器向服务器发起一个请求,http://hostname:port/contextpath/servletpath
  • hostname 和 port 是用来与服务器建立 TCP 连接
  • 后面的URL才是用来选择服务器中那个子容器服务用户的请求
  • 当 Request 进入 Container 容器之前,它要访问那个子容器这时就已经确定
  • 映射工作有专门一个类来完成的,这个就是 org.apache.tomcat.util.http.mapper

web.xml配置参数

  • context-param:声明应用范围内的初始化参数(Context容器参数)
  • filter:过滤器
  • listener:监听器
  • servlet:wrapper

web.xml 监听类

  • ServletContextAttributeListener
  • ServletRequestAttributeListener
  • ServletRequestListener
  • HttpSessionAttributeListener
  • ServletContextListener(LifecycleListeners)
  • HttpSessionListener(LifecycleListeners)

filter工作原理

  • Filter接口中有一个doFilter方法
  • 编写Filter,并配置对哪个web资源进行拦截
  • WEB服务器每次在调用Servlet(JSP)的service方法之前,都会先调用一下filter的doFilter方法
  • Tomcat调用doFilter方法时,会传递一个filterChain对象进来
  • 执行filterChain对象的dofilter方法,放行请求

总结

在web.xml中配置的url-pattern就是wrapper容器的地址;请求过来之后,先通过connector容器,建立http连接;然后将请求封装转发给container容器,首先经过engine容器处理,然后通过host容器,在通过context容器,这个就是具体的应用程序了;最后到达wrapper容器,然后通过FilterChain调用所有的dofilter和servlet的service方法,完成请求的处理,然后将处理结果通过response返回。注意每个servlet对应一个wrapper容器,最后url对应到具体的servlet上,在servlet处理具体的请求。Servlet本身设计不是单例的,但是Tomcat容器会维护Servlet成单例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值