首页 > 代码库 > request

request

request:
  处理客户端的请求协议

  获取请求行的相关信息:
    getMethod(); //方法
    getRequestURI(); //URI路径
    getContextPath(); //项目
    getScheme(); //协议约束
    getRequestURL(); //URL路径

  获取请求头的相关信息:(请求头是键值对形式,所以遍历迭代器)
    Enumeration<String> names = request.getHeaderNames() //返回请求头的所有键的信息
    while(names.hasMoreElements()){
      String name = names.nextElement();
      String value = http://www.mamicode.com/request.getHeader(name);
      System.out.println(name + " == " + value);
    }

  获取请求体的相关信息:(直接通过提交时的name键得到值)
    getParameter(name) //根据键获取值(多个值得到第一个)
    getParameterValues(name) //根据键获取值组织成的数组
    getParameterMap() //返回键值组织成Map集合,值是一个数组的形式

BeanUtils:(面向对象的思想:将提交的数据封装为一个javaBean对象,BeanUtils自动封装JavaBean)
  BeanUtils.populate(JavaBean对象,Map集合)
    注意:
      1:BeanUtils会自动进行数据类型转化
        但是只能进行简单的数据类型转换 int double boolean String
      2:Map的键和JavaBean的字段名以及对应的setXxx方法名必须保持一致
      3:如果字段名不一致,不会正常赋值
  BeanUtils自定义转换器:
    1.创建一个时间转换器
     DateConverter dc = new DateConverter();
    2.声明当前时间转换器可以转换的字符串的格式
     dc.setPattern("yyyy-MM-dd");
    3.在BeanUtils中注册时间转换器
     ConvertUtils.register(dc, Date.class);
    /*作用,直接将一个1990-10-01格式的字符串转换成一个java.util.Date对象*/

使用请求转发:(解耦合)
    request.getRequestDispatcher("/servlet的路径").forward(ruquest,response);
  携带数据:
    request.setAttribute("键","值");
    这时不能用servletContext存储数据,因为并发访问时可能会出问题
  新页面获取值:
    request.getAttribute("键");
  在请求转发的时候因为用的是同一个response对象,所以一定要在开流之前定义响应的编码集
    response.setContentType("text/html;charset=utf-8");
  数据输出理论上只能由最后一个Servlet发出,不然会被覆盖

重新定向:
  A:调用response.sendRedirect("带/项目名称的URL");
  B:A的数据设置进响应头,被浏览器解析,浏览器访问该URL
    相当于:response.setStatus(302); //设置状态码告诉客户端需要重定向
        response.setHeader("Location","/day36demo/路径")

  请求转发与重定向区别
    A:本质区别:发生跳转这个动作产生的场合不同
       请求转发在服务器端发生跳转,而重定向发生在浏览器
    B:请求转发只有一次请求,只有一次响应
      重定向重定向一次,请求两次,响应了两次
    C:重定向地址栏会发生改变
      请求转发不会
      原因:最后访问的资源的URL当前浏览器是否可以获得
    D:路径项目名:
        重定向必须有
        请求转发没有
    E:请求转发的路径只能是项目内资源
      而重定向可以定位到网络上的任意资源,不单只是项目内的
      定时刷新页面也是一种特殊的重定向

request