servlet学习笔记---Cookie记录上次访问时间和访问次数

来源:互联网 发布:安卓e4a编程工具手机版 编辑:程序博客网 时间:2024/04/28 10:41



public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {OutputStream out=response.getOutputStream();response.setCharacterEncoding("UTF-8");Cookie[] cook=request.getCookies();    if(cook==null)    {    out.write("第一次访问,welcome".getBytes("UTF-8"));    }    else    {    for(int i=0;i<cook.length;++i)    {    if(cook[i].getName().equals("lasttime"))    {    long time=Long.parseLong(cook[i].getValue());    out.write(("上次访问时间:"+new Date(time).toLocaleString()).getBytes("UTF-8"));    }    }        }        Cookie cookie=new Cookie("lasttime",(System.currentTimeMillis())+"");    cookie.setMaxAge(3600);    cookie.setPath("/myweb/servlet/ServletDemo7");    response.addCookie(cookie);        }

若要清楚这个Cookie记录,需要重新生成一个相同名称的Cookie,然后设置setMaxAge为0,注意Path也要设置统一,才可以删除。


若是记录半小时到现在的访问次数:

import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CookieServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Cookie   cookie[]=request.getCookies(); Cookie cook=null;Boolean b=false;for(int i=0;cookie!=null&&i<cookie.length;++i){if(cookie[i].getName().equals("Visit")){  cook=cookie[i];  cook.setValue(""+(Integer.parseInt(cook.getValue())+1));  cook.setPath(request.getContextPath());  cook.setMaxAge(60*30);  response.addCookie(cook);}}if(cook==null){b=true;cook=new Cookie("Visit","1");cook.setMaxAge(-1);cook.setPath(request.getContextPath());response.addCookie(cook);}response.setContentType("text/html;charset=UTF-8");PrintWriter pw=response.getWriter();pw.write("您已经访问过页面"+cook.getValue()+"次");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
但若是只记录,本次会话访问此页面次数,只需把setMaxAge设置为-1.注意:就算更新cook的值,你也要重新setPath,这样的话,此网站只给你一个Cookie。

但还有种方式,不必再次setPath,可以重新生成Cookie,即两个Cookie的Path不同,但后生成的第一次找到,便停止寻找。

若是setPath(request.getContextPath())表示Path为当前项目名称,若是未重新设置path,则为项目名称+“/servlet”。

package com.wanhao;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CookieServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Cookie   cookie[]=request.getCookies(); Cookie cook=null;if(cookie!=null){Boolean b=false;   for(int i=0;i<cookie.length&&(!b);++i)   {if(cookie[i].getName().equals("Visit")){  cookie[i].setValue(""+(Integer.parseInt(cookie[i].getValue())+1));  cook=cookie[i];  response.addCookie(cookie[i]);  b=true;}   }}if(cook==null){cook=new Cookie("Visit","1");cook.setMaxAge(-1);cook.setPath(request.getContextPath());response.addCookie(cook);}response.setContentType("text/html;charset=UTF-8");PrintWriter pw=response.getWriter();pw.write("您已经访问过页面"+cook.getValue()+"次");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}






0 0