天天看点

04Servlet-3. Servlet执行过程分析

一、执行流程

1.客户端请求Servlet并提交给服务器

2.服务器就会在web.xml中寻找与之对应的URL地址(Servlet地址),即就是标签中的内容,还有对应的Servlet名,即标签中的内容

3.根据第二步找到的Servlet名寻找与Servlet对应的处理类 即标签中的内容,该标签内是要访问的Servlet所在的具体类

4.执行Servlet类中的doGet()和doPost()方法

二、生命周期

1.初始化阶段,调用构造方法生成Servlet实例

2.调用初始化方法:Servlet中的init()方法

3.响应客户端请求阶段,调用service()方法。由service()方法根据提交方式选择执行doGet()或者doPost()方法

4.终止阶段,调用destroy()方法

init() 方法

init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一样。

Servlet 创建于用户第一次调用对应于该 Servlet 的 URL 时,但是您也可以指定 Servlet 在服务器第一次启动时被加载。

当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

init 方法的定义如下:

public void init() throws ServletException {

// 初始化代码…

}

service() 方法

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

下面是该方法的特征:

public void service(ServletRequest request,

ServletResponse response)

throws ServletException, IOException{

}

service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重载 doGet() 或 doPost() 即可。

doGet() 和 doPost() 方法是每次服务请求中最常用的方法。下面是这两种方法的特征。

doGet() 方法

GET 请求来自于一个 URL 的正常请求,或者来自于一个未指定 METHOD 的 HTML 表单,它由 doGet() 方法处理。

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

// Servlet 代码

}

doPost() 方法

POST 请求来自于一个特别指定了 METHOD 为 POST 的 HTML 表单,它由 doPost() 方法处理。

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

// Servlet 代码

}

destroy() 方法

destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。

web客户向Servlet容器发出HTTP请求;      
Servlet容器解析web的HTTP请求.      
Servlet容器创建一个HttpRequest对象,在这个对象中封装了http请求信息;      
Servlet容器创建一个HttpResponse对象;      
Servlet容器(如果访问的该servlet不是在服务器启动时创建的,则先创建servlet实例并调用init()方法初始化对象)调用HttpServlet的service()方法,把HttpRequest和HttpResponse对象为service方法的参数传给HttpServlet对象;      
HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;      
HttpServlet调用HttpResponse的有关方法,生成响应数据;      
  1. Servlet容器把HttpServlet的响应结果传给web客户.

继续阅读