JavaWeb学习(12): servlet 的生命周期(执行流程)

Servlet 的执行流程:

加载 和 卸载 : Servlet 容器自动处理。

加载
初始化: init()      该方法会在 Servlet被加载并实例化的以后 执行
服务  :service()    ->doGet()  doPost
销毁  :destroy()    Servlet被系统回收时执行
卸载

各个阶段的执行次数:

加载和卸载:Servlet 容器自动处理。
  
init: 默认第一次访问 Servlet 时会被执行(只执行这一次)。
      可以修改为在启动服务器时就自动执行。
            i.Servlet2.5:  web.xml
		  <servlet>
			...
			 <load-on-startup>1</load-on-startup>
			</servlet>
		其中的“1”代表第一个。
	ii.Servlet3.0
		@WebServlet( value="/WelcomeServlet" ,loadOnStartup=1  )
service:(主要是 doget() 方法 和 dopost() 方法)
    doGet(): 主要处理 get 提交方式的请求。
    doPost(): 主要处理 Post 提交方式的请求。

    调用几次,执行几次。
destroy():
    关闭 Tomcat 服务器时,执行一次。

效果展示:

默认第一次访问时调用 init() 方法:

修改后服务器启动时自动调用 init() 方法:

Service 服务调用几次执行几次:

销毁时自动调用 destroy() 方法:

代码展示(3.0):

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
		<!-- 超链接默认也是 get 提交方式 -->
		<a href = "WelcomeServlet">WelcomeServlet</a>
		
		<form action="WelcomeServlet" method = "post">
			<input type = "submit" value = "登录">
			
		</form>
</body>
</html>

WelcomeServlet.java

package org.servlet3;

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;

// loadOnStartup = 1 : 修改为Tomcat服务器启动时自动调用 init() 方法
@WebServlet(value = "/WelcomeServlet" ,loadOnStartup=1)
public class WelcomeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Override
	public void init() throws ServletException {
		System.out.println("init...");
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet...");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doPost...");
//		doGet(request, response);
	}
	
	@Override
	public void destroy() {
		System.out.println("destroy...");
	}

}

原文地址:https://www.cnblogs.com/prjruckyone/p/12551806.html