目录
[1. init方法](#1. init方法)
[2. destory方法](#2. destory方法)
[3. service方法](#3. service方法)
[4. servlet生命周期](#4. servlet生命周期)
前文已经提及到:servlet是tomcat提供的,用于操作HTTP协议的一组API,可以将这组API理解为HTTP服务器的框架;
编写一个servlet程序,往往都要继承HttpServlet类,重写里面的方法,而无需写一个main方法;
对于以往的程序,可将程序视为一辆汽车,main方法就是发动机;
对于servlet程序,可将servlet程序视为一辆火车的车厢,这个程序没有main方法,不是直接运行的,而是放到tomcat上运行的,而tomcat程序是有main方法的,tomcat就是火车头,写的webapp就是车厢。而继承HttpServlet类,重写其方法,就是把程序员自己定义的代码插入到tomcat中;
1. 核心方法
|-------------------------------|-------------------------------|
| 方法名称 | 调用时机 |
| init | 在HttpServlet实例化之后被调用一次 |
| destroy | 在HttpServlet实例不再使用的时候调用一次 |
| service | 收到HTTP请求的时候调用 |
| doGet | 收到GET请求时调用(由service方法调用) |
| doPost | 收到POST请求时调用(由service方法调用) |
| doPut/doDelete/do Options/... | 收到其他请求时调用(由service方法调用) |
注意:1. 以上方法均可在子类中重写;
- 以上方法被重写后,均不需要程序员手动调用 ,都是tomcat在合适的时机自行调用;
2. init方法
- init方法在Servlet被实例化之后自动执行,用于完成初始化操作;
3. destory方法
-
destory方法在Servlet被销毁之前自动执行,用于释放资源;
-
destory方法很大概率是执行不到的,一个Servlet不用了,说名tomcat要关闭了,tomcat关闭有两种方式:
(1)直接销毁tomcat进程,这种情况下完全来不及调用destory;(更常见)
(2)通过8005管理端口,给tomcat发送停机指令,调用destory关闭tomcat;
4. service方法
-
service方法在每次收到HTTP请求时自动执行,用于处理请求与计算响应;
-
如果不重写service,父类(HttpServlet)的service就会根据请求的方法,分别调用doGet或doPost或doPut方法;
例如:
.java内容如下:
java
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 java.io.IOException;
@WebServlet("/Method")
public class MethodServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doPost");
resp.getWriter().write("doPost");
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPut");
resp.getWriter().write("doPut");
}
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doDelete");
resp.getWriter().write("doDelete");
}
}
使用Postman构造一个post请求进行测试:
同理构造doPut方法和doDelete方法进行发送;
在服务器日志端也可查看到记录:
5. servlet生命周期
开始时,执行 init;
每次收到请求,执行 service;
销毁前执行 destroy;