【JavaEE】_HttpServlet类

目录

[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. 以上方法均可在子类中重写;

  1. 以上方法被重写后,均不需要程序员手动调用 ,都是tomcat在合适的时机自行调用

2. init方法

  1. init方法在Servlet被实例化之后自动执行,用于完成初始化操作

3. destory方法

  1. destory方法在Servlet被销毁之前自动执行,用于释放资源

  2. destory方法很大概率是执行不到的,一个Servlet不用了,说名tomcat要关闭了,tomcat关闭有两种方式:

(1)直接销毁tomcat进程,这种情况下完全来不及调用destory;(更常见)

(2)通过8005管理端口,给tomcat发送停机指令,调用destory关闭tomcat;

4. service方法

  1. service方法在每次收到HTTP请求时自动执行,用于处理请求与计算响应

  2. 如果不重写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;

相关推荐
Maybyy12 分钟前
力扣242.有效的字母异位词
java·javascript·leetcode
小小寂寞的城1 小时前
JAVA观察者模式demo【设计模式系列】
java·观察者模式·设计模式
探索java2 小时前
Java并发编程中的StampedLock详解:原理、实践与性能优化
java·stampedlock
界面开发小八哥2 小时前
「Java EE开发指南」如何用MyEclipse将Java项目转换为Web项目?
java·ide·java-ee·eclipse·开发工具·myeclipse
pobu1682 小时前
aksk前端签名实现
java·前端·javascript
一个天蝎座 白勺 程序猿3 小时前
飞算JavaAI进阶:重塑Java开发范式的AI革命
java·开发语言·人工智能
前端 贾公子3 小时前
tailwindCSS === 使用插件自动类名排序
java·开发语言
没有bug.的程序员3 小时前
JAVA面试宝典 -《Spring Boot 自动配置魔法解密》
java·spring boot·面试
hnlucky3 小时前
《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》
java·linux·服务器·前端·nginx·tomcat·web