开发者社区> 华章计算机> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《Servlet和JSP学习指南》一2.3 cookie

简介: 本节书摘来自华章出版社《Servlet和JSP学习指南》一书中的第2章,第2.3节,作者(加)Budi Kurniawan,更多章节内容可以访问云栖社区“华章计算机”公众号查看
+关注继续查看

2.3 cookie

网址重写和隐藏域都只适用于保持那些不需要跨越许多页面的信息。如果这些信息需要跨越很多页面,这两种技术就变得很难实现,因为你必须管理每一个页面的信息。值得庆幸的是,cookie能够解决网址重写和隐藏域都无法解决的问题。
cookie是自动地在Web服务器和浏览器之间来回传递的一小块信息。cookie适用于那些需要跨越许多页面的信息。由于cookie是作为HTTP标头嵌入的,因此传输它的过程由HTTP协议处理。除此之外,还可以根据自己的需要设置cookie的有效期限。对于Web浏览器而言,每台Web服务器最多可以支持20个cookie。
cookie的不足之处在于,用户可以通过修改他/她的浏览器设置来拒绝接受cookie。
要使用cookie,必须熟悉javax.servlet.http.Cookie类,以及HttpServletRequest和HttpServletResponse接口中的几个方法。
要创建cookie,传递一个名称和一个值给Cookie类的构造器:
image

例如,要创建一个选择语言的cookie,可以这么写:
image

创建Cookie之后,可以设置它的domain、path及maxAge属性。尤其值得关注的是maxAge属性,因为它决定cookie的有效期限。
为了将一个cookie发送到浏览器,需在HttpServletResponse上调用add方法:
image

当浏览器再次发出对同一个资源或者对同一台服务器中的不同资源的请求时,它会同时把从Web浏览器处收到的cookie再传回去。
cookie也可以利用JavaScript在客户端进行创建和删除,但是这超出了本书的内容范围。
要访问浏览器发出的cookie,可以在HttpServletRequest中使用getCookies方法。该方法将返回一个Cookie数组,如果请求中没有cookie,将返回null。为了找到某个名称的cookie,需要迭代数组。下面举个例子,看看如何读取一个名为maxRecords的cookie。
image

令人遗憾的是,没有getCookieByName方法可以使获取cookie变得更简单一些。更令人难过的是,也没有方法可以直接删除cookie。为了删除cookie,需要创建一个同名的cookie,将它的maxAge属性设置为0,并在HttpServletResponse中添加一个新的cookie。看看下面是如何删除一个名为userName 的cookie的:
image

为了举例说明如何在Session管理中使用cookie,可参见代码清单2-4中的Preference-Servlet类。这个Servlet允许用户修改4个cookie的值,从而在同一个应用程序中设定其他Servlet的显示设置。
image

image
image
image
image
image

PreferenceServlet的doGet方法发送了一个表单,其中包含几个输入域,如图2-6所示。
表单的上方有三个链接(Cookie Class、Cookie Info及Preference),可以导航到同一个应用程序的其他Servlet。稍后会简单介绍一下Cookie Class和Cookie Info。

image

当用户提交表单时,会调用PreferenceServlet的doPost方法。doPost方法会创建这些cookie:maxRecords、titleFontSize、titleFontStyle及titleFontWeight,并将同一个cookie的所有之前值都覆盖掉。之后,它会将用户选择的值发送给浏览器。
可以利用下面这个URL来调用PreferenceServlet:
image

代码清单2-5中的CookieClassServlet类和代码清单2-6中的CookieInfoServlet类,是利用PreferenceServlet设置的cookie来格式化它们的内容的。CookieClassServlet Servlet将Cookie类的属性写在一个HTML列表中。列表中的项编号由maxRecords cookie的值决定,而这个值则可以由用户利用PreferenceServlet进行设置。
image
image
image

CookieInfoServlet类读取titleFontSize、titleFontWeight和titleFontStyle cookie的值,将以下CSS样式写到浏览器中,这里的x、y和z是指上述cookie的值。
image

一个div元素用这个样式来格式化文本“Session Management with Cookies:”。
image
image
image

可以利用下面这个URL调用CookieClassServlet:
image

可以通过将浏览器跳转到下面这个URL,来调用CookieInfoServlet servlet:
image

图2-7和图2-8分别展示了CookieClassServlet和CookieInfoServlet的结果。

image

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
servlet 和 jsp
Servlet: 缺点: 显示HTML的时候,麻烦。out.println("<html>"); 优点: Servlet就是一个Java类。编写容器。 调试容易。IDE。 jsp JSP=HTML+Java代码 Java Server Pages(Java服务器端页面)1.JSP和Servlet区别: JSP和Servlet是本质相同的技术。容器负责编译J
1103 0
Jsp+JavaBean+Servlet实现模拟银行账户存取款等功能的网站(实习第4-8天)
本来想学J2EE的3个经典框架(Spring + Struts +Hibernate),奈何负责实习的老师只讲了Jsp+JavaBean+Servlet,项目时间还蛮紧的,所以只用JJS实现了这个项目,后面寒假有时间的话再用SSH实现并完善这个网站吧。前几天抽时间学了点前端的东西,感觉还是有点麻烦的,前端做既漂亮又有良好的兼容性不是件太容易的事情,所幸现在觉得能够静下来学技术做开发是件
1113 0
基于jsp+javabean+servlet+mongodb 增删改查
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javae
1267 0
JSP中的Servlet及Filter
asp.net中,如果开发人员想自己处理http请求响应,可以利用HttpHandler来满足这一要求;类似的,如果要拦截所有http请求,可以使用HttpMoudle。java的web开发中,也有类似的处理机制,与HttpHandler应对的是HttpServlet,与HttpModule对应的则是Filter。
606 0
【技术帖】各种jsp servlet报错问题总结
代码写成我这种程度真是不容易,赶紧去烧烧香!!   1.首先出现的错误就是把jar包导入项目后,servlet始终处于报错的状态,index.jsp压根就死在了那里,出不来。     descriptionThe server encountered an internal erro...
881 0
tomcat各版本和jsp、jstl、servlet的依赖关系(转)
Servlet / JSP / Tomcat  Version    Servlet/ JSP    Tomcat  2.5/2.1 6.0.18 2.4/2.0 5.
697 0
JSP+Servlet+mysql简单示例【图文教程】
下载MYSQL:http://dev.mysql.com/downloads/ 下载安装版的 然后安装(安装步骤就不详细说了) 安装好之后,点击托盘图标,打开管理工具 创建一个数据库   数据库的名字叫mydb   提交   创建一个表 表...
1092 0
jsp servlet中的过滤器Filter配置总结
在Java web开发中常会使用到功能强大的过滤器,他毕竟能给我们带来很大的方便,但是针对过滤的资源我们需要详细的了解他们在web.xml中的配置信息。
403 0
文章
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载