java HttpServletRequest 和 HttpServletResponse

HttpServletRequest 和 HttpServletResponse 详解

1. HttpServletRequest(HTTP 请求对象)

HttpServletRequest 是 Java Servlet API 提供的接口,用于封装客户端的 HTTP 请求信息。它继承自 ServletRequest,并增加了 HTTP 协议相关的功能。

1.1 核心功能

(1) 获取请求参数
  • getParameter(String name)
    获取单个请求参数(如表单字段、URL 查询参数)。
    String username = request.getParameter("username");
    
  • getParameterValues(String name)
    获取多个同名参数(如复选框、多选列表)。
    String[] hobbies = request.getParameterValues("hobby");
    
  • getParameterMap()
    返回所有请求参数的 Map<String, String[]>
    Map<String, String[]> paramMap = request.getParameterMap();
    
(2) 获取请求头信息
  • getHeader(String name)
    获取单个请求头(如 User-AgentCookie)。
    String userAgent = request.getHeader("User-Agent");
    
  • getHeaders(String name)
    返回指定请求头的所有值(如多个 Accept 头)。
    Enumeration<String> acceptHeaders = request.getHeaders("Accept");
    
  • getHeaderNames()
    返回所有请求头名称。
    Enumeration<String> headerNames = request.getHeaderNames();
    
(3) 获取客户端和服务器信息
  • getRemoteAddr()
    获取客户端 IP 地址。
    String ip = request.getRemoteAddr();
    
  • getMethod()
    获取 HTTP 方法(GETPOSTPUTDELETE 等)。
    String method = request.getMethod();
    
  • getRequestURL()
    返回完整的请求 URL(StringBuffer 类型)。
    StringBuffer url = request.getRequestURL();
    
  • getRequestURI()
    返回请求的 URI(不包含协议、域名和端口)。
    String uri = request.getRequestURI(); // 如 "/app/login"
    
(4) 获取会话(Session)
  • getSession()
    获取当前会话,如果不存在则创建新会话。
    HttpSession session = request.getSession();
    
  • getSession(boolean create)
    如果 create=false,仅获取现有会话,不创建新会话。
    HttpSession session = request.getSession(false);
    
(5) 获取请求体(Body)
  • getInputStream()
    获取 ServletInputStream,用于读取二进制数据(如文件上传)。
    ServletInputStream inputStream = request.getInputStream();
    
  • getReader()
    获取 BufferedReader,用于读取文本数据(如 JSON、XML)。
    BufferedReader reader = request.getReader();
    
(6) 属性(Attribute)管理
  • setAttribute(String name, Object value)
    存储请求范围内的属性(可用于 JSP 或转发)。
    request.setAttribute("message", "Hello");
    
  • getAttribute(String name)
    获取请求属性。
    String msg = (String) request.getAttribute("message");
    
  • removeAttribute(String name)
    移除请求属性。
    request.removeAttribute("message");
    

2. HttpServletResponse(HTTP 响应对象)

HttpServletResponse 是 Java Servlet API 提供的接口,用于封装服务器对客户端的 HTTP 响应。它继承自 ServletResponse,并增加了 HTTP 协议相关的功能。

2.1 核心功能

(1) 设置响应状态
  • setStatus(int sc)
    设置 HTTP 状态码(如 200404500)。
    response.setStatus(HttpServletResponse.SC_OK); // 200
    
  • sendError(int sc, String msg)
    发送错误状态码和消息(如 404 Not Found)。
    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Page not found");
    
(2) 设置响应头
  • setHeader(String name, String value)
    设置响应头(如 Content-TypeCache-Control)。
    response.setHeader("Content-Type", "text/html");
    
  • addHeader(String name, String value)
    添加多个同名响应头(如多个 Set-Cookie)。
    response.addHeader("Set-Cookie", "user=admin");
    
  • setContentType(String type)
    设置内容类型(如 text/htmlapplication/json)。
    response.setContentType("application/json");
    
  • setCharacterEncoding(String charset)
    设置字符编码(如 UTF-8)。
    response.setCharacterEncoding("UTF-8");
    
(3) 写入响应数据
  • getOutputStream()
    获取 ServletOutputStream,用于写入二进制数据(如图片、文件)。
    ServletOutputStream out = response.getOutputStream();
    out.write(bytes);
    
  • getWriter()
    获取 PrintWriter,用于写入文本数据(如 HTML、JSON)。
    PrintWriter writer = response.getWriter();
    writer.println("<h1>Hello World</h1>");
    
(4) 重定向
  • sendRedirect(String location)
    发送 302 重定向到指定 URL。
    response.sendRedirect("/login");
    
(5) Cookie 管理
  • addCookie(Cookie cookie)
    向客户端添加 Cookie。
    Cookie cookie = new Cookie("username", "admin");
    response.addCookie(cookie);
    
