PHP笔记网

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2018-08-26 14:08:15  修改时间:2024-11-19 07:50:39  分类:07.Java基础  编辑

servlet生命周期

1、调用构造方法

     构造方法获得一个Servlet实例。

2、调用初始化方法 init();

     整个生命周期中,init()方法只被调用一次。

3、调用 service() 决定使用 doGet() 还是 doPost()

4、调用销毁 destroy() 方法

     关闭服务器时执行销毁方法。

package Servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

/**
 * Servlet implementation class YourServlet
 */
@WebServlet("/YourServlet")
public class YourServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public YourServlet() {
       System.out.println("调用构造方法");
    }

    /**
     * @see Servlet#init(ServletConfig)
     */
    public void init(ServletConfig config) throws ServletException {
        System.out.println("调用初始化方法");
    }

    /**
     * @see Servlet#destroy()
     */
    public void destroy() {
        System.out.println("调用销毁方法");

    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        out.print("hello servlet");
        System.out.println("调用Get方法");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

Servlet自动加载

默认情况下,第一次访问servlet的时候创建servlet对象。如果servlet的构造方法或init方法中执行了比较多的逻辑代码,那么导致用户第一次访问sevrlet的时候比较慢。

解决方案:

       改变servlet创建对象的时机:提前到加载web应用的时候!!!

实施: 

      在servlet的配置信息中,加上一个<load-on-startup>即可!!

<servlet>
    <servlet-name>ServletLife</servlet-name>
    <servlet-class>lm.practice.ServletLife</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

注意:是在servlet中,不是在servlet-mapping里!!!

 

<load-on-startup>里面必须是整数,可以将多个servlet配置为自动加载,这时候的整数就可以依次+1,数字越大,优先级越低!!!

效果:

还没有在浏览器中输入地址,就出现了下面的信息哦,你看,successfully在后面了!

当在地址栏中执行servlet时,不会重新调用构造方法和init方法了,只会调用service方法,当停止tomcat或者重新部署web应用时,会调用destroy方法!