【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;

相关推荐
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~4 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616884 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7894 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~5 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
程序媛小果5 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot