乐趣区

HttpServletRequest对象

HttpServletRequest 对象

​ HttpServletRequest 对象:次要作用是用来接管客户端发送过去的申请信息,例如:申请的参数,发送的头信息等都属于客户端发来的信息,service()办法中形参接管的是 HttpServletRequest 接口的实例化对象,示意该对象次要利用在 HTTP 协定上,该对象是由 Tomcat 封装好传递过去。

​ HttpServletRequest 是 ServletRequest 的子接口,ServletRequest 只有一个子接口,就是 HttpServletRequest。既然只有一个子接口为什么不将两个接口合并为一个?

​ 从久远上讲:当初次要用的协定是 HTTP 协定,但当前可能呈现更多新的协定。若当前想要反对这种新协定,只须要间接继承 ServletRequest 接口就行了。

​ 在 HttpServletRequest 接口中,定义的办法很多,但都是围绕接管客户端参数的。然而怎么拿到该对象呢?不须要,间接在 Service 办法中由容器传入过去,而咱们须要做的就是取出对象中的数据,进行剖析、解决。

接管申请

罕用办法

  1. 办法

  2. 示例

    // 获取客户端申请的残缺 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);

获取申请参数

  1. 办法

  2. 示例

    // 获取指定名称的参数,返回字符串
    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)

退出移动版