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的生命周期

原文地址:https://www.cnblogs.com/ZhuX-H/p/13325130.html