news 2026/8/19 21:19:40

请求对象和响应对象学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
请求对象和响应对象学习

在 Java Web 开发中,HttpServletRequestHttpServletResponse是两个至关重要的对象。每当客户端发送一个 HTTP 请求,Web 服务器(如 Tomcat)就会为这次请求创建一个request对象和一个response对象。

  • request对象:用于封装客户端发送的请求信息,如表单数据、请求头、URL 参数等。

  • response对象:用于向客户端输出响应数据,如 HTML 内容、状态码、响应头等。

掌握这两个对象的使用,是进入 Java Web 开发的基础。


一、HttpServletRequest 详解

HttpServletRequestservice()方法的重要参数之一,它提供了大量方法来获取客户端请求信息。

1. 获取请求头信息

通过request可以获取 HTTP 请求头中的各种信息:

java String value = request.getHeader("User-Agent"); Enumeration<String> names = request.getHeaderNames(); while (names.hasMoreElements()) { String name = names.nextElement(); String value = request.getHeader(name); System.out.println(name + ": " + value); }

2. 获取请求相关其他信息

方法说明
getMethod()获取请求方式,如 GET、POST
getRequestURI()获取请求的 URI 路径
getRequestURL()获取完整的请求 URL
getQueryString()获取 URL 中的参数字符串
getRemoteAddr()获取客户端 IP 地址
getContextPath()获取项目上下文路径

示例代码:

java System.out.println("Method: " + request.getMethod()); System.out.println("URI: " + request.getRequestURI()); System.out.println("URL: " + request.getRequestURL()); System.out.println("Client IP: " + request.getRemoteAddr());

3. 获取请求参数

3.1 单值参数

适用于文本输入框、单选按钮、下拉框等:

java String username = request.getParameter("username"); String gender = request.getParameter("gender");
3.2 多值参数

适用于复选框(checkbox)或多个同名字段:

java String[] hobbies = request.getParameterValues("hobby"); for (String hobby : hobbies) { System.out.println(hobby); }
3.3 获取所有参数
java Enumeration<String> paramNames = request.getParameterNames(); Map<String, String[]> paramMap = request.getParameterMap();

4. 中文乱码处理

POST 请求乱码

在获取参数前设置编码:

java request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name");
GET 请求乱码

Tomcat 8.5 及以上版本已支持 URL 中文参数,无需额外处理。
若需手动处理:

java String name = request.getParameter("name"); name = new String(name.getBytes("ISO-8859-1"), "UTF-8");

或修改 Tomcat 的server.xml

xml <Connector port="8080" URIEncoding="UTF-8" />

5. 请求转发与 Request 域对象

请求转发是服务器内部跳转,浏览器地址栏不变,属于同一次请求

java // 设置域属性 request.setAttribute("msg", "登录成功"); // 转发到另一个资源 request.getRequestDispatcher("/success.jsp").forward(request, response);

在转发的目标页面中,可以通过request.getAttribute("msg")获取数据。


二、HttpServletResponse 详解

HttpServletResponse用于向客户端发送响应数据。

1. 设置响应类型与编码

为避免中文乱码,通常在输出前设置:

java response.setContentType("text/html;charset=UTF-8"); // 或分别设置 response.setCharacterEncoding("UTF-8"); response.setContentType("text/html");

2. 输出响应内容

java PrintWriter out = response.getWriter(); out.write("Hello, 世界!");

3. 设置响应头与状态码

java // 设置状态码 response.setStatus(200); // 发送错误页面 response.sendError(404, "资源未找到"); // 定时跳转 response.setHeader("Refresh", "5; URL=http://www.baidu.com");

4. 重定向

重定向是客户端跳转,浏览器地址栏会变化,属于两次请求

java response.sendRedirect("/项目名/success.html");

三、请求转发与重定向的区别

对比项请求转发(forward)重定向(sendRedirect)
发生位置服务器内部客户端
请求次数一次请求两次请求
浏览器地址栏不变改变
数据共享可使用 request 域无法使用 request 域
跨域访问不支持支持
性能更高稍低
方法来源HttpServletRequestHttpServletResponse

四、路径问题总结

转发路径

  • /开头表示当前 Web 应用的根目录

  • 示例:/WEB-INF/page.jsp

重定向路径

  • /开头表示 Tomcat 的根目录,需包含项目名

  • 示例:/项目名/page.jsp

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 21:08:21

分布式LLM工作流运行时验证:因果过去逻辑原理与工程实践

1. 从“事后诸葛亮”到“实时预言家”&#xff1a;为什么分布式LLM工作流需要因果过去逻辑 在分布式LLM智能体工作流的开发与运维中&#xff0c;我们常常面临一个尴尬的局面&#xff1a;当流程在某个节点卡住、返回了匪夷所思的结果&#xff0c;或者干脆无声无息地失败时&#…

作者头像 李华
网站建设 2026/8/19 20:56:21

分布式预测控制屏障函数:模块化多智能体系统的安全协同核心

1. 项目概述&#xff1a;当模块化多智能体系统遇上分布式安全屏障 在机器人、自动驾驶车队、工业自动化产线这些领域&#xff0c;我们越来越依赖由多个独立模块或智能体组成的系统协同工作。这类系统被称为“模块化多智能体系统”。每个智能体可能是一个移动机器人、一台无人机…

作者头像 李华