java面试题网

普通会员

257

帖子

9

回复

129

积分

楼主
发表于 2018-03-23 15:21:03 | 查看: 3831| 回复: 1

大致分为4部:Servlet类加载 -->实例化-->服务--> 销毁

下图是Tomcat中Servlet时序图。

1cec9335a896c6f4f1c5d849d2a9109d.jpeg

1、Web Client向Servlet 容器(Tomcat)发出Http请求。

2、Servlet容器接收Client 端的请求。

3、Servlet容器创建一个HttpRequest 对象,将Client的请求信息封装到这个对象中。

4、Servlet创建一个HttpResponse 对象。

5、Servlet调用HttpServlet 对象的service方法,把HttpRequest对象和 HttpResponse对象作为参数传递给HttpServlet对象中。

6、HttpServlet调用HttpRequest 对象的方法,获取Http请求,并进行相应处理。

7、处理完成HttpServlet调用HttpResponse 对象的方法,返回响应数据。

8、Servlet容器把HttpServlet 的响应结果传回客户端。

其中的3个方法说明了Servlet的生命周期:

1、init():负责初始化Servlet 对象。

2、service():负责响应客户端请求。

3、destroy():当Servlet 对象推出时,负责释放占用资源。



普通会员

257

帖子

9

回复

129

积分
沙发
发表于 2018-03-23 16:09:04

servlet 有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet 接口的init,service 和destroy方法表达。Servlet 被服务器实例化后,容器运行其init 方法,请求到达时运行其service 方法,service 方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与 cgi的区别在于servlet 处于服务器进程中,它通过多线程方式运行其service 方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

您需要登录后才可以回帖 登录 | 立即注册

java面试题网无聊看看网与java建站系统提供技术支持V2.1 网站地图 © 2016-2018