Servlet生命周期

Servlet是运行在服务器的一段程序,所以Servlet的生命周期会受Servlet容器的控制。Servlet生命周期包括加载、初始化、服务、销毁、卸载5个部分。通常情况下,加载和卸载阶段可以由Servlet容器来处理,在此只需要关注初始化、服务、销毁三个阶段。与Servlet生命周期相关的方法如下:

public void init() throws ServletException       :      初始化Servlet对象时调用此方法

public void init(ServletConfig config) throws ServletException     :   init()的重载方法,Servlet初始化时调用,并可以通过config来读取配置信息

public abstract void service(ServletRequest req,ServletResponse res) throws ServletException , IOException      :   提供Servlet服务的方法。此方法是抽象方法,故实际使用的是此抽象方法的实现方法 doGet()或doPost()来处理get或post请求

public void destroy()    :    销毁Servlet对象时调用此方法

(1)初始化

当一个Servlet被加载完毕并实例化以后,Servlet容器将调用 init() 方法初始化这个对象,执行一些初始化的工作,如读取资源配置信息等。如果初始化阶段发生错误,此Servlet实例将被容器直接卸载。

(2)服务

初始化完成以后,Servlet就会去调用service()的具体实现方法doGet()或doPost()来处理请求;并通过ServletRequest类型的参数接收客户端的请求,以及通过ServletResponse类型的参数处理响应信息。

(3)销毁

Servlet实例服务完毕以后,就可以通过destroy()方法来指明哪些资源可以被系统回收(注意,destroy()方法只是“指明”需要被回收的方法,并不会直接进行回收)

package com.lanqiao.shopping.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.jasper.tagplugins.jstl.core.Out;

/**
 * Servlet implementation class dog
 */
@WebServlet("/dog")
public class dog extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    @Override
    public void init() throws ServletException{
        System.out.println("初始化init()");
    }
    public dog() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    /*    response.getWriter().append("Served at: ").append(request.getContextPath());*/
        System.out.println("servlet服务doGet()..");
        
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        /*doGet(request, response);*/
        System.out.println("servlet服务doPost()..");
    }
    
    @Override
    public void destroy(){
        System.out.println("销毁destroy()");
    }
}
通过浏览器的地址栏访问服务器,属于get方式的请求,现在直接访问 http://localhost:8080/shopping/dog 

重复多次运行后

关闭服务器(注意是在Servers面板中单击红色的“关闭”按钮,而不是在Console控制台中),可以发现Servlet容器确实执行了destroy()方法:

不难发现,在Servlet生命周期中,初始化init()方法只在第一次访问时执行一次;而doGet()或doPost()方法会在服务器每次接收请求时都执行一次;销毁destroy()方法只会在关闭服务器时执行一次。需要说明,初始化方法init()默认会在客户端第一次调用Servlet服务让初始化init()方法在Tomcat容器启动时自动执行。

刚说了,通过浏览器的地址栏访问服务器,属于get方式的请求,现在通过一个表单来来试试post方式的请求:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
      <form action="${pageContext.request.contextPath}/dog" method="post">     
         <input type="submit" value="提交">
      </form>
</body>
</html>

运行结果:

点击提交按钮:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值