Servlet体系

一、Servlet和请求、响应体系

java 复制代码
HttpServletRequest extends ServletRequest
HttpServletResponse extends ServletResponse

HttpServlet extends GenericServlet implements Serializable
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable

Servlet:顶层生命周期接口,协议无关;

HttpServlet 是它的 HTTP 实现类。

ServletRequest/ServletResponse:通用父接口,只有基础参数和输出流。

HttpServletRequest/HttpServletResponse:子接口,适配 HTTP;

·转发属于 Request,重定向属于 Response

二、定义

  1. Servlet(接口)
    javax.servlet.Servlet
    ✅作用:JavaWeb 组件顶层规范,和 HTTP 协议无关
    定义生命周期 5 个方法:
    init()、service()、destroy()、getServletConfig()、getServletInfo()
    service 方法参数:ServletRequest,ServletResponse(通用对象)
    没有 GET/POST 自动分发逻辑
    一般不直接实现
  2. HttpServet(拓展回顾)
    继承 GenericServlet,专门适配 HTTP;
    重写 service 方法,把 ServletRequest 强转为 HttpServletRequest,自动区分 GET/POST,调用 doGet/doPost。
  3. ServletRequest(父接口)
    通用请求对象,协议无关
    提供基础能力:
    获取请求参数 getParameter()
    请求域 setAttribute() / getAttribute()
    设置请求编码、获取输入流
    ❌没有:请求方式、URI、Session、Cookie、请求头等 HTTP 专属方法
  4. HttpServletRequest(ServletRequest 子接口)
    专为 HTTP 协议拓展
    在父接口基础上新增 HTTP 特有功能:
    getMethod() 获取 GET/POST
    getRequestURI()、getContextPath()
    getSession() 获取会话
    getCookies() 获取 Cookie
    getRequestDispatcher().forward() 请求转发
  5. ServletResponse(父接口)
    通用响应对象,协议无关
    基础能力:
    设置编码
    获取打印输出流 getWriter()
    ❌没有:状态码、响应头、Cookie、重定向
  6. HttpServletResponse(ServletResponse 子接口)
    HTTP 协议专属响应对象
    拓展功能:
    setStatus() 设置响应状态码
    setHeader() 设置响应头
    addCookie()
    sendRedirect() 重定向

总结:
Servlet:顶层生命周期接口,协议无关;HttpServlet 是它的 HTTP 实现类。
ServletRequest/ServletResponse:通用父接口,只有基础参数和输出流。
HttpServletRequest/HttpServletResponse:子接口,适配 HTTP;
转发属于 Request,重定向属于 Response。

扩展:

  1. ServletRequest 和 HttpServletRequest 区别
    HttpServletRequest 是 ServletRequest 的子接口。
    ServletRequest 是通用规范,可以支持任意通信协议;
    HttpServletRequest 针对 HTTP 扩展了浏览器相关 API。
    在 HttpServlet 中使用时,可以向下转型。
  2. forward 和 sendRedirect 归属
    请求转发 forward() → HttpServletRequest
    重定向 sendRedirect() → HttpServletResponse
  3. 转发与重定向关键区别
    转发:一次请求,地址栏不变,共享 request 域数据
    重定向:两次请求,地址栏改变,request 域数据丢失
相关推荐
X1A0RAN7 小时前
Jenkins Pipeline 变量打印指南
运维·servlet·jenkins
sun༒1 天前
Java Web 三大组件之 Servlet:从入门到理解生命周期
java·servlet·web
IKUN家族2 天前
Spring MVC(三)
运维·服务器·spring boot·spring·servlet·java-ee
spider_xcxc2 天前
Jenkins 遇见 Argo CD:构建可靠 GitOps 流水线的实战指南
java·开发语言·servlet
上海安当技术3 天前
统一身份认证平台怎么落地?11 个异构业务系统接入 ASP 的完整实施路径
数据库·servlet·架构·kubernetes·jenkins
豆角焖肉4 天前
Servlet :生命周期、配置与实战
servlet
Dr.kangder4 天前
嵌入式软件程序分析技术:原理、方法与实战
servlet·架构·嵌入式·dsp开发
蓝斯4974 天前
微服务项目中基于 Servlet 的业务模块与 WebFlux 网关模块的 Redis 统一化配置教程
redis·servlet·微服务
上海安当技术7 天前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins