【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(); // 获取客户端IPreturn "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(); // 获取或创建Sessionsession.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 都离不开它们! 🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Markdown使用说明

以下是Markdown基础使用教程及分割线展示方法&#xff1a; &#x1f4dd; Markdown基础使用教程 1. 标题 # 一级标题 ## 二级标题 ### 三级标题2. 文本样式 *斜体* 或 _斜体_ **加粗** 或 __加粗__ ***加粗斜体*** 或 ___加粗斜体___ ~~删除线~~3. 列表 - 无序列表项 * 另一…

Jmeter的压测使用

Jmeter基础功能回顾 一、创建Jmeter脚本 1、录制新建 &#xff08;1&#xff09;适用群体&#xff1a;初学者 2、手动创建 &#xff08;1&#xff09;需要了解Jmeter的常用组件 元件&#xff1a;多个类似功能组件的容器&#xff08;类似于类&#xff09; 各元件作用 组件…

【rabbitmq基础】

RabbitMq基础 1.概念2.数据隔离3.使用控制台向mq传递消息1.创建两个队列-“测试队列”&#xff0c;“测试队列2”2.创建一个交换机-"测试交换机"3.测试发送消息3.1让交换机和队列进行绑定3.2发送消息3.3查看消息 4.创建虚拟主机5.java使用rabbitmq5.1 发送消息5.2 消…

加固计算机厂家 | 工业加固笔记本电脑厂家

北京鲁成伟业科技发展有限公司&#xff08;以下简称“鲁成伟业”&#xff09;成立于2005年&#xff0c;是集研发、生产、销售与服务于一体的高新技术企业&#xff0c;专注于加固计算机、工业加固笔记本电脑及特种计算机的研发与制造。凭借20年的技术积累与行业深耕&#xff0c;…

链路聚合配置命令

技术信息 加入捆绑组&#xff0c;加大链路间带宽等 配置命令 华三 静态聚合 将接口加入聚合口后再进行配置 //创建静态链路聚合口1&#xff0c;不启用lacp[SWB]interface Bridge-Aggregation 1 [SWB-Bridge-Aggregation1]port link-type trunk [SWB-Bridge-Aggregation…

ekf-imu --- 四元数乘法符号 ⊗ 的含义

⊗ 表示四元数的乘法运算&#xff1a; 用于组合两个四元数代表的旋转。四元数乘法是非交换的&#xff08;即顺序不同结果不同&#xff09;&#xff0c;其定义如下&#xff1a; 若两个四元数分别为&#xff1a; qq0q1iq2jq3k, pp0p1ip2jp3k, 则它们的乘积为&#xff1a;4*1 …

论文阅读Diffusion Autoencoders: Toward a Meaningful and Decodable Representation

原文框架图&#xff1a; 官方代码&#xff1a; https://github.com/phizaz/diffae/blob/master/interpolate.ipynb 主要想记录一下模型的推理过程 &#xff1a; %load_ext autoreload %autoreload 2 from templates import * device cuda:1 conf ffhq256_autoenc() # pri…

OpenVLA-OFT——微调VLA的三大关键设计:并行解码、动作分块、连续动作表示以及L1回归目标

前言 25年3.26日&#xff0c;这是一个值得纪念的日子&#xff0c;这一天&#xff0c;我司「七月在线」的定位正式升级为了&#xff1a;具身智能的场景落地与定制开发商 &#xff0c;后续则从定制开发 逐步过渡到 标准产品化 比如25年q2起&#xff0c;在定制开发之外&#xff0…

【论文阅读】Dynamic Adversarial Patch for Evading Object Detection Models

一、介绍 这篇文章主要是针对目标检测框架的攻击&#xff0c;不同于现有的攻击方法&#xff0c;该论文主要的侧重点是考虑视角的变化问题&#xff0c;通过在车上布置多个显示器&#xff0c;利用视角动态选择哪一个显示器播放攻击内容&#xff0c;通过这种方法达到隐蔽与攻击的…

多模态技术概述(一)

