编程自学指南:java程序设计开发,Request 与 Response 基础讲解、核心作用与生命周期,解决中文乱码、重定向, Servlet/Filter/Listener 的协作关系

编程自学指南:java程序设计开发,Request 与 Response 基础讲解

一、课程信息

学习目标

  1. 理解 Request/Response 的核心作用生命周期
  2. 掌握获取请求数据、设置响应的关键方法
  3. 能解决中文乱码、重定向等常见问题
  4. 理解其与 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:用户注册表单处理

任务

  1. 创建注册表单(包含姓名、年龄、邮箱)
  2. Servlet 接收参数并输出:姓名:xxx,年龄:xx,邮箱:xxx

练习 2:文件下载功能

任务

  1. 编写 Servlet 读取服务器上的文件(如 d:/report.pdf
  2. 设置响应头实现文件下载

七、课程总结

知识图谱:

Request & Response  
   ↳ Request 职责:  
      ✅ 获取参数(getParameter)  
      ✅ 解析请求头(getHeader)  
      ✅ 处理中文乱码(setCharacterEncoding)  
   ↳ Response 职责:  
      ✅ 设置内容(setContentType)  
      ✅ 重定向/转发(sendRedirect/forward)  
      ✅ 设置响应头(setHeader)  

口诀记忆:

“Request 是请求,参数头体都能取,
Response 是响应,内容状态和头行,
重定向地址变,转发地址不变,
中文乱码要注意,编码设置是关键!”

八、课后作业

必做 1:模拟 HTTP 报文

要求

  1. 编写 Servlet 打印完整的请求报文
    • 包括请求行、请求头、请求体
  2. 访问该 Servlet 并观察输出

必做 2:图片验证码功能

任务

  1. 使用 Response 输出图片(image/jpeg
  2. 生成随机验证码并保存到 Session
  3. 在前端页面显示验证码图片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值