servlet理解

转自:https://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html
servlet和servlet容器为了解耦,通过标准化接口来相互协作
servlet容器:tomcat 、jetty
tomcat容器模型:


管理Servlet容器是Context容器,一个Context对应一个Web工程


Web应用的初始化工作
1.在ContextConfig的configureStart方法中实现的
--->解析web.xml:一个Web应用的入口
2.web.xml文件中的各个配置项将会被解析成相应的属性保存在WebXml对象中
3.将webXml对象的属性设置到Context容器中(servlet对象、filter、listener等)
--->在WebXml的configureContext方法中

创建Servlet实例
1.Servlet的load-on-startup配置项大于0,Context容器启动的时候会被实例化
2.创建Servlet实例的方法:Wrapper.loadServlet
-->获取ServletClass,把它交给InstanceManager创建一个基于servletClass.class的对象

初始化Servlet
1.初始化Servlet在StandardWrapper的initServlet方法中(-->调用Servlet的init方法)
2.把包装了StandardWrapper对象的StandardWrapperFacade作为ServletConfig传给Servlet

Servlet体系结构

1.ServletConfig、ServletRequest、ServletResponse三个类都是通过容器传递给Servlet的
1.1 ServletConfig是在Servlet初始化时就传给Servlet
1.2 ServletRequest、ServletResponse是在请求达到时调用Servlet时传递过来的
2.Servlet的运行模式时一个典型的“握手型的交互式”运行模式
(两个模块为了交换数据通常都会准备一个交易场景)
2.1 交易场景的初始化根据这次交易对象指定的参数来定制的
---->交易场景由ServletContext来描述
定制参数集合由ServletConfig来描述



1. standardWrapperFacade是StandardWrapper门面类
--->保证从StandardWrapper中拿到ServletConfig所规定的数据,而又不把ServletConfig不关心
的数据暴露给Servlet
2.Servlet中拿到的ServletContext的实际对象是ApplicationContextFacade对象

Request 相关类结构图


Servlet如何工作
http://hostname: port /contextpath/servletpath
1.hostName和port用来与服务器建立TCP连接
2.后面URL用来选择服务器中哪个子容器服务用户的请求
3.mapper类保存了Tomcat的Container容器中的所有子容器的信息
--->Request类进入Container容器之前,mapper将会根据这次请求的hostname和contextpath将
host和context容器设置到Request的mappingData属性中
4.mapper有容器的完整关系 ----> MapperListener类的初始化(MapperListener.init)
5.MapperListener类作为一个监听者加到整个Container容器中的每个子容器中
---->每个子容器发生变化,MapperListener都会被通知

Request在容器中的路由图


猜你喜欢

转载自blog.csdn.net/qq_17037733/article/details/80680855