zoukankan      html  css  js  c++  java
  • Request 部分功能

    Request 六大功能:

    1.获取客户端请求信息:

      getRequestURL方法 -- 返回客户端发出请求完整URL
      getRequestURI方法 -- 返回请求行中的资源名部分
      getQueryString方法 -- 返回请求行中的参数部分
      getRemoteAddr方法 -- 返回发出请求的客户机的IP地址
      getMethod -- 得到客户机请求方式
      getContextPath -- 获得当前web应用虚拟目录名称 -- 在写路径时不要将web应用的虚拟路径的名称写死, 应该在需要写web应用的名称的地方通过getContextPath方法动态获取

      

      //将页面重定向--改写法只能是重定向到统一服务器和端口号的资源。若要要重定向到其它服务器的资源需要加上服务器地址和端口号

      response.sendRedirect(request.getContextPath()+"/index.jsp");

    2.获取请求头信息(根据请求头的键获取对应的value值)
      getHeader(name)方法 --- String
      getHeaders(String name)方法 --- Enumeration<String>
      getHeaderNames方法 --- Enumeration<String>
      getIntHeader(name)方法  --- int
      getDateHeader(name)方法 --- long(日期对应毫秒)

     1 /*
     2  * 获取请求头信息
     3  */
     4 //获取一个头的value
     5 String value = request.getHeader("Accept");
     6 
     7 //获取多个头信息User-Agent的值
     8 Enumeration values = request.getHeaders("User-Agent");
     9 while (values.hasMoreElements()) {
    10     //取得其中的一个值
    11     String val = (String) values.nextElement();
    12     System.out.println("**"+val);
    13 }
    14 //枚举出请求头信息的所有信息。
    15 Enumeration headerNames = request.getHeaderNames(); //获取到头信息的所有键名
    16 while (headerNames.hasMoreElements()) {
    17     String headerName = (String) headerNames.nextElement();
    18     String header = request.getHeader(headerName);  //根据键名获取对应的值
    19     System.out.println("-:"+headerName+":"+header);
    20     
    21 }

    3.获取请求参数:
      getParameter(String name) --- String 通过name获得值
      getParameterValues(String name)  --- String[ ] 通过name获得多值 checkbox
      getParameterMap()  --- Map<String,String[ ]> key :name value: 多值
      getParameterNames()  --- Enumeration<String> 获得所有name

    /*
     * 获取请求参数信息
     */
    //根据参数名获取请求参数的值(获取传入后台的值)
    String username = request.getParameter("username");
    String nickname = request.getParameter("nickname");
    //反向解码得出username对应的二机制序列
    byte[] userbytes = username.getBytes("iso8859-1");
    username = new String(userbytes, "utf-8");
    byte[] nickbytes = nickname.getBytes("iso8859-1");
    nickname = new String(nickbytes, "utf-8");
    //打印输出
    System.out.println("username: "+username);
    System.out.println("nickname: "+nickname);
    
    //根据前台相同的name值获取多个对应的值--返回的是一个数组不是个枚举
    String[] likes = request.getParameterValues("like");
    System.out.println("parameter::"+Arrays.toString(likes));
    
    //将前台传入的和表单数据,用map结构来统一获取并分别获取各个键值对的值
    //注意:Map的泛型结构是键为String 值为String[];为了防止相同name时可以得到多个值
    Map<String,String[]> map = request.getParameterMap(); Set<Entry<String, String[]>> set = map.entrySet(); Iterator<Entry<String, String[]>> it = set.iterator(); while (it.hasNext()) { Map.Entry<String,String[]> enIt = (Map.Entry<String, String[]>) it.next(); //System.out.println(enIt.getKey()); System.out.println(enIt.getKey()+"=="+Arrays.toString(enIt.getValue())); }
    //返回表单中所有含有name属性的属性名称,包括按钮
    Enumeration names = request.getParameterNames();
    while (names.hasMoreElements()) {
        String name = (String) names.nextElement();
        String[] val = request.getParameterValues(name);
        System.out.println(name+" : "+val[0]);  //每个name值所对应的第一个值
      System.out.println(name+" : "+Arrays.toString(val));  //每个name值所对应的每个值

    }

    4.请求转发:

      在服务器内部进行跳转,浏览器并没有识别。所以浏览器地址栏的值也不会改变,请求的request对象也只有一个。一次请求 一次响应

      request.getRequestDispatcher(" location... ").forward(request,response);

      **在请求转发之前, 如果response缓冲区写入了数据但是还没有打给浏览器, 在请求转发时这些数据将会被清空
          **在请求转发之前, 如果response缓冲区写入了数据并且打给了浏览器, 请求转发失败抛出异常!
          **请求转发就像方法的调用, 在转发代码之后的代码将会在转发结束后继续执行
          **不能多次转发, 但是可以多重转发

    5.域对象的使用:

      一个对象具有可以被看见的范围, 利用这个对象身上的map就可以实现资源的共享, 像这样的对象就称之为域对象

      request.setAttribute( String name, Object obj ); ------修改request的 "name" 的值

      request.getAttribute( String name );-------取request对象中的name值

      request.removeAttribute(String name); ---移除

        生命周期: 一次请求开始, 到一次请求结束
                作用范围: 在整个请求链上都可以看见
                主要功能: 在转发时带数据到目的地;  

    ----配合请求转发使用就可以实现将读取的数据存入当前的request对象中通过转发即可将修改后的request的值带到另一个servlet中----

    6.请求包含:

      所谓的请求包含指的是服务器内部实现资源合并的效果
         如果浏览器请求ServletA, 在A的内部可以通过
         request.getRequestDispatcher("B的虚拟路径").include(request, response);将ServletB包含进来, 这时将由A和B共同处理该请求, B处理的结果将会并入A处理的结果, 一起响应给浏览器

      (类似于jsp页面的head、index、foot的三个部分进行整合的效果)

  • 相关阅读:
    【wikioi】1014 装箱问题
    石子合并
    我的Linux对拍脚本
    【搬运工】NOIP吧置顶贴
    [LeetCode] 237. Delete Node in a Linked List 删除链表的节点
    [LeetCode] 316. Remove Duplicate Letters 移除重复字母
    [LeetCode] 82. Remove Duplicates from Sorted List II 移除有序链表中的重复项 II
    [LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项
    [LeetCode] 80. Remove Duplicates from Sorted Array II 有序数组中去除重复项 II
    [LeetCode] 26. Remove Duplicates from Sorted Array 有序数组中去除重复项
  • 原文地址:https://www.cnblogs.com/tongxuping/p/6891222.html
Copyright © 2011-2022 走看看