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 域数据丢失
相关推荐
略略略咯咯10 小时前
jenkins
运维·servlet·jenkins
wno7041 天前
Spring Boot中使用Servlet
spring boot·后端·servlet
典典分享指南1 天前
Python-docx 批量生成带图营销文:文字图片分离与排版定位
servlet·intellij-idea·java-consul·java-activemq
竹枝溪3 天前
Tomcat与Servlet全套小白教程
java·servlet·tomcat·cookie·filter·session·listener
数据知道9 天前
网络安全实战:信息收集实战——子域名、端口、指纹、社工信息聚合
网络·安全·web安全·网络安全·servlet
lv__pf17 天前
servlet与jsp
java·开发语言·servlet
X1A0RAN20 天前
Jenkins Pipeline 变量打印指南
运维·servlet·jenkins
sun༒21 天前
Java Web 三大组件之 Servlet:从入门到理解生命周期
java·servlet·web
IKUN家族22 天前
Spring MVC(三)
运维·服务器·spring boot·spring·servlet·java-ee