CookieUtils

[java]  view plain copy
  1. package cn.itcast;  
  2.   
  3. import java.util.Arrays;  
  4. import java.util.LinkedList;  
  5. import java.util.List;  
  6.   
  7. import javax.servlet.http.Cookie;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. /** 
  12.  * 类说明:使用cookie实现浏览历史记录 
  13.  *  
  14.  * @author 作者: LiuJunGuang 
  15.  * @version 创建时间:2011-10-31 下午04:16:02 
  16.  */  
  17. public class CookieUtils {  
  18.     /** 
  19.      * Cookie的名字 
  20.      */  
  21.     public static final String COOKIE_HISTORYID = "cookies_history";  
  22.     /** 
  23.      * Cookie的存活时间 
  24.      */  
  25.     public static final int COOKIE_LIFE_TIME = 14 * 24 * 60 * 60;  
  26.     /** 
  27.      * 最大的浏览历史记录条数 
  28.      */  
  29.     public static final int HISTORY_COUNT = 5;  
  30.   
  31.     /** 
  32.      * 获得指定cookie中的值 
  33.      *  
  34.      * @param request 
  35.      * @param cookieName 
  36.      *            要查找的cookie的名字 
  37.      * @return 返回指定Cookie中的字符串值 
  38.      */  
  39.     public static String getCookie(HttpServletRequest request, String cookieName) {  
  40.   
  41.         Cookie cookies[] = request.getCookies();  
  42.         if (cookies != null) {  
  43.             for (Cookie cookie : cookies) {  
  44.                 // 找到指定的cookie  
  45.                 if (cookie != null && COOKIE_HISTORYID.equals(cookie.getName())) {  
  46.                     return cookie.getValue();  
  47.                 }  
  48.             }  
  49.         }  
  50.         return null;  
  51.     }  
  52.   
  53.     /** 
  54.      * 设置指定cookie中的值(1.得到原先cookie中的值;2.重新设置cookie的值;3.保存重置后的cookie) 
  55.      *  
  56.      * @param request 
  57.      * @param response 
  58.      * @param cookieName 
  59.      *            要设置的cookie的名字 
  60.      * @param goodsid 
  61.      *            要添加到浏览历史中的 goodsID号 
  62.      * @param count 
  63.      *            总共可以显示的历史记录条数 
  64.      */  
  65.     public static void setCookie(HttpServletRequest request,  
  66.             HttpServletResponse response, String cookieName, String goodsid,  
  67.             int count) {  
  68.         // 得到指定的cookie  
  69.         String ids = getCookie(request, cookieName);  
  70.         // 设置cookie中格的浏览记录  
  71.         ids = setValue(ids, goodsid, count);  
  72.         // 保存cookie  
  73.         saveCookie(request, response, cookieName, ids);  
  74.     }  
  75.   
  76.     // 测试方法  
  77.     public static void main(String[] args) {  
  78.         System.out.println(setValue(null"1"3));  
  79.         System.out.println(setValue("1,2,3""1"3));  
  80.         System.out.println(setValue("2,1,3""1"3));  
  81.         System.out.println(setValue("2,1""1"3));  
  82.         System.out.println(setValue("2,3,4""1"3));  
  83.         System.out.println(setValue("2,4""1"3));  
  84.         System.out.println(setValue("4,3,1""1"3));  
  85.     }  
  86.   
  87.     /** 
  88.      * 设置浏览历史字符串 
  89.      *  
  90.      * @param ids 
  91.      * @param sbookid 
  92.      *            最新浏览的id号 
  93.      * @return 修改后的字符串 
  94.      */  
  95.     private static String setValue(String ids, String bookid, int count) {  
  96.         // 1、 没有任何记录--》直接添加 id  
  97.         // 2、 1,2,3 4--》 4,1,2  
  98.         // 3、 1,2,3 2 --》 2,1,3  
  99.         // 4、1,2 3--》 3,1,2  
  100.         // 如果不存在Cookie或者Cookie中没有值  
  101.         StringBuffer sb = new StringBuffer();  
  102.         if (ids == null) {  
  103.             sb.append(bookid);  
  104.         } else {  
  105.             List<String> list = Arrays.asList(ids.split("\\,"));  
  106.             LinkedList<String> idsList = new LinkedList<String>(list);  
  107.             // 未浏览过  
  108.             if (!idsList.contains(bookid)) {  
  109.                 if (idsList.size() < count) {  
  110.                     idsList.addFirst(bookid);  
  111.                 } else {  
  112.                     idsList.removeLast();  
  113.                     idsList.addFirst(bookid);  
  114.                 }  
  115.             } else {  
  116.                 // 如果包含已浏览的  
  117.                 idsList.remove(bookid);  
  118.                 idsList.addFirst(bookid);  
  119.             }  
  120.             for (String id : idsList) {  
  121.                 sb.append(id).append(",");  
  122.             }  
  123.             if (sb != null && sb.length() > 0) {  
  124.                 sb.deleteCharAt(sb.length() - 1);  
  125.             }  
  126.         }  
  127.         return sb.toString();  
  128.     }  
  129.   
  130.     /** 
  131.      * 保存cookie的值 
  132.      *  
  133.      * @param request 
  134.      * @param response 
  135.      * @param cookieName 
  136.      *            要保存的cookie的名字 
  137.      * @param value 
  138.      *            保存到cookie中的值 
  139.      */  
  140.     public static void saveCookie(HttpServletRequest request,  
  141.             HttpServletResponse response, String cookieName, String value) {  
  142.         saveCookie(request, response, cookieName, value, COOKIE_LIFE_TIME);  
  143.     }  
  144.   
  145.     /** 
  146.      * 删除指定的cookie 
  147.      *  
  148.      * @param request 
  149.      * @param response 
  150.      * @param cookieName 
  151.      *            要删除的cookie 
  152.      */  
  153.     public static void deleteCookie(HttpServletRequest request,  
  154.             HttpServletResponse response, String cookieName) {  
  155.         saveCookie(request, response, cookieName, ""0);  
  156.     }  
  157.   
  158.     /** 
  159.      * 保存cookie 并设置cookie存活的时间 
  160.      *  
  161.      * @param request 
  162.      * @param response 
  163.      * @param cookieName 
  164.      *            要保存的cookie的名字 
  165.      * @param value 
  166.      *            cookie中要存放的值 
  167.      * @param time 
  168.      *            cookie存活时间 
  169.      */  
  170.     public static void saveCookie(HttpServletRequest request,  
  171.             HttpServletResponse response, String cookieName, String value,  
  172.             int time) {  
  173.         Cookie cookie = new Cookie(cookieName, value);  
  174.         cookie.setMaxAge(time);// 设置Cookie的存活时间  
  175.         cookie.setPath(request.getServletContext().getContextPath());  
  176.         response.addCookie(cookie);// 保存cookie  
  177.     }  
  178. }  

你可能感兴趣的:(CookieUtils)