(6) 缓存控制
  • setDateHeader(String name, long date)
    设置日期型响应头(如 Expires)。
    response.setDateHeader("Expires", System.currentTimeMillis() + 3600000);
    

3. 实际应用示例

示例 1:登录表单处理

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {String username = request.getParameter("username");String password = request.getParameter("password");if ("admin".equals(username) && "123456".equals(password)) {// 登录成功,存储 SessionHttpSession session = request.getSession();session.setAttribute("user", username);// 重定向到首页response.sendRedirect("/home");} else {// 登录失败,返回错误response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<h1>Login Failed</h1>");}
}

示例 2:返回 JSON 数据

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {response.setContentType("application/json");response.setCharacterEncoding("UTF-8");PrintWriter out = response.getWriter();String json = "{\"name\":\"John\", \"age\":30}";out.print(json);
}

4. 总结

功能HttpServletRequestHttpServletResponse
获取请求数据getParameter(), getHeader()-
获取会话getSession()-
读取请求体getInputStream(), getReader()-
设置响应数据-getOutputStream(), getWriter()
设置状态码-setStatus(), sendError()
设置响应头-setHeader(), addHeader()
重定向-sendRedirect()
Cookie 管理getCookies()addCookie()

这两个对象是 Java Web 开发的核心,几乎所有 Web 框架(如 Spring MVC)底层都依赖它们进行 HTTP 请求和响应处理。

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

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

相关文章

HAL TIM PWM产生 蓝桥杯

目录 0.原理 0.1 CNT和CCR关系 0.2 PWM模式1模式2 1. cubemx配置 需求(将PA1输出1Khz的 50&#xff05;占空比的方波) 1.0 PWM的频率计算: 2.代码 0.原理 0.1 CNT和CCR关系 CNT计数器和CCR比较器进行比较,如果是向上计数,CNT逐渐增加,CCR是虚线位置,也是用户自定义的…

python入门:简单介绍和python和pycharm软件安装/学习网址/pycharm设置(改成中文界面,主题,新建文件)

Python 目前是 AI 开发的首选语言 软件安装 python解释器 官网下载 Python |Python.org 勾选 Add python.exe to PATH 将python.exe添加到PATH 勾选这个选项会将Python的可执行文件路径添加到系统的环境变量PATH中。这样做的好处是&#xff0c;你可以在命令行中从任何位置直…

CMD命令行笔记

CMD命令行笔记&#xff0c;涵盖常用命令及实用技巧&#xff0c;适合快速查阅&#xff1a; 一、基础操作 打开CMD Win R → 输入 cmd → 回车管理员模式&#xff1a;右键开始菜单 → 选择“命令提示符&#xff08;管理员&#xff09;” 常用命令 help&#xff1a;查看所有命令…

android中dp和px的关系

关于android的dp和px的关系是我刚开始学习android的第一个知识点&#xff0c;不知不觉学安卓也有一年了&#xff0c;但是偶然间我发现我理解的dp和px的关系一直是错的&#xff0c;真的是有一点搞笑&#xff0c;今天特意写一篇博客纪念一下这个我理解错一年的知识点。 dp和px之间…

(四)机器学习---逻辑回归及其Python实现

之前我们提到了常见的任务和算法&#xff0c;本篇我们使用逻辑回归来进行分类 分类问题回归问题聚类问题各种复杂问题决策树√线性回归√K-means√神经网络√逻辑回归√岭回归密度聚类深度学习√集成学习√Lasso回归谱聚类条件随机场贝叶斯层次聚类隐马尔可夫模型支持向量机高…

【汽车产品开发项目管理——端到端的汽车产品诞生流程】

MPU&#xff1a;集成运算器、寄存器和控制器的中央处理器芯片 MCU&#xff1a;微控制单元&#xff0c;将中央处理器CPU、存储器ROM/RAM、计数器、IO接口及多种外设模块集成在单一芯片上的微型计算机系统。 汽车产品开发项目属性&#xff1a;临时性、独特性、渐进明细性、以目标…

Python将不能修改的值称为不可变的 ,而不可变的列表被称为元组------元组

列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的&#xff0c;这对处理网站的用户列表或游戏中的角色列表至关重要。然而&#xff0c;有时候你需要创建一系列不可修改的元素&#xff0c;元组可以满足这种需求。Python将不能修改的值称为不可变的&#xf…

智慧医院室内导航系统架构拆解:技术选型与性能攻坚指南

本文面向医院信息化团队技术负责人及医疗IoT解决方案开发者&#xff0c;聚焦解决大规模院区导航系统的扩展性、多源数据融合及实时路径规划等技术难点&#xff0c;提供从架构到落地的完整技术路线图。 如需获取智慧医院导航导诊系统解决方案请前往文章最下方获取&#xff0c;如…

医药采购系统平台第4天03:实现根据用户的角色显示不同用户的权限菜单编写拦截器实现权限拦截模块的开发流程和测试流程小节

如果想要获取相关的源码,笔记,和相关工具,对项目需求的二次开发,可以关注我并私信!!! 四 权限管理(用户授权)的应用:根据用户的角色显示不同用户的权限菜单 经过上面的与第三方系统的成功的接入,而且在“角色管理”菜单中也对需要授权的角色进行了授权--->给一级…

#2 物联网组成要素

从下至上&#xff0c;则包括了5个要素&#xff0c;包括 设备 / 传感器 / 网络 / 物联网服务 / 数据分析 这五个要素。为了便于理解&#xff0c;我们用思维导图展示 物联网构成架构 设备 能够感测和反馈并连到网络进行物联网服务的装置 传感器 传感器和网关的融合实现了物…

< 自用文 Project-30.6 Crawl4AI > 为AI模型优化的网络爬虫工具 帮助收集和处理网络数据的工具

官方链接&#xff1a; Github &#xff1a;https://github.com/unclecode/crawl4ai 文档主页&#xff1a;https://docs.crawl4ai.com/ 当前版本&#xff1a;Crawl4AI v0.5.0 主要新功能&#xff1a; 可配置策略&#xff08;广度优先、深度优先、最佳优先&#xff09;探索整…

【Kafka基础】监控与维护:动态配置管理,灵活调整集群行为

1 基础配置操作 1.1 修改主题保留时间 /export/home/kafka_zk/kafka_2.13-2.7.1/bin/kafka-configs.sh --alter \--bootstrap-server 192.168.10.33:9092 \--entity-type topics \--entity-name yourtopic \--add-config retention.ms86400000 参数说明&#xff1a; retention…

04-微服务 面试题-mk

文章目录 1.Spring Cloud 常见的组件有哪些?2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现)3.Nacos配置中心热加载实现原理及关键技术4.OpenFeign在微服务中的远程服务调用工作流程5.你们项目负载均衡如何实现的 ?6.什么是服务雪崩,怎么解决这个问题?…

Redis最佳实践——秒杀系统设计详解

基于Redis的高并发秒杀系统设计&#xff08;十万级QPS&#xff09; 一、秒杀系统核心挑战 瞬时流量洪峰&#xff1a;100万 QPS请求冲击库存超卖风险&#xff1a;精准扣减防止超卖系统高可用性&#xff1a;99.99%服务可用性要求数据强一致性&#xff1a;库存/订单/支付状态同步…

AI大模型从0到1记录学习 数据结构和算法 day18

3.3.1 栈的概述 栈&#xff08;Stack&#xff09;是一个线性结构&#xff0c;其维护了一个有序的数据列表&#xff0c;列表的一端称为栈顶&#xff08;top&#xff09;&#xff0c;另一端称为栈底&#xff08;bottom&#xff09;。栈对数据的操作有明确限定&#xff0c;插入元素…

粘性定位(position:sticky)——微信小程序学习笔记

1. 简介 CSS 中的粘性定位&#xff08;Sticky positioning&#xff09;是一种特殊的定位方式&#xff0c;它可以使元素在滚动时保持在视窗的特定位置&#xff0c;类似于相对定位&#xff08;relative&#xff09;&#xff0c;但当页面滚动到元素的位置时&#xff0c;它会表现得…

通过使用 include 语句加载并执行一个CMake脚本来引入第三方库

通过使用 include 语句加载并执行一个CMake脚本来引入第三方库 当项目中使用到第三方库时&#xff0c;可以通过使用 include 语句来加载并执行一个CMake脚本&#xff0c;在引入的CMake脚本中进行第三方库的下载、构建和库查找路径的设置等操作&#xff0c;以这种方式简化项目中…

DNS正反向解析复习,DNS主从服务,转发服务及DNS和nginx联合案例

正向解析 1、配置主机名 [rootlocalhost ~]# dnf install bash-completion -y #一个按tap键补全的软件 [rootlocalhost ~]# hostnamectl hostname dns #改主机名为dns [rootlocalhost ~]# exit ssh root你的IP地址 要重启才会生效2、安装bind [rootdns ~]# dnf install b…

网络安全·第一天·IP协议安全分析

本篇博客讲述的是网络安全中一些协议缺陷以及相应的理论知识&#xff0c;本博主尽可能讲明白其中的一些原理以及对应的防卫措施。 学习考研408的同学也能进来看看&#xff0c;或许对考研有些许帮助&#xff08;按照考研现在的趋势&#xff0c;年年都有新题目&#xff0c;本文当…

【详解】Nginx配置WebSocket

目录 Nginx配置WebSocket 简介 准备工作 检查 Nginx 版本 配置 Nginx 支持 WebSocket 修改 Nginx 配置文件 解释配置项 测试配置 测试 WebSocket 连接 WebSocket 服务端 (Node.js) WebSocket 客户端 (HTML JavaScript) 运行测试 Nginx 配置文件示例 解释 测试配…