zoukankan      html  css  js  c++  java
  • JavaWeb基础(Day16)(Request+cookie+session))

    Request+Cookie+Session

    HttpServletRequest

      客户端发送过来的请求通过tomcat内核进行提取,然后将数据封装到httpservletrequest对象中,在调用servlet的service的方法的时候将此对象作为参数传递过来,HttpServlet在service内部调用doGet和doPost方法将此对象作为参数传递过来。

     获取请求行内容

    • 获取请求方式

      • //获取请求方式
        String method = request.getMethod();
        System.out.println(method);  //GET
    • 获取uri和url路径

      • uri:统一资源标识符,通过request获取uri获取的是请求路径中web应用后的字符串不包含QueryString
      • url:同一资源定位符,通过request获取的url是带有协议名称应用名称端口号的完全路径
    //获取uri,就是请求行中的地址 
    String uri = request.getRequestURI(); 
    //获取url,获取全路径 
    StringBuffer url = request.getRequestUR L();
    System.out.println(uri);    ///WebTest/tt
    System.out.println(url);    //http://192.16 8.6.154:8080/WebTest/tt
    
    • 获取web应用的名称

    //获取当前web应用名称 
    String webName = request.getContextPath();
    System.out.println(webName);    // /WebTest
    
    • 获取请求的ip地址(了解)

    //获取请求的客户端的ip地址
     String ipAddress = request.getRemoteAddr();
     System.out.println(ipAddress);      //192.168.6.171
    
    • 获取get请求表单数据(了解)

    //获取get请求网址后的内容,如果是post获取内容 为null 
    String queryString = request.getQueryString(); 
    System.out.println(queryString);     //name=123
    

     获取请求头的内容

    • 获取指定头的数据

    //获取指定header的内容 
    String header = request.getHeader("User-A gent"); 
    System.out.println(header); 
    
    //Mozilla/5.0 (Windows NT 10.0; WOW64) App leWebKit/537.36 (KHTML, like Gecko) 
    Chrome/58.0.3029.110 Safari/537.36
    • 获取所有头信息(了解)

    //获取所有header的名字 
      Enumeration<String> names = request.getHead erNames(); 
        while(names.hasMoreElements()){ 
             String str = names.nextElement();
             String value = request.getHeader(str);
             System.out.println(str+"="+value); 
        }
    

     获取请求体的内容

      获取请求体中的提交的表单数据,尽管get请求数据在url后,用此方法同样可以获取。
    • 获取提交表单数据中某个具体的name的value

    //对于get请求虽然表单数据在请求行中,也是通过此方法 获取提交数据的 
    String name = request.getParameter("username");
    
    • 获取提交表单数据中一个name多个value数据

    //对于表单中一个name有多个值的可以使用此方法,如che ckbox,返回值是数组 
    String [] hobbys = request.getParameterValu es("hobby");
    
    • 获取提交表单所有数据

      • 数据格式是map格式,key指的是表单中的name属性,value是字符串数组,数组中存放的是对应的value属性
    1 //获取所有的表单数据返回值是map形式,key是字符串表 单的name属性,值是String数组,存放的是 
    2   Map<String, String[]> map = request.getPara meterMap(); 
    3     for(String key : map.keySet()){
    4          String[] values = map.get(key); 
    5         System.out.println(key+"="+Arrays.toStr ing(values));
    6      }        
    • 请求乱码问题

      • 对于表单提交,由于页面的编码格式utf­8,但在服务器端,将数据提取封装到request对象的时候采用的是iso8859­1,所以出现乱码。
    对于post提交
      request.setCharacterEncoding("UTF-8");
    对于get提交,如果出现乱码
    String parameter = request.getParameter("us ername");

    parameter = new String(parameter.getbyte s("iso8859-1"),"utf-8");

     内部转发

      客户端向服务器发送请求,服务器收到这个请求以后,可以在内部进行一个转发功能,也就是在不告知客户端的情况
    下进行请求的转发
    //获取内部转发器 
    RequestDispatcher dispatcher = request.getR equestDispatcher("/index.jsp"); 
    //进行转发
    dispatcher.forward(request, response);
     //通常是连写 
    request.getRequestDispatcher("/index.js p").forward(request, response);
    1. 内部转发客户端浏览器的地址不会发生改变,因为自始至终客户端只发送一个请求
    2. 通过内部转发路径一定要注意,因为操作过程是在服务器内部进行操作的,所以地址就不能够是客户端地址,而应是服务器端地址,路径不能再写web应用的名称,/就web应用的根目录
    3. 通过内部转发,两个servlet或者两个界面的接收到的request内的内容是相同的
    4. 因为内部转发是在服务器内部做的处理,所以内部转发是可以直接访问到WEB­INF下的内容的

     内部转发和重定向的区别

     域对象

      request对象也是一个域对象,所以也是可以存放数据的

     数据的写入,读取,删除

      1. 向request域中放入数据 setAtrribute(Stringname,Object obj);
      2. 从request域中获取数据 getAttribute(String name);
      3. 从request域中删除数据 removeAttribute(String name);
    • request域生命周期

      • 创建:一次请求访问的时候创建request
      • 销毁:一次请求结束后
      • 作用范围:只在一次请求中
    • request和servletContext区别

      • 相同点
        • 都是域对象,都能存放,读取,删除数据
      • 不同点
        • servletContext随着服务器的开启而开启,服务器的关闭而关闭,作用范围在整个服务器服务期间
        • request每一次请求tomcat都会重新创建一个新的request,所以request的作用范围只在一个请求中,如果使用内部转发机制建议使用request做为存储

    Cookie&Session

        HTTP协议是无状态的协议,也就是说每次客户端访问服务器,对于服务器而言,其实并不知道是谁在访问,如果要保证每次客户端访问时候,让我们的服务器能够区分出来是谁在访问,就需要运用会话技术。
      什么是会话?
        从用户打开客户端访问我们的web应用,到用户关闭客户端这个过程称作为一次会话。
      会话技术的分类
        Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端 可以清除cookie
        Session:将数据存储到服务器端,安全性相对好,增加服务器的压力。
     

     Cookie

    • cookie存储过程

      • 服务器端将需要存储的数据放在cookie中,通过响应头的形式发送给客户端,客户端收到了这个头信息,就会将数据进行保存,客户端再次请求服务的时候就会将此信息放在请求头中,那么服务器端通过获取请求头就能得到不同用户的cookie,从而区分出了不同的用户,做出不同的处理
     

     Session

    • 获得Session对象

    • 域对象

    • 写入,读取,删除数据

    • Session的生命周期

  • 相关阅读:
    Tech road one step Dec-5 to Dec-11
    Tech road one step Nov-28 to Dec-4
    Tech road one step 13-Nov to 20-Nov
    Unity 相机花式分屏
    Unity渲染
    Perfect Rectangle(完美矩形)
    Max Points on a Line(直线上最多的点数)
    Unity之CharacterController 碰撞问题总结
    cocos2dx 实现flappybird
    effectiveC++ 内存管理 学习笔记
  • 原文地址:https://www.cnblogs.com/ZhuX-H/p/13325130.html
Copyright © 2011-2022 走看看