1.会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话。
2.问题:如何在一次会话中保存会话相关的数据。
3.Cookie:将会话相关的数据保存到浏览器中,并且在每次访问服务器时都带过去。
3.1javax.servlet.http.Cookie,可以直接利用此类的构造方法创建一个Cookie,创建出来的Cookie需要设置一个名称和值 3.2response身上具有addCookie的方法,可以将创建出来的组织成响应消息中的set-cookie头,通知浏览器保存该cookie 3.3request身上具有getCookies方法,可以获取浏览器带过来的所有Cookie3.4Cookie方法:注意,浏览器是根据cookie的名称加上cookie的path来区分是否是同一个cookie的,如果需要覆盖之前的cookie,除了保证名称相同外还要保证path也相同。
public Cookie(String name,String value)利用构造方法创建一个Cookie对象,在创建的时候就要指定该Cookie的名和值 setValue与getValue方法 设置或者获取Cookie的值setMaxAge与getMaxAge方法 如果不设置cookie的MaxAge(或将其值设置为负值),则默认情况下浏览器会将cookie保存在浏览器的内存中,会随着浏览器关闭而消失。如果设置为一个正值,则代表该Cookie要保存的以秒为单位的时间值,如此,该cookie将会被浏览器保存到硬盘中去。如果将MaxAge设置为0,则是通知浏览器去删除该Cookie。
setPath与getPath方法 用来指定访问哪个ULR及其子URL时带上此cookie,如果不设置此值,则浏览器默认会将发送该cookie的servlet所在的路径作为path使用。 例如: setPath("/Day06")则/Day06/.../...的路径都会带上该Cookie 如果发送该Cookie的Servlet是 /Day06/servlet/Demo1Servlet,并且未设置setPat,则浏览器在访问/Day06/servlet/..时会带上该cookie setDomain与getDomain方法 设置cookie对应的域名,此方法一旦调用,则浏览器会认为该cookie是一个第三方cookie而拒收 getName方法 获取该cookie的名字,注意没有setName方法,一个Cookie一旦创建出来就不能修改名字了 3.5浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。 实验: 利用cookie实现显示上次访问时间 !~~利用cookie显示最近浏览的商品 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); Cookie [] cs = request.getCookies(); Cookie findC = null; if(cs!=null){ for(Cookie c : cs){ if("lastTime".equals(c.getName())){ findC = c; } } } if(findC == null){ response.getWriter().write("您是第一次访问本网站!"); }else{ Long lastTime = Long.parseLong(findC.getValue()); response.getWriter().write("您上次访问时间是:"+new Date(lastTime).toLocaleString()); } Date date = new Date(); Cookie c = new Cookie("lastTime",date.getTime()+""); c.setMaxAge(3600*24*30); c.setPath(request.getContextPath()); //c.setDomain(".baidu.com"); response.addCookie(c); }