Servlet总结(1)--Servlet的生命周期

一、Servlet简介
Servlet是sun公司提供的一门用于开发动态web资源的技术。
主要过程
1、编写一个JAVA类,实现Servlet接口。
2、把项目部署到服务器上

二、Servlet的生命周期
1、servlet接口的主要方法
1)init()方法
初始化方法,在一个servlet创建时调用一次。何时为初始化?也就是Servlet容器装转Servlet时,进行的初始化,在以下情况下,Servlet容器会装载Servlet:
a、web.xml文件中配置了一下信息:

<loadon-startup>1</loadon-startup> 

代表Servlet容器在启动后自动加载Servlet,这个时候会调用init()方法。
b、Servlet容器启动后,客户端第一次调用Servlet时,由于Servlet还没被加载,所以需要先进行加载,则调用init()方法
c、Servlet更新之后重新加载,也会调用init()方法
在整个Servlet的生命周期里,init()方法只被调用一次!!!!!!!!!!!!!!

2)service()方法
servlet创建之后调用该方法,用于响应客户端的请求,在此基础上,更具客户端调用方法的不同,分别还有doPost()和doGet()方法,通常,我们所有的响应程序都会写在改方法里面。
这里需要注意的是,Servlet接口是没有这些方法的,这些方法都是在HttpServlet接口中定义的。
这几个接口的关系:
新建的Servlet类,继承于HttpServlet
HttpServlet—-继承自—->GenericServlet—-继承自—->Servlet
GenericServlet和Servlet接口都不特定于任何协议,而HttpServlet特定于HTTP协议,所以,在HttpServlet实现service()方法时,将ServletRequest和ServletResponse对象强制转型为HttpRequest和HttpResponse对象。
客户端发送请求到Servlet之后,Servlet会创建两个对象ServletRequest和ServletResponse对象,我们可以通过ServletRequest对象获取到客户端传过来的参数。这些参数存放在一个HashTable当中,HashTable的定义为


private Hashtable<String String[]> paramHashStringArray = new Hashtable<String String[]>();

通过键值获取value值。
3)destroy()方法
一个servlet结束时,调用该方法,何时为结束?当web应用终止时,或者Servlet容器终止运行,或Servlet容器重新装载Servlet新实例,这些情况下,会调用该方法,释放servlet中的所有资源。

三、实例
通过代码输出到控制台可以清楚的看到servlet的生命周期

package day.servlet01;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

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

public class ServletDemo01 extends HttpServlet {

    static int i = 0;
    private ServletConfig config;
    /**
     * Constructor of the object.
     */
    public ServletDemo01() {

        super();
        sop("构造方法:"+i++);
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        sop("destroy"+i++);
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }

    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        sop("doGet:"+i++);
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        /*
         * 获取初始化参数
         */
        String paramUser = this.config.getInitParameter("name");
        out.print(paramUser);

        out.print("<hr>");
        //获取所有初始化参数
        Enumeration<String> e = config.getInitParameterNames();

        while(e.hasMoreElements()){
            String name = e.nextElement();
            String value = config.getInitParameter(name);
            out.print(name + "=" + value+ "<br>");
        }
        out.print("<hr>");


        out.close();
    }

    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        sop("doPost:"+i++);
        doGet(request, response);
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init(ServletConfig config) throws ServletException {
        // Put your code here
        this.config = config;//获取初始化参数
        sop("init:"+i++);

    }

    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
            throws ServletException, IOException {
        sop("service:"+i++);
        // TODO Auto-generated method stub
        super.service(arg0, arg1);
    }

    public static void sop(Object o){
        System.out.println(o);
    }

}

控制台信息:

*构造方法:0
init:1
service:2
doGet:3*****

当停止tomcat服务时,相当于web应用终止,控制台:

destroy4

综上:
Servlet的生命周期

1、被加载时,创建一个servlet对象
2、调用初始化方法Init()
3、请求响应阶段调用service()方法
4、web应用终止时,调用destroy()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值