servlet

Servlet生命周期

2014-08-06  本文已影响64人  kylelin

Servlet程序是运行在服务器端的一段Java程序,其生命周期受到Web容器的控制,生命周期包括:加载程序、初始化、服务、销毁、卸载五个部分。


QQ截图20140806191343.png

** 1. 加载Servlet**
Web容器负责加载Servlet,当Web容器启动时或者是在第一次使用这个Servlet时,容器会负责创建Servlet实例,但是用户必须通过部署描述符(web.xml)指定Servlet的位置(Servlet所在的包、类名称),成功加载后,Web容器会通过反射的方式对Servlet进行实例化。

** 2. 初始化**
当一个Servlet被实例化后,容器将调用init()方法初始化这个对象,初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库连接、读取资源文件信息等,如果初始化失败,则此Servlet将被直接卸载。

** 3. 处理服务**
当有请求提交时,Servlet将调用service()方法(常用的是doGet()或doPost())进行处理。在service()方法中,Servlet可以通过ServletRequest接受客户端的请求,也可以通过ServletResponse设置响应信息。

** 4. 销毁**
当Web容器关闭或者检测到一个Servlet要从容器中被删除时,会自动调用destroy()方法,以便让该实例释放掉所占用的资源。

** 5. 卸载**
当一个Servlet调用完destroy()方法后,该实例将被等待被垃圾收集器所回收,如果需要再次使用此Servlet时,会重新调用init()方法初始化。
需要提醒读者的是,在正常情况下,Servlet只会初始化一次,而处理服务会调用多次,销毁也只会调用一次。但是如果一个Servlet长时间不使用的话,也会被容器自动销毁,而如果需要再次使用时会重新进行初始化的操作。即在特殊情况下初始化可能会进行多次,销毁也可能进行多次。

LifeCycleServlet.java

package im.weitang;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LifeCycleServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {
        System.out.println("1、Servlet初始化 ---> init()");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("2、Servlet服务 ---> doGet()、doPost()");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }

    @Override
    public void destroy() {
        System.out.println("3、Servlet销毁 ---> destroy()");
    }

}

修改web.xml,添加如下代码

<servlet>
    <servlet-name>life</servlet-name>
    <servlet-class>im.weitang.LifeCycleServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>life</servlet-name>
    <url-pattern>/life</url-pattern>
</servlet-mapping>

在默认情况下,初始化方法是在第一次使用时调用,实际上也可以通过配置web.xml文件,在容器启动时就自动为Servlet初始化,只需要直接配置启动选项即可。

<servlet>
    <servlet-name>life</servlet-name>
    <servlet-class>im.weitang.LifeCycleServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>life</servlet-name>
    <url-pattern>/life</url-pattern>
</servlet-mapping>

以上配置完成后,当Web容器启动时,Servlet会自动进行初始化的操作。

上一篇下一篇

猜你喜欢

热点阅读