servlet2.5 & servlet3.0 处理上的差别 待续...
1、tomcat概念
Tomcat是Web应用服务器,可以解析http协议,当收到HTTP请求(request),返回HTTP响应(response)。可以直接响应一个静态页面(apache实现),或者动态响应比如servlet。最后通常以HTML格式返回给浏览器。注:apache+tomcat 结合主要是apache处理静态响应 且比tomcat高效,动态响应apache交给tomcat来做。
2、tomcat结构组件
Tomcat主要包括俩大组件:connector、container
一个Tomcat中只有一个Server(shutdown端口、掌握整个服务生死大权),一个Server可以包含多个Service,一个Service只有一个Container,但是可以有多个Connectors,这是因为一个服务可以有多个连接,如同时提供Http和Https链接,也可以提供向相同协议不同端口的连接,示意图如下(Engine、Host、Context下边会说到):
2.1、connector
监听浏览器tcp请求----->封装Request、Response---->起新线程把request、Response交给engine----engine处理request返回response给connector---->返回浏览器 servelt3.0?
connector常用监听端口:HTTP请求、其他WebServer请求、redirectPort(http发来的请求,资源要求必须https访问,跳转ssl端口)
2.2 container
Container
Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。
engine(servlet引擎)------>n个host---->n个context(1个application)------>n个servlet(wrapper)
Engine
Engine 容器比较简单,它只定义了一些基本的关联关系 Host 容器
Host
一个Host代表一个虚拟主机1、运行多个应用(context)。2、配置主机信息
Context
Context 最重要的功能就是管理它里面的 Servlet 实例,context通过 request 来找到serveltWrapper
Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。
3、tomcat处理http流程
browser http(host:port/path/url)--->connector http监听端口监听到http请求,封装request、response---->request、response交给engine
---->engine根据路径host匹配对应host---->host根据路径path匹配对应context----->context根据url在conetxt的mapping table中匹配到servlet------->执行servlet方法---返回response给host--->返回response给engine---->返回response给connector---->返回response给browser
1.用户在浏览器中输入网址localhost:8080/test/index.jsp,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得;
2.Connector把该请求交给它所在的Service的Engine(Container)来处理,并等待Engine的回应;
3.Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host;
4.Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理);
5.path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL Pattern为*.jsp的Servlet,对应于JspServlet类;
6.构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等;
7.Context把执行完之后的HttpServletResponse对象返回给Host;
8.Host把HttpServletResponse对象返回给Engine;
9.Engine把HttpServletResponse对象返回Connector;
10.Connector把HttpServletResponse对象返回给客户Browser。