1. 请求与响应基础概念解析
在JavaWeb开发中,HTTP请求与响应构成了客户端与服务器交互的基础通信模型。一个完整的请求-响应周期始于客户端(通常是浏览器)向服务器发送HTTP请求,服务器处理请求后返回HTTP响应。这个看似简单的模型背后,隐藏着许多值得深入理解的机制。
HTTP请求主要由三部分组成:
- 请求行:包含请求方法(GET/POST等)、URI和HTTP协议版本
- 请求头:包含客户端环境信息、缓存策略、内容类型等元数据
- 请求体:POST/PUT等方法时携带的实体数据
对应的HTTP响应也包含三个核心部分:
- 状态行:HTTP版本、状态码和状态描述
- 响应头:服务器信息、内容类型、缓存控制等
- 响应体:实际的返回内容(HTML/JSON等)
关键理解:HTTP协议是无状态的,这意味着服务器不会记住之前的请求。会话管理需要通过Cookie/Session等机制实现。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Servlet请求处理机制详解
2.1 HttpServletRequest对象解析
HttpServletRequest对象封装了客户端的所有请求信息。开发中最常用的方法包括:
java复制// 获取请求参数
String username = request.getParameter("username");
// 获取请求头
String userAgent = request.getHeader("User-Agent");
// 获取请求URI
String requestURI = request.getRequestURI();
// 获取会话对象
HttpSession session = request.getSession();
参数获取时需要注意字符编码问题。当表单提交包含中文时,需要显式设置编码:
java复制request.setCharacterEncoding("UTF-8");
常见坑点:getParameter()方法只能在请求体尚未被读取时调用一次。多次读取需要自行缓存参数。
2.2 请求转发与包含
请求转发(Forward)是服务器内部的行为,客户端感知不到:
java复制request.getRequestDispatcher("/target.jsp").forward(request, response);
与重定向(Redirect)的关键区别:
- 转发:服务器内部跳转,URL不变,可共享request对象
- 重定向:客户端重新请求,URL变化,request对象不共享
请求包含(Include)用于组合多个Servlet的输出:
java复制request.getRequestDispatcher("/header.jsp").include(request, response);
3. 响应生成与优化技巧
3.1 HttpServletResponse核心方法
设置响应状态和头信息:
java复制response.setStatus(HttpServletResponse.SC_OK);
response.setContent
