- 浏览: 89074 次
文章分类
最新评论
第八章 cookie管理
核心方法:
1.在创建cookie对象后,将cookie发送到客户端程序之前,一般应该调用setMaxAge方法。
2.如果要指定cookie适用于您的网站上的所有URL,使用cookie.setPath("/"),也就是所有页面都接受该cookie
警告:
1.创建和操作Cookie对象对客户程序没有任何影响,必须显式地使用response.addCookie将cookie发送到客户端。
学习笔记
一、cookie的优点
1.在电子商务会话中标示用户。2.记录用户名和密码。3.定制站点,用户自己定制主页面的外观。用户选择希望看到的哪个天气预报等等。4.定向广告。有cookie的情况下,通过记录之前的搜索,这些网站可以识别出我们的兴趣,从而显示出我们感兴趣的广告,而不是随机的广告。
二、cookie存在的一些问题
为了解决cookie引发的隐私问题。1.如果能够在禁用cookie的情况下也为用户提供合理的功能。2.作为servlet和jsp中用到的cookie,我们尽量避免用cookie存储特别敏感的信息。
三、cookie的发送和接受
1.向客户程序发送cookie
a.创建cookie对象,给出cookie的名称和cookie的值,两者都是字符串。
b.如果我们创建一个cookie,并将它发送到浏览器,默认情况下,它是一个会话级别的cookie,存储在浏览器的内存中,当我们关闭浏览器时,就会被删除,如果我们希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。
c.将cookie放入http相应报头
综上所述:
2.从客户端读取cookie
a.调用request.getCookies()返回Cookie对象的数组,b.循环Cookie数组,有了cookie的数组之后,我们调用Cookie的getName方法,知道找到一个与您希望的名称想匹配的对象为止。
综上所述:
四、使用cookie检测初访者
不能仅因为cookie数组为null就认为用户是个初来者,因为这可能是由于用户将cookie删除或禁用而造成的结果。但是,如果数组非null,也不过是显示客户曾经到过您的网站,并不能说明它访问过我们的servlet。
五、使用cookie属性
1.cookie属性只适用于从服务器端输出到客户端的cookie,服务器端来自于浏览器的cookie并没有设置这些属性,因而不要期望通过设置request.getCookies得到的cookie中可以使用这些属性。也就是说,我们在服务器端设置这些值,然后发送给客户端,而这些属性不存在于浏览器返回给服务器的报头,所以我们也不能取出这些cookie的属性。可以这样理解,因为cookie就是用于客户端来保存和用户有关的信息的。而在服务器端我们不需要这些特性。
2.setPath(),如果没有指定一个路径,浏览器只将该cookie返回给发送cookie的页面所在目录中或之下的URL,而setPath("/")指定服务器的所有页面都应该收到该cookie.
3.一般由于cookie的名字和值已经在cookie的构造方法中设置过了,我们只使用cookie的getName和getValue得到cookie的名字和值,而不去设置cookie的名字和值
六、区分持续cookie和会话cookie
我们来看几种情况,首先我们初次打开浏览器时,显示的应该是No cookies,因为这时只是把完成了把cookie发送给客户端的任务。下面看两种情况,首先当我们刷新该页面时,就会显示
Session-Cookie0 Cookie-Value-S0
Session-Cookie1 Cookie-Value-S1
Session-Cookie2 Cookie-Value-S2
Persistent-Cookie0 Cookie-Value-P0
Persistent-Cookie1 Cookie-Value-P1
Persistent-Cookie2 Cookie-Value-P2
但当我们关闭原来的页面,再次打开浏览器访问该页面时,就会发现只出现
Persistent-Cookie0 Cookie-Value-P0
Persistent-Cookie1 Cookie-Value-P1
Persistent-Cookie2 Cookie-Value-P2
这就代表着会话的cookie(也就是没有设置setMaxAge的cookie)只存在于当前浏览会话,如果浏览器关闭了就不复存在,而持续的cookie就会存放在硬盘上,不会以关闭计算机或是关闭浏览器而改变。
当我们把持续cookie存放在硬盘上的时间改的短一点时。
首先当我们过了设置的时间再次刷新首次得到的浏览器客户端时,显示
Session-Cookie0 Cookie-Value-S0
Session-Cookie1 Cookie-Value-S1
Session-Cookie2 Cookie-Value-S2
因为我们并没有关闭浏览器,所以会话cookie并没有消失。而一开始发送给浏览器的持续cookie在硬盘上存放的时间也过了最大的时间限制,所以就会显示会话cookie的值。
而当我们关闭浏览器,然后过了设置的时间再次打开时,就显示No Cookie了。
七、修改cookie的值,记录用户的访问计数。
如果我们希望周期性地修改cookie的值应该怎么办?
我们只需要发送相同的cookie名称,但使用不同的cookie的值,如果我们调用setValue是没有用的,因为除了要设置其值以外,
我们还要调用setMaxAge和setPath。
核心方法:
1.在创建cookie对象后,将cookie发送到客户端程序之前,一般应该调用setMaxAge方法。
2.如果要指定cookie适用于您的网站上的所有URL,使用cookie.setPath("/"),也就是所有页面都接受该cookie
警告:
1.创建和操作Cookie对象对客户程序没有任何影响,必须显式地使用response.addCookie将cookie发送到客户端。
学习笔记
一、cookie的优点
1.在电子商务会话中标示用户。2.记录用户名和密码。3.定制站点,用户自己定制主页面的外观。用户选择希望看到的哪个天气预报等等。4.定向广告。有cookie的情况下,通过记录之前的搜索,这些网站可以识别出我们的兴趣,从而显示出我们感兴趣的广告,而不是随机的广告。
二、cookie存在的一些问题
为了解决cookie引发的隐私问题。1.如果能够在禁用cookie的情况下也为用户提供合理的功能。2.作为servlet和jsp中用到的cookie,我们尽量避免用cookie存储特别敏感的信息。
三、cookie的发送和接受
1.向客户程序发送cookie
a.创建cookie对象,给出cookie的名称和cookie的值,两者都是字符串。
Cookie c =new Cookie("userID","a1234")。
b.如果我们创建一个cookie,并将它发送到浏览器,默认情况下,它是一个会话级别的cookie,存储在浏览器的内存中,当我们关闭浏览器时,就会被删除,如果我们希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。
cookie.setMaxAge(60*60*24*7);//one week.当然最后不要忘了把它放入报头
c.将cookie放入http相应报头
response.addCookie();
综上所述:
Cookie userCookie = new Cookie("user","uid1234"); userCookie.setMaxAge(60*60*24*365); response.addCookie(userCookie);
2.从客户端读取cookie
a.调用request.getCookies()返回Cookie对象的数组,b.循环Cookie数组,有了cookie的数组之后,我们调用Cookie的getName方法,知道找到一个与您希望的名称想匹配的对象为止。
综上所述:
String cookieName = "userID"; Cookie [] cookies = request.getCookies(); for(int i = 0 ; i <cookies.length; i++){ Cookie cookie = cookies[i]; if(cookieName.equals(cookie.getName())){ doSomething(cookie.getValue()); } }
四、使用cookie检测初访者
不能仅因为cookie数组为null就认为用户是个初来者,因为这可能是由于用户将cookie删除或禁用而造成的结果。但是,如果数组非null,也不过是显示客户曾经到过您的网站,并不能说明它访问过我们的servlet。
五、使用cookie属性
1.cookie属性只适用于从服务器端输出到客户端的cookie,服务器端来自于浏览器的cookie并没有设置这些属性,因而不要期望通过设置request.getCookies得到的cookie中可以使用这些属性。也就是说,我们在服务器端设置这些值,然后发送给客户端,而这些属性不存在于浏览器返回给服务器的报头,所以我们也不能取出这些cookie的属性。可以这样理解,因为cookie就是用于客户端来保存和用户有关的信息的。而在服务器端我们不需要这些特性。
2.setPath(),如果没有指定一个路径,浏览器只将该cookie返回给发送cookie的页面所在目录中或之下的URL,而setPath("/")指定服务器的所有页面都应该收到该cookie.
3.一般由于cookie的名字和值已经在cookie的构造方法中设置过了,我们只使用cookie的getName和getValue得到cookie的名字和值,而不去设置cookie的名字和值
六、区分持续cookie和会话cookie
response.setContentType("text/html"); PrintWriter out = response.getWriter(); for(int i = 0 ; i < 3 ;i++){ Cookie cookie = new Cookie("Session-Cookie"+i,"Cookie-Value-S"+i); response.addCookie(cookie); } for(int i = 0 ; i < 3 ; i++){ Cookie cookie = new Cookie("Persistent-Cookie"+i,"Cookie-Value-P"+i); cookie.setMaxAge(60*60); response.addCookie(cookie); } Cookie [] cookies = request.getCookies(); String cookieName ; String cookieValue ; out .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println("<table>"); out.println("<tr>"+"<th>CookieName</th>"+"<th>CookieValue</th>"+"</tr>"); if(cookies==null){ out.println("NO Cookies"); } else{ for(int i = 0 ; i < cookies.length;i++){ Cookie cookie = cookies[i]; cookieName = cookie.getName(); cookieValue = cookie.getValue(); out.println("<tr><td>"+cookieName+"</td>"+"<td>"+cookieValue +"</td>"+"</tr>"); } } out.println("</table>"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close();
我们来看几种情况,首先我们初次打开浏览器时,显示的应该是No cookies,因为这时只是把完成了把cookie发送给客户端的任务。下面看两种情况,首先当我们刷新该页面时,就会显示
Session-Cookie0 Cookie-Value-S0
Session-Cookie1 Cookie-Value-S1
Session-Cookie2 Cookie-Value-S2
Persistent-Cookie0 Cookie-Value-P0
Persistent-Cookie1 Cookie-Value-P1
Persistent-Cookie2 Cookie-Value-P2
但当我们关闭原来的页面,再次打开浏览器访问该页面时,就会发现只出现
Persistent-Cookie0 Cookie-Value-P0
Persistent-Cookie1 Cookie-Value-P1
Persistent-Cookie2 Cookie-Value-P2
这就代表着会话的cookie(也就是没有设置setMaxAge的cookie)只存在于当前浏览会话,如果浏览器关闭了就不复存在,而持续的cookie就会存放在硬盘上,不会以关闭计算机或是关闭浏览器而改变。
当我们把持续cookie存放在硬盘上的时间改的短一点时。
首先当我们过了设置的时间再次刷新首次得到的浏览器客户端时,显示
Session-Cookie0 Cookie-Value-S0
Session-Cookie1 Cookie-Value-S1
Session-Cookie2 Cookie-Value-S2
因为我们并没有关闭浏览器,所以会话cookie并没有消失。而一开始发送给浏览器的持续cookie在硬盘上存放的时间也过了最大的时间限制,所以就会显示会话cookie的值。
而当我们关闭浏览器,然后过了设置的时间再次打开时,就显示No Cookie了。
七、修改cookie的值,记录用户的访问计数。
如果我们希望周期性地修改cookie的值应该怎么办?
我们只需要发送相同的cookie名称,但使用不同的cookie的值,如果我们调用setValue是没有用的,因为除了要设置其值以外,
我们还要调用setMaxAge和setPath。
String accessCount = CookieUtilities.getCookieValue(request, "accessCount", "1"); int count = Integer.parseInt(accessCount); LongLivedCookie cookie = new LongLivedCookie("accessCount",String.valueOf(count+1)); response.addCookie(cookie); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println("You are the "+count+"user"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close();
发表评论
-
servlet和jsp核心编程(第2版)第十六章 简化对Java代码的访问:jsp2.0表达式语言学习笔记
2012-08-23 21:49 768第十六章:简化对Java代 ... -
servlet和jsp核心编程(第2版)第十五章servlet和JSP的集成,模型-视图-控制器构架
2012-08-23 14:59 778第十五章:servlet和JSP的集成,模型-视图-控制器构架 ... -
servlet和jsp核心编程(第2版)第十四章 JavaBean组件在JSP文档中的应用 学习笔记
2012-08-21 11:55 733第十四章 JavaBean组件在JSP文档中的应用 一、bea ... -
servlet和jsp核心编程(第2版)第十三章 在JSP页面中包含文件和applet学习笔记
2012-08-20 15:53 888第十三章 在JSP页面中包 ... -
servlet和jsp核心编程(第2版)第十二章page指令学习笔记
2012-08-19 17:00 799第十二章 控制所生成的servlet的结构:JSP page指 ... -
servlet和jsp核心编程(第2版)第十一章jsp脚本元素的调用学习笔记
2012-08-18 21:09 847第十一章 用JSP脚本元素 ... -
servlet和jsp核心编程(第2版)第十章jsp技术概述学习笔记
2012-08-18 10:37 718第十章jsp技术概述 学习笔记: 一servlet和jsp的区 ... -
servlet和jsp核心编程(第2版)第九章会话跟踪学习笔记
2012-08-17 17:30 927第九章 会话跟踪 核心 ... -
servlet和jsp核心编程(第2版)第七章服务器响应的生成:HTTP响应报头学习笔记
2012-08-06 17:45 773第七章:服务器响应的 ... -
servlet和jsp核心编程(第2版)第六章服务器响应的生成:HTTP状态代码学习笔记
2012-08-05 10:52 775第六章:服务器响应的生成:HTTP状态代码 核心方法: 1.在 ... -
servlet和jsp核心编程(第2版)第五章客户请求的处理:HTTP请求报头学习笔记
2012-08-02 21:36 730第五章客户请求的处理:HTTP请求报头 核心方法: 1.在使用 ... -
servlet和jsp核心编程(第2版)第四章客户请求的处理,表单数据学习笔记
2012-07-31 16:05 1260第四章学习笔记 客户请 ... -
servlet和jsp核心编程(第2版)第三章servlet基础学习笔记
2012-07-29 10:43 739第三章:servlet基础 核心方法: 1.使用HTML验证器 ...
相关推荐
**JSP(Java Server Pages)与Servlet是Java Web开发中的两个核心技术,它们在构建动态网页和处理客户端请求方面起着至关重要的作用。** **JSP技术:** JSP是一种服务器端脚本语言,用于创建动态网页。它允许开发者...
由于直接学习笔记的内容没有给出具体的实例代码和详细解释,所以这里只提供了理论层面的知识点。如果需要学习具体实现,可以寻找相关的教程和项目实践来加深理解。同时需要注意的是,由于JSP/Servlet技术相对老旧,...
【Servlet&JSP基础知识】 ...以上是`head_first_servlet&jsp`学习笔记的主要知识点,涵盖了Servlet和JSP的基础、Web应用架构、MVC模式、会话管理和JSP编程等多个方面,为深入理解和实践Servlet与JSP开发奠定了基础。
### Servlet学习笔记精炼知识点 #### 一、Servlet初始化与加载机制 1. **Servlet注册与实例化**:在Web应用中,一个Servlet的生命周期始于它的注册与实例化过程。通常,这一过程是在Web服务器启动时,根据`web.xml...
在学习JSP之前,理解Servlet的基本概念和操作是至关重要的。以下是一些关于Servlet的重要知识点: 1. **Servlet的生命周期**: Servlet在服务器端有三个主要阶段:加载、初始化和销毁。当服务器首次接收到对...
### 良葛格JspServlet学习笔记 #### 一、引言 在现代Web开发领域,特别是Java EE平台中,JSP (JavaServer Pages) 和 Servlet 技术扮演着非常重要的角色。这两种技术共同构成了Java Web应用的基础,分别侧重于用户...
- Cookie的作用域:一个Servlet/JSP设置的Cookie能够被同一个路径下面或者子路径下面的Servlet/JSP读取。 - **Session**:更复杂的会话管理机制,用于跟踪用户在整个Web应用程序中的活动。通过`HttpSession`接口来...
【标题】:“韩顺平servlet笔记”是一个关于Servlet...通过韩顺平的servlet笔记,读者不仅可以学习到Servlet编程的基本技能,还能掌握Tomcat服务器管理和会话管理的实战经验,为开发复杂的Java Web应用打下坚实基础。
哔哩哔哩上老杜的Servlet笔记。 2020-5-05 Servlet学习 Tomcat 服务器配置 2020-5-08 UML 2020-5-08 Servlet学习 2020-5-09 Servlet学习 2020-5-10 Servlet学习 2020-5-11 Servlet学习---Cookie 2020-5-11 Servlet中...
【标题】"jsp自制详细笔记"揭示了这个压缩包文件主要涵盖了JavaServer Pages(JSP)和Servlet技术的学习资源,特别适合JavaWeb开发的初学者。JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,从而...
JSP最终会被编译为Servlet类执行,因此从功能上看,JSP并不超出Servlet的范围,只是提供了更简洁的编程模型。 HTTP Servlet API是开发Servlet的核心工具,它定义了一系列接口和类,如`HttpServlet`、`...
### servlet学习笔记详解 #### Tomcat介绍 **Tomcat服务器**是基于Sun公司的JSWDK(Java Servlet and Web Development Kit)发展而来的杰出Servlet/JSP容器。作为Apache-Jakarta项目的一部分,Tomcat不仅能够执行...
以上只是《Head First Servlets & JSP》一书中的部分核心知识点,实际内容还包括过滤器、监听器、MVC设计模式、JSTL等更广泛的主题,旨在帮助读者全面理解和掌握Servlet和JSP技术。通过深入学习,开发者能够构建高效...
### Servlet学习笔记4 #### 一、URL Pattern详解 在Servlet配置中,URL Pattern是非常重要的一个概念,它决定了Servlet能够响应哪些请求路径。通常来说,URL Pattern可以分为三种类型: 1. **确切路径匹配**:...
**J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是一个由Sun Microsystems(现已被Oracle收购)开发的平台,主要用于构建企业级的分布式应用系统。它提供了服务器端组件模型、服务和API,支持...
本篇文章将深入探讨这个基于JSP+DAO的留言管理程序,包括其核心概念、工作原理以及实现过程。 一、JSP简介 JSP是一种由Sun Microsystems公司提出的动态网页技术,它允许开发者将Java代码嵌入到HTML页面中,以实现...
在"JSP七个小项目代码和笔记汇总"中,每个项目可能涵盖了不同的知识点,比如用户登录系统(涉及session管理)、新闻发布系统(涉及数据库操作)、购物车应用(涉及cookie和session结合使用)等。通过实践这些小项目...
### JSP学习笔记详解 #### 一、JSP基础语法概览 JSP(Java Server Pages)是一种在服务器端执行的脚本语言,用于生成动态网页。它将HTML标记、JavaScript脚本和Java代码结合在一起,使开发者能够创建功能丰富的Web...