【JavaWeb】Servlet 系列——HttpServletRequest 接口详解
23 HttpServletRequest 接口详解
23.1 关于 HttpServletRequest 接口
HttpServletRequest 是一个接口,全限定名称:jakarta.servlet.http.HttpServletRequest
HttpServletRequest 接口是 Servlet 规范中的一员。
HttpServletRequest 接口的父接口:ServletRequest
测试结果说明:Tomcat 服务器(WEB 服务器、WEB 容器)实现了 HttpServletRequest 接口,还是说明了 Tomcat 服务器实现了 Servlet 规范。而对于我们 javaweb 程序员来说,实际上不需要关心这个,我们只需要面向接口编程即可。我们关心的是 HttpServletRequest 接口中有哪些方法,这些方法可以完成什么功能!!!!
23.3 HttpServletRequest 对象中都有什么信息?都包装了什么信息?
HttpServletRequest 对象是 Tomcat 服务器负责创建的。这个对象中封装了 HTTP 的请求协议。
实际上是用户发送请求的时候,遵循了 HTTP 协议,发送的是 HTTP 的请求协议,Tomcat 服务器将 HTTP 协议中的信息以及数据全部解析出来,然后 Tomcat 服务器把这些信息封装到 HttpServletRequest 对象当中,传给了我们 javaweb 程序员。
javaweb 程序员面向 HttpServletRequest 接口编程,调用方法就可以获取到请求的信息了。
23.4 request 和 response 对象的生命周期?
request 对象和 response 对象,一个是请求对象,一个是响应对象。这两个对象只在当前请求中有效。
一次请求对应一个 request。
两次请求则对应两个 request。
.....
23.5 HttpServletRequest 接口中常用的方法
23.5.1 怎么获取前端浏览器用户提交的数据?
注意:前端表单提交数据的时候,假设提交了 120 这样的“数字”,其实是以字符串"120"的方式提交的,所以服务器端获取到的一定是一个字符串的"120",而不是一个数字。(前端永远提交的是字符串,后端获取的也永远是字符串。)
23.5.2 手工开发一个 webapp。测试 HttpServletRequest 接口中的相关方法。
先测试了 4 个常用的方法,获取请求参数的四个方法。
23.6.2 “请求域”对象
request 对象实际上又称为“请求域”对象。
“请求域”对象要比“应用域”对象范围小很多。生命周期短很多。请求域只在一次请求内有效。
一个请求对象 request 对应一个请求域对象。一次请求结束之后,这个请求域就销毁了。
请求域对象也有这三个方法:
23.7 两个 Servlet 如何共享数据
将数据放到 ServletContext 应用域当中,当然是可以的,但是应用域范围太大,占用资源太多。不建议使用。
可以将数据放到 request 域当中,然后 AServlet 转发到 BServlet,保证 AServlet 和 BServlet 在同一次请求当中,这样就可以做到两个 Servlet,或者多个 Servlet 共享同一份数据。
跳转、转发(一次请求)
23.8 转发的下一个资源不一定是一个 Servlet
只要是 Tomcat 服务器当中的合法资源,都是可以转发的。例如:html....
注意:转发的时候,路径的写法要注意,转发的路径以“/”开始,不加项目名。
关于 request 对象中两个非常容易混淆的方法:
2)解决后端获取前端数据出现的乱码问题(request 请求)
设置请求体的字符集
get 请求在请求行上提交数据。post 请求在请求体中提交数据。显然这个方法是处理 POST 请求的乱码问题。这种方式并不能解决 get 请求的乱码问题。
Tomcat10 之后,request 请求体当中的字符集默认就是 UTF-8,不需要设置字符集,不会出现乱码问题。Tomcat9 前(包括 9 在内),如果前端请求体提交的是中文,后端获取之后出现乱码,怎么解决这个乱码?执行以下代码。
3)解决前端页面响应中文出现的乱码问题
在 Tomcat9 之前(包括 9),响应中文也是有乱码的,怎么解决这个响应的乱码?
注意:在 Tomcat10 包括 10 在内,响应中文的时候就不在出现乱码问题了。以上代码就不需要设置 UTF-8 了(默认 UTF-8)。
4)解决 get 请求乱码问题
get 请求发送的时候,数据是在请求行上提交的,不是在请求体当中提交的。
方案:修改 CATALINA_HOME/conf/server.xml 配置文件
注意:从 Tomcat8 之后,URIEncoding 的默认值就是 UTF-8,所以 GET 请求也没有乱码问题了。
5)获取应用的根路径
6)获取请求方式
7)获取请求的 URI
8)获取 servlet path
版权声明: 本文为 InfoQ 作者【胖虎不秃头】的原创文章。
原文链接:【http://xie.infoq.cn/article/7156617ddd4c86cc05ba61e34】。文章转载请联系作者。
评论