Servlet中Request与Response的适用场景及视角选择疑问
搞懂Servlet中Request/Response的视角:别站错队!
兄弟,我当初刚上手Servlet的时候也跟你一样懵,完全搞不清这俩对象到底站在谁的角度说话😅。其实核心就是要搞清楚Servlet在整个请求响应链里的角色——它既不是发起请求的客户端,也不是接收响应的终端,而是坐在服务器里的「中间处理者」。
我给你掰碎了说:
先明确三个角色的分工
- 客户端(比如浏览器/APP):主动发起请求,最后接收服务器发回的响应
- Servlet:运行在服务器上,负责接收客户端传过来的Request对象(这个对象里打包了客户端的所有请求信息),处理完逻辑后,组装好要回送给客户端的Response对象,再交给服务器发送出去
- 服务器:相当于快递站,负责把客户端的请求递交给Servlet,再把Servlet打包好的Response寄回给客户端
所以你写Servlet代码的时候,要站在「服务器里的Servlet」视角——你手里攥着客户端递来的“请求包裹”(Request),要从里面掏信息干活;同时你要打包一个“回复包裹”(Response),把要给客户端的东西塞进去。
为什么response.getWriter()属于Response侧?
这个问题太典型了!你就这么想:response.getWriter()拿到的是一个“写入器”,它的作用是往要回送给客户端的回复包裹里写内容。比如你写:
response.getWriter().println("<h1>你好,这是Servlet返回的内容!</h1>");
这段代码写出的HTML,最终会被服务器发给客户端浏览器,显示在用户的页面上——它是服务器要响应给客户端的内容载体,当然属于Response侧啦!
再给你举几个常见方法的区分,帮你巩固视角
Request侧的方法:都是「从客户端请求里拿东西」
request.getParameter("username"):从客户端提交的表单/URL参数里提取用户名request.getCookies():获取客户端浏览器带过来的Cookie信息request.getRequestURI():查看客户端请求的是服务器上的哪个路径request.getHeader("User-Agent"):获取客户端的浏览器/设备信息
Response侧的方法:都是「给客户端准备回复」
response.setContentType("application/json"):告诉客户端“我给你的是JSON格式的数据,别搞错了解析方式”response.sendRedirect("/login"):告诉客户端“请你跳转到登录页面”response.addCookie(new Cookie("login_token", "abc123")):往回复里塞一个Cookie,让客户端浏览器存起来,下次请求时再带过来response.setStatus(404):告诉客户端“你找的资源不存在”
最后总结个简单的判断逻辑
写代码的时候纠结某个方法属于Request还是Response?就问自己一句话:
这个方法是在「从客户端发过来的请求里拿数据」,还是在「给客户端准备要发回去的内容/规则」?
前者就是Request侧,后者就是Response侧。
内容的提问来源于stack exchange,提问作者Dhyey Shah
相关产品推荐
相关产品推荐

