1首先从最基本的tomcat:开始一个请求说起:
假设来自客户的请求为:
http://localhost:8080/spring/cc.jsp
1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”"的Context去处理)
7) path=”/wsota”的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser
*
* 首先每一种东西的产生都有他的用途。
*
* 2种情况第一种情况:本身自己的系统,肯定直接通过浏览器直接访问或ajax请求到服务器端
*
* 浏览器form表单或者ajax给你封装好了http报文协议
* 第二种情况:自己通过httpclient以及开源的java客户端util向服务器端发起请求
*
3这东西我越问越深了。哎怎么办呢??为什么tomcat能够接受到请求呢?为什么又执行了自定义的servlet中的service了呢??
/我是学Java的所以我就以tomcat为例
//1用户通过浏览过程是浏览器根据用户的选择将相关信息按http协议报文的规范组装请求的http报文,报文通过网络传输到指定的服务器,服务器通过特定的web容器接收这个报文信息,例如:tomcat,jetty,jboss这样的web容器,web容器会将http报文解析出来,如果是用户请求,最终解析出来的报文信息会用一个request对象存储起来,服务端使用这个request做完相应的处理后,服务端程序将结果信息封装到response对象里,然后将response对象交给web容器,web容器则把这个response对象转变为http协议的报文,并将报文回传给浏览器,浏览器最后解析这个响应报文,将最终结果展示给用户。
//2用户发起请求到80端口的tomcat容器======tomcat容器将浏览器的报文头解析放入到request中,将相应处理后的信息放入到response中。但是最为开发者你改如何使用容器接收到的数据,以及拿到服务器tomcat相应的数据呢??、
//3既然容器已经把结果放入到了request和response中
//程序不知道啊,java程序怎么获取呢?于是伟大的servlet
//就出现了。我的tomcat容器只创造servlet接口、
//简单理解:就是tomcat将请求传递给了servlet
//Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,
//利用httpclient请求过来的东西=====首先请求到tomcat,tomcat直接继续解析自己的web.xml中的东西
//然后加载项目下的web.xml中的servlet映射。他会告诉哦,用户请求我这个servlet了,我要开始工作了。。
最后总结::
、
,一般情况下:tomcat内部
//已经有了servlet接口:tomcat GenericServlet实现了servlet接口:httpServlet是基于http继承了GenericServlet
//servlet这个接口主要是:定义了容器的初始化 请求 销毁三个动作。
//但是这样还不够啊,用户的请求request 和response怎么办呢?所以出现了ServletRequest和ServletResponse
//但是httpservlet类是继承过来的,怎么办呢所以自己也造了一个HttpServletRquest和HttpServletResponse作为参数
那么说这么多我自己都迷了,怎么迷呢为什么会执行我servlet的service方法呢??、(tomcat很复杂不要想了哈哈)
1、Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,
同时将ServletConfig对象作为参数来调用Servlet对象的init方法。
2、在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对
象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet
对象的service方法。
3、Servlet的类文件被更新后,重新创建Servlet
Servlet容器在启动时自动创建Servlet,这是由在web.xml文件中为Servlet设置的<load-on-startup>属性决定
的。从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在。
哈哈。当tomcat为你创建servlet这个类的时候就开始执行你的init方法和service方法了::tomcat自动帮你执行了,关注好你的业务逻辑吧,容器帮你去调用你 的service方法了