3. 请求与响应

  • 取得请求参数与标头
  • 处理中文字符请求与响应
  • 设置与取得请求范围属性
  • 正确使用转发、包含、重定向

Web容器做了什么

Web容器做了几件事:创建 Servlet 实例,并完成 Servlet 名称注册以及 URL 模式的对应。在请求到来的时候转发正确的 Servlet 来处理请求。

当浏览器请求 HTTP 服务器时,而 HTTP 服务器转交请求给容器时,容器会创建一个代表当次请求的 HttpServletRequest 对象,并将请求相关信息设置给该对象。同时,容器会创建一个 HttpServletResponse 对象,作为稍后要对客户端进行响应的 Java 对象。

接着,容器会根据读取的 @WebSerlvet 标注或 web.xml 的设置,找出处理该请求的 Servlet,,调用它的 service() 方法,将创建的 HttpServletRequest 对象、HttpServletResponse 对象作为参数传入。service() 会根据 HTTP 请求的烦事,调用相应的 doXXX() 方法。在 doXXX() 方法中,可以使用 HttpServletRequest 对象、HttpServletResponse 对象。

之后,容器将 HttpServletRequest 对象、HttpServletResponse 对象销毁回收,该次请求响应结束。

因为 HTTP 是基于请求/响应、无状态的协议,每一次的请求/响应之后,服务器端就不会记得任何客户端的信息了。所以容器每次请求都会创建新的 HttpServletRequest 对象、HttpServletResponse 对象,响应后将销毁该次的 HttpServletRequest 对象、HttpServletResponse 对象。下次请求时创建的请求/响应对象就和上次无关了。所以,对HttpServletRequest 对象、HttpServletResponse 对象的设置,时不能延续至下一次请求的。

请求参数的编码处理

要分 post 和 get 两种情况来处理

POST 请求参数编码处理

Content-Type

在 getParameter() 之前调用 setCharacterEncoding()

GET 请求参数编码处理

setCharacterEncoding() 对 GET 请求方法不起作用

通过 String 的 getBytes() 指定编码来取得字符粗的字节数组,然后再重新构造为正确编码的字符串

获取 Body 内容

  • getReader()、getInputStream()
  • getPart()、getParts() 取得上传文件
原文地址:https://www.cnblogs.com/okadanana/p/5940628.html