zoukankan      html  css  js  c++  java
  • Java易错知识点(2)

    全文总结:

     

    在读取Cookie,然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的:

    cookie.getMaxAge();

    cookie.getDomain();
    。。。

    因为,客户端传来的时候,就只剩下key和value了。

     

     

    Java中的Cookie操作:

     

    在Java中利用Serlvet或者JSP scriptlet可以向浏览器端写入Cookie。

     

    同样,利用Servet或者JSP scriptlet 也可以读取到 Cookie信息。

     

    Servlet规范中的Cookie API 如下:

     

    setMaxAge  setPath setDomain等方法,可以对Cookie状态进行控制;

     

    同样存在如下方法,可以获得相应的状态:

     

    getMaxAge  getPath  getDomain等方法,可以对Cookie的状态。

     

     

    然后,问题来了:

     

     

    读取Cookie时,发现除了Cookie的key和value外,其他的信息都丢失了!!

     

    原因很简单:

     

    Cookie从服务器端发送到客户端时,信息是完整的;

     

    Cookie从客户器端发送到服务端时,信息只剩下key、value了。

     

    (想想也明白,Domain不对的Cookie、Path不对的Cookie、过期的Cookie,客户端是不会发送过来的。)

     

    那为什么Java中提供了相应的get方法呢? 那个方法是在生成Cookie后,尚未发送到客户端时,使用的。是“封装”的体现吧  O(∩_∩)O~

     

    案例说话:

     

    写入Cookie的Servlet

    Java代码  收藏代码
    1. package edu.xjtu.servlet;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.PrintWriter;  
    5.   
    6. import javax.servlet.ServletException;  
    7. import javax.servlet.http.Cookie;  
    8. import javax.servlet.http.HttpServlet;  
    9. import javax.servlet.http.HttpServletRequest;  
    10. import javax.servlet.http.HttpServletResponse;  
    11.   
    12. public class AddCookie extends HttpServlet {  
    13.   
    14.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
    15.             throws ServletException, IOException {  
    16.   
    17.         Cookie cookie01 = new Cookie("site","JavaEye");  
    18.         cookie01.setMaxAge(60*60*1);  
    19.         cookie01.setPath("/");  
    20.         Cookie cookie02 = new Cookie("name","xiaolongfeixiang");  
    21.         cookie02.setMaxAge(60*60*2);  
    22.         cookie02.setPath("/servlet");  
    23.           
    24.           
    25.         response.addCookie(cookie01);  
    26.         response.addCookie(cookie02);  
    27.           
    28.         response.setContentType("text/html;charset=UTF8");  
    29.         PrintWriter out = response.getWriter();  
    30.         out.println("<HTML>");  
    31.         out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");  
    32.         out.println("  <BODY>");  
    33.         out.println("  cookie写入了");  
    34.         out.println(" <a href='show'> 查看cookie </a>");  
    35.         out.println("  </BODY>");  
    36.         out.println("</HTML>");  
    37.         out.flush();  
    38.         out.close();  
    39.     }  
    40.   
    41. }  

     

     

    读取Cookie的Servlet

    Java代码  收藏代码
    1. package edu.xjtu.servlet;  
    2.   
    3. import java.io.IOException;  
    4. import java.io.PrintWriter;  
    5.   
    6. import javax.servlet.ServletException;  
    7. import javax.servlet.http.Cookie;  
    8. import javax.servlet.http.HttpServlet;  
    9. import javax.servlet.http.HttpServletRequest;  
    10. import javax.servlet.http.HttpServletResponse;  
    11.   
    12. public class ShowCookie extends HttpServlet {  
    13.   
    14.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
    15.             throws ServletException, IOException {  
    16.           
    17.         Cookie[] cookies = request.getCookies();  
    18.           
    19.         StringBuffer buffer = new StringBuffer();  
    20.           
    21.         for(Cookie cookie : cookies){  
    22.             buffer.append(cookie.getName()).append(" : ").append(cookie.getValue());  
    23.             buffer.append(" -- ").append(" MaxAge : "+cookie.getMaxAge());  
    24.             buffer.append(" -- ").append(" Path : "+cookie.getPath()).append("<br/>");  
    25.         }  
    26.           
    27.         response.setContentType("text/html;charset=UTF8");  
    28.         PrintWriter out = response.getWriter();  
    29.         out.println("<HTML>");  
    30.         out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");  
    31.         out.println("  <BODY>");  
    32.         out.println("  读取的Cookie:<br>");  
    33.         out.println(buffer.toString());  
    34.         out.println("  </BODY>");  
    35.         out.println("</HTML>");  
    36.         out.flush();  
    37.         out.close();  
    38.           
    39.     }  
    40.   
    41. }  

     

     

    写入Cookie的页面 


     

    Response的信息如下:(信息齐全!!)


     

     

    查看Cookie的页面:(发现结果丢了一部分:)


     

    看浏览器的Cookie 

     

    Cookie: name 属性都对着的


     

    Cookie: site 属性也都对着的


     

     

    再看看网络:(发现传过来的Cookie都只有key-value了。所以那些状态信息都丢失了!!)

     


     

     

    验证了前面的总结:


    在读取Cookie然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的:

    cookie.getMaxAge();

    cookie.getDomain();
    。。。

    因为,客户端传来的时候,就只剩下key和value了。

     

  • 相关阅读:
    【CSDN博客之星评选】我为什么坚持写博客
    关于纯css布局的概况
    IIS服务器下301跳转是怎么样实现的?
    如何使用数据库保存session的方法简介
    PHP如何通过SQL语句将数据写入MySQL数据库呢?
    PHP中文函数顺序排列一数组且其序数不变
    angular实时显示checkbox被选中的元素
    oracle查询正在执行的语句以及正被锁的对象
    angular中ng-repeat去重
    接口自动化测试框架--http请求的get、post方法的实现
  • 原文地址:https://www.cnblogs.com/oldinaction/p/5167480.html
Copyright © 2011-2022 走看看