编程自学指南:java程序设计开发,Request 与 Response 基础讲解
一、课程信息
学习目标
- 理解 Request/Response 的核心作用与生命周期
- 掌握获取请求数据、设置响应的关键方法
- 能解决中文乱码、重定向等常见问题
- 理解其与 Servlet/Filter/Listener 的协作关系
二、课程导入:生活中的请求与响应
🌰 餐厅场景类比
角色 | Web 组件 | 对应操作 |
---|---|---|
顾客 | 浏览器 | 提交订单(Request) |
服务员 | Servlet | 处理订单(解析 Request) |
厨房 | 业务逻辑 | 准备菜品(生成 Response) |
收银员 | Response | 打印小票(输出响应) |
三、Request 核心详解
🔍 1. 继承体系
🔥 2. 常用方法与案例
✅ 获取请求参数
// 表单提交:<input name="username">
String username = request.getParameter("username");
// 多选框:<input type="checkbox" name="hobbies" value="read">
String[] hobbies = request.getParameterValues("hobbies");
✅ 获取请求头
String userAgent = request.getHeader("User-Agent");
String accept = request.getHeader("Accept");
✅ 获取请求体(POST 请求)
BufferedReader reader = request.getReader();
String line;
while ((line = reader.readLine()) != null) {
System.out.println("请求体内容:" + line);
}
✅ 解决中文乱码
// 针对 POST 请求
request.setCharacterEncoding("UTF-8");
// 针对 GET 请求(Tomcat 8+ 自动支持 UTF-8)
// 或修改 server.xml 的 URIEncoding
四、Response 核心详解
🔥 1. 常用方法与案例
✅ 设置响应内容
// 设置文本响应
response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write("Hello, Response!");
// 设置 JSON 响应
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"name\":\"张三\",\"age\":20}");
✅ 重定向 vs 转发
特性 | 重定向(Redirect) | 转发(Forward) |
---|---|---|
URL 变化 | 会改变(显示新 URL) | 不改变 |
作用域 | 仅支持 session/application | 支持 request/session/application |
代码 | response.sendRedirect() | request.getRequestDispatcher().forward() |
✅ 设置响应头
// 禁止浏览器缓存
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
// 设置下载文件
response.setHeader("Content-Disposition", "attachment; filename=report.pdf");
五、关联知识:请求响应全流程
🔄 1. Servlet 中的完整流程
@WebServlet("/process")
public class RequestResponseServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 1. 解析请求
String username = req.getParameter("username");
int age = Integer.parseInt(req.getParameter("age"));
// 2. 处理业务
if (age < 18) {
// 3. 设置响应(重定向)
resp.sendRedirect("/未成年提示页");
return;
}
// 4. 设置响应(转发)
req.setAttribute("user", new User(username, age));
req.getRequestDispatcher("/user.jsp").forward(req, resp);
}
}
🔗 2. 与 Filter 的协作
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
// 在请求到达 Servlet 前统一设置编码
req.setCharacterEncoding("UTF-8");
res.setContentType("text/html;charset=UTF-8");
chain.doFilter(req, res); // 放行请求
}
}
六、课堂练习
练习 1:用户注册表单处理
任务:
- 创建注册表单(包含姓名、年龄、邮箱)
- Servlet 接收参数并输出:
姓名:xxx,年龄:xx,邮箱:xxx
练习 2:文件下载功能
任务:
- 编写 Servlet 读取服务器上的文件(如
d:/report.pdf
) - 设置响应头实现文件下载
七、课程总结
知识图谱:
Request & Response
↳ Request 职责:
✅ 获取参数(getParameter)
✅ 解析请求头(getHeader)
✅ 处理中文乱码(setCharacterEncoding)
↳ Response 职责:
✅ 设置内容(setContentType)
✅ 重定向/转发(sendRedirect/forward)
✅ 设置响应头(setHeader)
口诀记忆:
“Request 是请求,参数头体都能取,
Response 是响应,内容状态和头行,
重定向地址变,转发地址不变,
中文乱码要注意,编码设置是关键!”
八、课后作业
必做 1:模拟 HTTP 报文
要求:
- 编写 Servlet 打印完整的请求报文
- 包括请求行、请求头、请求体
- 访问该 Servlet 并观察输出
必做 2:图片验证码功能
任务:
- 使用 Response 输出图片(
image/jpeg
) - 生成随机验证码并保存到 Session
- 在前端页面显示验证码图片