servlet生命周期

来源:互联网 发布:xp找不到网络路径 编辑:程序博客网 时间:2024/06/15 05:01

Servlet生命周期

public class ServletTest extends HttpServlet {    public ServletTest() {        super();    }    public void destroy() {        System.out.println("servlet销毁");    }    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("=====doGet方法====");    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("=====doPost方法====");    }    public void init() throws ServletException {        System.out.println("servlet初始化");    }}

web.xml文件 设置servlet

  <servlet>    <!-- servlet的名字  -->    <servlet-name>ServletTest</servlet-name>    <!-- servlet加载的类 -->    <servlet-class>com.zx.servletTest.ServletTest</servlet-class>  </servlet>  <servlet-mapping>    <!-- 指定servlet设置路径 -->    <servlet-name>ServletTest</servlet-name>    <!-- servlet的请求路径 -->    <url-pattern>/servlet/ServletTest</url-pattern>  </servlet-mapping>
  1. init(): servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

  1. service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
  2. destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

Tomcat 与 Servlet 是如何工作的:

步骤:
1. Web Client 向Servlet容器(Tomcat)发出Http请求
2. Servlet容器接收Web Client的请求
3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
4. Servlet容器创建一个HttpResponse对象
5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。
6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
8. Servlet容器把HttpServlet的响应结果传给Web Client。

Servlet的运行过程
*Servelt程序是由Web服务器调用的,web服务器收到客户端的Servelt请求后:
1.Web服务器首先检查是否已经装载并创建了该Servelt的实例对象,如果是直接执行4,否则执行2。
2.装载并创建Servlet的一个实例对象
3.调用Servelt实例对象的init方法
4.调用一个用于封装的HTTP请求消息的HttpServletRequest对象和一个代表Http消息的HttpServeltResponse对象,然后调用Servelt的service()方法并将请求和响应对象作为参数传递进去。
5.Web应用程序被停止或者重新启动之前,Servelt引擎将卸载Servelt,并在卸载后调用destroy()方法。

创建Servlet对象的时机:
1. Servlet容器启动时:读取web.xml配置文件中的信息,构造指定的Servlet对象,创建ServletConfig对象,同时将ServletConfig对象作为参数来调用Servlet对象的init方法。
2. 在Servlet容器启动后:客户首次向Servlet发出请求,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据客户的请求创建HttpRequest、HttpResponse对象,从而调用Servlet 对象的service方法。
3. Servlet Servlet容器在启动时自动创建Servlet,这是由在web.xml文件中为Servlet设置的属性决定的。从中我们也能看到同一个类型的Servlet对象在Servlet容器中以单例的形式存在

 <load-on-startup>1</load-on-startup>数值越小创建实例的优先级越高,(启动顺序)
原创粉丝点击