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 域数据丢失
相关推荐
ashiho3 天前
【Spring】RequestParam/PathVariable/RequestBody详解
java·后端·spring·servlet·springmvc
有点。3 天前
*C++哈夫曼树与哈夫曼编码
java·c++·servlet
Gl�ria7 天前
Linux 查看日志常用命令
java·linux·servlet
weixin_440730509 天前
socket解决多次输入问题-大数据接收问题-模块动态导入
java·开发语言·servlet
evans在进步10 天前
Tomcat 整体架构与启动流程:从 Server 到 Servlet 加载
servlet·架构·tomcat
大梦想家a10 天前
基于Servlet+JSP的小区物业管理系统设计与实现(Bootstrap+MySQL)
java·servlet·bootstrap
X1A0RAN12 天前
Jenkins 流水线跨阶段的数据共享:让变量“动态更新“成为可能
java·servlet·jenkins
智能运维指南13 天前
2026研发管理平台选型指南:从“工具堆砌“到“研运一体化“的跃迁
servlet
马优晨14 天前
Spring Servlet 容器是什么、干什么用?
spring·servlet·内嵌servlet容器·java的内嵌servlet·spring内嵌servlet
木井巳16 天前
【JavaEE】Spring Web MVC 入门
java·spring boot·spring·servlet·java-ee