共计 2283 个字符,预计需要花费 6 分钟才能阅读完成。
HttpServletRequest 对象
HttpServletRequest 对象:次要作用是用来接管客户端发送过去的申请信息,例如:申请的参数,发送的头信息等都属于客户端发来的信息,service()办法中形参接管的是 HttpServletRequest 接口的实例化对象,示意该对象次要利用在 HTTP 协定上,该对象是由 Tomcat 封装好传递过去。
HttpServletRequest 是 ServletRequest 的子接口,ServletRequest 只有一个子接口,就是 HttpServletRequest。既然只有一个子接口为什么不将两个接口合并为一个?
从久远上讲:当初次要用的协定是 HTTP 协定,但当前可能呈现更多新的协定。若当前想要反对这种新协定,只须要间接继承 ServletRequest 接口就行了。
在 HttpServletRequest 接口中,定义的办法很多,但都是围绕接管客户端参数的。然而怎么拿到该对象呢?不须要,间接在 Service 办法中由容器传入过去,而咱们须要做的就是取出对象中的数据,进行剖析、解决。
接管申请
罕用办法
- 办法
-
示例
// 获取客户端申请的残缺 URL(从 http 开始,到? 后面完结)String url = request.getRequestURL().toString(); System.out.println("获取客户端申请的残缺 URL:" + url); // 获取客户端申请的局部 URL(从站点名开始,到? 后面完结)String uri = request.getRequestURI(); System.out.println("获取客户端申请的局部 URL:" + uri); // 获取申请行中的参数局部 String queryString = request.getQueryString(); System.out.println("获取申请行中的参数局部:" + queryString); // 获取客户端的申请形式 String method = request.getMethod(); System.out.println("获取客户端的申请形式:" + method); // 获取 HTTP 版本号 String protocol = request.getProtocol(); System.out.println("获取 HTTP 版本号:" + protocol); // 获取 webapp 名字(站点名)String webapp = request.getContextPath(); System.out.println("获取 webapp 名字:" + webapp);
获取申请参数
- 办法
-
示例
// 获取指定名称的参数,返回字符串 String uname = request.getParameter("uname"); System.out.println("uname 的参数值:" + uname); // 获取指定名称参数的所有参数值,返回数组 String[] hobbys = request.getParameterValues("hobby"); System.out.println("获取指定名称参数的所有参数值:" + Arrays.toString(hobbys));
申请乱码问题
因为当初的 request 属于接管客户端的参数,所以必然有其默认的语言编码,次要是因为在解析过程中默认应用的编码方式为 ISO-8859-1(此编码不反对中文),所以解析时肯定会呈现乱码。要想解决这种乱码问题,须要设置 request 中的编码方式,通知服务器以何种形式来解析数据。或者在接管到乱码数据当前,再通过相应的编码格局还原。
形式一:
request.setCharacterEncoding("UTF-8");
<font color=”red”> 这种形式只针对 POST 无效(必须在接管所有的数据之前设定)</font>
形式二:
new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
借助了 String 对象的办法,该种形式对任何申请无效,是通用的。
Tomcat8 起,当前的 GET 形式申请是不会呈现乱码的。
申请转发
申请转发,是一种 <font color=”red”> 服务器的行为 </font>,当客户端申请达到后,服务器进行转发,此时会将申请对象进行保留,地址栏中的 <font color=”red”>URL 地址不会扭转 </font>,失去响应后,服务器端再将响应发送给客户端,<font color=”red”> 从始至终只有一个申请收回 </font>。
实现形式如下,达到多个资源协同响应的成果。
request.getRequestDispatcher(url).forward(request,response);
request 作用域
通过该对象能够在一个申请中传递数据,作用范畴:在一次申请中无效,即服务器跳转无效。
// 设置域对象内容
request.setAttribute(String name, String value);
// 获取域对象内容
request.getAttribute(String name);
// 删除域对象内容
request.removeAttribute(String name);
request 域对象中的数据在一次申请中无效,则通过申请转发,request 域中的数据仍然存在,则在申请转发的过程中能够通过 request 来传输 / 共享数据。
加 VX 理解点我扫码支付
学习更多常识,请退出 QQ 群:1080355292,入群暗号(33)