1.1 多模态技术简介 1.1.1 什么是多模态 多模态(Multimodal)涉及多种不同类型数据或信号的处理和融合&#xff0c;每种数据类型或信号被称为一种模态。常见的模态包括文本、图像、音频、视频等。多模态技术旨在同时利用这些不同模态的数据&#xff0c;以实现更全面、更准确的理…

nginx2

Nginx反向代理(七层代理)、Nginx的TCP/UDP调度器(四层代理)、 一、Nginx反向代理(七层代理) 步骤&#xff1a; ​ 部署后端web服务器集群 ​ 配置Nginx代理服务器 ​ 配置upstream集群池 ​ 调节集群池权重比 <img src"/home/student/Deskt…

调用kimi api

官网支持python&#xff0c;curl和node.js 因为服务器刚好有php环境&#xff0c;所以先用curl调个普通的语音沟通api <?php // 定义 API Key 和请求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…

关于 UPDATE 语句 和 SELECT ... FOR UPDATE 的对比分析,包括语法、功能、锁机制、使用场景及示例代码

以下是关于 UPDATE 语句 和 SELECT ... FOR UPDATE 的对比分析&#xff0c;包括语法、功能、锁机制、使用场景及示例代码&#xff1a; 1. UPDATE 语句 功能 直接修改数据&#xff1a;立即更新表中的数据&#xff0c;并提交修改。无显式锁&#xff1a;虽然会自动加锁&#xff…

在航电系统中提高可靠性的嵌入式软件设计

1.总线余度设计 数据传输采用双余度总线设计&#xff0c;CANFD为主&#xff0c;RS485为备。发送方将相同的数据分别通过双总线来发送&#xff0c;接收方优先处理主线数据。由于总线上数据频率固定&#xff0c;可设置定时器监控主总线的数据&#xff0c;当定时器超时后&#xff…

第十五届蓝桥杯大赛软件赛省赛Python 大学 C 组:5.回文数组

题目1 回文数组 小蓝在无聊时随机生成了一个长度为 n 的整数数组&#xff0c;数组中的第 i 个数为 ai&#xff0c;他觉得随机生成的数组不太美观&#xff0c;想把它变成回文数组&#xff0c;也是就对于任意 i∈[1,n] 满足 a i a n − i 1 a_ia_{n−i}1 ai​an−i​1。 小蓝…

netty中的WorkerGroup使用详解

Netty中WorkerGroup的深度解析 WorkerGroup是Netty线程模型中的从Reactor线程组&#xff0c;负责处理已建立连接的I/O读写、编解码及业务逻辑执行。其设计基于主从多Reactor模型&#xff0c;与BossGroup分工协作&#xff0c;共同实现高并发网络通信的高效处理。 一、WorkerGro…

模运算核心性质与算法应用:从数学原理到编程实践

目录 &#x1f680;前言&#x1f31f;数学性质&#xff1a;模运算的理论基石&#x1f4af;基本定义&#xff1a;余数的本质&#x1f4af;四则运算规则&#xff1a;保持同余性的关键 &#x1f99c;编程实践&#xff1a;模运算的工程化技巧&#x1f4af;避免数值溢出&#xff1a;…

#Git 变基(Rebase)案例

适合学习理解的 Git 变基&#xff08;Rebase&#xff09;案例 为了帮助你更好地理解 Git 变基&#xff08;Rebase&#xff09;的操作和效果&#xff0c;下面通过一个简单的案例来演示变基的过程和影响。 案例背景 假设我们有一个 Git 仓库&#xff0c;包含两个分支&#xff1…

泰博云平台solr接口存在SSRF漏洞

免责声明&#xff1a;本号提供的网络安全信息仅供参考&#xff0c;不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权&#xff0c;请及时与我联系&#xff0c;我将尽快处理并删除相关内容。 漏洞描述 SSRF漏洞是一种在未能获取服务器…

MyBatis 动态SQL 详解!

目录 一、 什么是动态 SQL&#xff1f;二、 为什么需要动态 SQL&#xff1f;三、 MyBatis 动态 SQL 标签四、 标签详解及示例1、 if 标签2、 choose、when、otherwise 标签3、 where 标签4、 set 标签5、 foreach 标签6、 sql、include 标签 五、 总结 &#x1f31f;我的其他文…