当前位置: 首页 > news >正文

【Easylive】HttpServletRequest、HttpServletResponse、HttpSession 介绍

【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版
这三个是 Java Web 开发(Servlet/JSP)的核心接口,用于处理 HTTP 请求和响应 以及 用户会话管理。它们在 Spring MVC(@Controller)中也被广泛使用。


1. HttpServletRequest(请求对象)

作用

封装客户端(浏览器)发送的 HTTP 请求信息,包括:
• 请求参数(GET/POST)
• 请求头(Headers)
• 会话(Session)
• 客户端信息(IP、User-Agent)

常用方法

方法说明
String getParameter("name")获取请求参数(如 ?id=123 或表单 POST 数据)
String[] getParameterValues("name")获取复选框等同名参数(返回数组)
String getHeader("User-Agent")获取请求头信息
String getMethod()获取请求方法(GET/POST/PUT/DELETE)
String getRequestURI()获取请求路径(如 /user/login
Cookie[] getCookies()获取客户端发送的 Cookie
HttpSession getSession()获取或创建会话(Session)
String getRemoteAddr()获取客户端 IP 地址

代码示例

@GetMapping("/user")
public String getUser(HttpServletRequest request) {
    String username = request.getParameter("username"); // 获取参数
    String ip = request.getRemoteAddr(); // 获取客户端IP
    return "User: " + username + ", IP: " + ip;
}

2. HttpServletResponse(响应对象)

作用

封装服务器返回给客户端的 HTTP 响应信息,包括:
• 设置响应状态码(200/404/500)
• 添加响应头(Headers)
• 写入响应体(HTML/JSON)
• 重定向或转发

常用方法

方法说明
void setStatus(200)设置 HTTP 状态码(如 404、500)
void setContentType("text/html")设置响应内容类型(如 application/json
PrintWriter getWriter()获取输出流,向客户端发送文本(HTML/JSON)
void sendRedirect("/new-url")重定向到新地址(302 跳转)
void addCookie(Cookie cookie)向客户端添加 Cookie
void setHeader("Cache-Control", "no-cache")设置响应头

代码示例

@GetMapping("/hello")
public void sayHello(HttpServletResponse response) throws IOException {
    response.setContentType("text/html");
    response.getWriter().write("<h1>Hello World!</h1>");
}

@GetMapping("/redirect")
public void redirect(HttpServletResponse response) throws IOException {
    response.sendRedirect("https://example.com"); // 重定向
}

3. HttpSession(会话对象)

作用

用于在 多次 HTTP 请求间存储用户数据(如登录状态、购物车信息)。
基于 Cookie(JSESSIONID)URL 重写 实现会话跟踪。

常用方法

方法说明
void setAttribute("key", value)存储会话数据
Object getAttribute("key")获取会话数据
void removeAttribute("key")删除会话数据
void invalidate()销毁当前会话(用户注销)
String getId()获取会话 ID
long getCreationTime()获取会话创建时间

代码示例

// 登录时存储用户信息
@PostMapping("/login")
public String login(HttpServletRequest request, @RequestParam String username) {
    HttpSession session = request.getSession(); // 获取或创建Session
    session.setAttribute("user", username); // 存储用户信息
    return "Login success!";
}

// 获取会话数据
@GetMapping("/profile")
public String profile(HttpSession session) {
    String user = (String) session.getAttribute("user"); // 获取用户信息
    return "Current user: " + user;
}

// 注销
@GetMapping("/logout")
public String logout(HttpSession session) {
    session.invalidate(); // 销毁会话
    return "Logged out!";
}

4. 三者的关系

  1. 请求流程
    • 浏览器发送请求 → HttpServletRequest 接收数据。
    • 服务器处理请求 → 使用 HttpSession 存储用户状态。
    • 服务器返回响应 → HttpServletResponse 输出结果。

  2. 典型场景
    登录认证:通过 Session 保存用户登录状态。
    表单提交:通过 Request 获取参数,通过 Response 返回结果。
    权限控制:检查 Session 中是否存在用户信息。


5. 在 Spring MVC 中的简化用法

Spring 提供了更简洁的替代方式(底层仍依赖这三个对象):

(1) 直接注入

@GetMapping("/example")
public String example(
    @RequestParam String param,   // 替代 request.getParameter()
    @CookieValue String cookie,   // 替代 request.getCookies()
    HttpSession session           // 直接注入 Session
) {
    session.setAttribute("key", "value");
    return "OK";
}

(2) 使用 @ModelAttribute 绑定对象

@PostMapping("/user")
public String addUser(@ModelAttribute User user) {
    // 自动将请求参数绑定到 User 对象
    return "Saved: " + user.getName();
}

6. 总结

对象作用典型用途
HttpServletRequest封装客户端请求获取参数、请求头、客户端信息
HttpServletResponse封装服务器响应设置状态码、返回数据、重定向
HttpSession跨请求存储用户数据登录状态、购物车、用户偏好

掌握这三个对象是 Java Web 开发的基础,无论是传统 Servlet 还是 Spring MVC 都离不开它们! 🚀

相关文章:

  • Leetcode hot 100刷题之路(day 1)
  • 黑盒测试的场景法(能对项目业务进行设计测试点)
  • ngx_monotonic_time
  • Git Fetch 和 Git Pull 的区别
  • 双层板模组天线设计指南,50欧姆阻抗匹配设计
  • B-tree 索引失效 避坑指南
  • x265不同preset级别控制的编码参数与编码性能影响
  • BFS(广度优先搜索)
  • 使用DeepSeek API进行情感分析:超简单
  • c语言怎么处理字符串,与c++的区别
  • CentOS下安装Docker,Docker下安装JDK\MYSQL\REDIS\NGINX
  • 压测数据说话:如何用科学方法选择最优高防套餐?
  • 大数据技术之Scala:特性、应用与生态系统
  • MySQL - 索引原理与优化:深入解析B+Tree与高效查询策略
  • ‌粉笔屑里的星辰大海‌----灌南县第四中学九3班汤洁老师
  • harmony OS NEXT- HTTP 模块笔记
  • 【设计模式】享元模式
  • Transformer习题
  • 我开发了一款生成合成数据集的工具
  • 《C++ 函数相关技术解析》
  • 郑州seo优化阿亮/爱站seo工具
  • 如何做网站关键字优化/营销必备十大软件
  • 邯郸seo/seo入门基础知识
  • 视频网站做app还是h5/兰州seo优化公司
  • 唐山做网站/医院网络销售要做什么
  • 网站开发维护前景/百度知道在线