第15章 Servlet的会话跟踪技术
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013年8月12日星期一
4
Java EE基础教程
15.1 session与会话
方法 String getId() long getGreationTime() Long getLastAccessedTime() void setMaxInactiveInterval(int interval) Int getMaxInactiveInterval() 返回SessionID 返回session被创建的时间 返回session最后被客户发送的时间 设置session的有效生存时间 返回超时时间间隔(秒),负值表示 session永远不会超时。 功能描述
2013年8月12日星期一
1
Java EE基础教程
15.3.3 将图书添加到购物车并显示购物车信息
在Titles类中存放了图书的相关信息,但没有表示 图书数量的属性,为此构建这个CartItem类,它 不但可以存放图书的相关信息,同时还可以存放 某种图书的数量。在购物车中(HashMap对象 cart)的键必须是唯一的,图书的isbn号是不会有 重复的,可作为这个Map的键,购物车中的值就 是每种书对应的一个CartItem对象。将图书添加 进了购物车后,转发到ch15/viewCart.jsp页面显 示购物车的信息。 程序清单:ch15/viewCart.jsp
2013年8月12日星期一
1
Java EE基础教程
15.3.3 将图书添加到购物车并显示购物车信息
代码可以分为三个阶段:第一个阶段从购物车 cart中取出所有图书的isbn号,也即是购物车的键; 第二阶段根据isbn号从cart中取出所有的CartItem 对象,即图书商品信息,并计算商品的金额;第 三阶段利用JSP表达式显示购物车的详细信息, 同时将总金额保存在session中,以备将来结账时 用。在代码中用到一个类DecimalFormat,这是 一个用来格式化小数的类,这个类可以先定义模 板,并根据模板样式输出小数。viewCart.jsp运行 结果如图所示。
1
Java EE基础教程
15.3.2 显示图书详细信息
以上代码中根据传递过来的isbn号,调用 TitleDaoImpl()类的findByIsbn()方法在数据库中查 找,返回一个Titles类的实例,并将此对象保存在 了会话对象session中。然后转发到 ch15/detail.jsp页面显示图书详细信息。在 detail.jsp页面中通过 <%Titles titles=(Titles)session.getAttribute(“titles”); %>JSP脚本从session中取出相关图书信息,并 用JSP表达式将图书信息显示出来,如图下所示。
2013年8月12日星期一
7
Java EE基础教程
会话的创建
第一种方法中,布尔值为ture时,表示如果 存在与当前请求关联的会话,就返回该会 话,如果没有关联的会话,则创建一个新 的会话。布尔值为false时,表示如果存在 与当前请求关联的会话,就返回该会话, 如果没有关联的会话返回null,并且不创建 新的会话。第二种方法的作用与第一种方 法的布尔值为ture时相同。
2013年8月12日星期一
2
Java EE基础教程
15.3.4 添加订单信息并结账
在上图中单击“继续购物”链接可导航到 viewBook.jsp页面,单击“结账”按钮则提 交给order.html页面,这个页面可输入顾客的 相关信息,如图所示,代码略去。
2013年8月12日星期一
2
Java EE基础教程
2013年8月12日星期一
1
Java EE基础教程
15.3.2 显示图书详细信息
在上图中单击某一本书的isbn号可查看书的 详细信息。这个功能是由一个Servlet和一 个JSP页面一同完成的。对应于isbn号的链 接的是一个Servlet,其对应的是 ToViewTitle类
2013年8月12日星期一
2013年8月12日星期一
3
Java EE基础教程
15.1 session与会话
Session的生命周期是由Servlet容器来管理 的,Servlet容器可通过HttpSession的 setMaxInactiveInterval()方法设置Session 的最大生存时间,也可以通过HttpSession 的invalidate()方法结束一个会话。
字段
类型
说明
orderId
int
订单ID
username
Varchar(2 0) Varchar(8)
顾客名
zipcode
邮编
phone
Varchar(2 0) Varchar(2 0) double
2013年8月12日星期一
9
Java EE基础教程
结束HttpSession对象生命周期
可以通过以下三方法中的任何一种结束 HttpSession对象生命周期:
• 客户端关闭浏览器时,表示这一次会话结束, HttpSession对象生命周期结束; • 调用HttpSession的invalidate()方法,可结束 HttpSession对象的生命周期; • 两次访问服务器的时间间隔大于session定义的最大 非活动时间间隔时,也会结束session。
2013年8月12日星期一
8
Java EE基础教程
会话的使用
在上一节我们介绍了HttpSession接口的方法, 其中有两个方法setAttribute()和getAttribute()。 这两个方法可以实现在整个会话过程中数据的 正确传输。 setAttribute(String name,Object value)是把一 个值对象value保存在HttpSession对象中,并为 其指定引用名称为name。在会话过程中,需要 使用数据时可以使用getAttribute(String name) 方法,将数据取出来,取出来的这个值是一个 Object类型的对象,我们必须对其进行数据类型 转换,而且要与存入时的类型保持一致。
15.3.1 顾客浏览图书
以上代码中用到了JSP标准动作userBean, 在当前页面上创建了“TitleDaoImpl”类的一 个实例名字为“dao”。在页面中,单击某 一本书的“isbn”号会将链接提交给名字为 “toViewTitle”的一个Servlet,在这个链接 的后面通过URL重定向功能将这本书的isbn 号一同提交给“toViewTitle”。
Object getAttribute(String name)
void setAttribute(String name,Object value) void invalidate()
根据name返回存储在session中的Java 对象
以键-值对的方式将变量保存在session 中 使session对象失效,并释放所有与这 个session绑定的对象
2013年8月12日星期一
1
Java EE基础教程
15.3.2 显示图书详细信息
2013年8月12日星期一
1
Java EE基础教程
15.3.3 将图书添加到购物车并显示购物车信息
在图15-3中当单击“放入购物车”按钮时,提交 给处理购物车的Servlet类AddTitlesToCart。 程序清单:AddTitlesToCart.java 上面的代码中用到了会话技术和Java集合类。程序 中request.getSession(false)获取已经存在的会话, 如果不存在则将页面转到浏览图书页面。如果存 在会话,则从session中取出购物车,也即是一个 HashMap集合类对象cart。如果是第一次添加商 品,则购物车为空,此时创建一个HashMap对象 cart,并将其存入session中,保存购物车的命令 为session.setAttribute("cart", cart)。
2013年8月12日星期一
1
Java EE基础教程
15.3.3 将图书添加到购物车并显示购物车信息
在添加一种图书之前,要在购物车cart中查 找这本书是否已经添加过,这实际上是在 cart中查找是否存在与要存入的书的isbn号 有相同键值的对象,(CartItem) cart.get(titles.getIsbn())语句完成此功能。 其中CartItem是对图书的进一步封装。 程序清单:CartItem.java
2013年8月12日星期一
5
Java EE基础教程
15.2 Servlet实现会话跟踪
返回
会话的创建 会话的使用 结束HttpSession对象生命周期
2013年8月12日星期一
6
Java EE基础教程
会话的创建
在Servlet中可以通过request对象获得 HttpSession对象,具体方法如下: HttpSession session=request.getSession(Boolean value); HrrpSession session=request.getSession();
15.3.4 添加订单信息并结账
order.html页面中的form格式: <form method="POST" name="order" action="/javaEE/doOrder">,即提 交到了URL为doOrder的Servlet, 这个Servlet对应类DoOrder,在此 进行订单处理。 程序清单:DoOrder.java 在DoOrder类中引用了 OrderOperation类的实例。 OrderOperation类是bookorder表 的操作类,该类的saveOrder()方 法可将订单数据存入数据库中 bookorder表。bookorder表的结构 为:
顾客进入网站首先看到的是图书的列表, 显示的主要内容是图书的ISBN号、书名、 作者、出版社。这和前面的listBook.jsp的 页面是一样的,只是ISBN号的链接显示图 书的详细信息。 顾客浏览图书信息页面程序清单: ch15\viewBook.jsp
2013年8月12日星期一
1
Java EE基础教程
2013年8月12日星期一
2
Java EE基础教程
15.1 session与会话
Servlet容器通过HttpSession对象实现会话管理, 主要有两种实现方式,一种是用Cookie,另一种 是用URL重定向。当一个会话开始时,Servlet容 器为每一个客户创建一个HttpSession对象,在 HttpSession对象中可以存放客户状态信息(如购 物车)。在服务器中为了识别同一个Session对象, Servlet容器为每个子Session分配一个唯一标识, 称为SessionID。在客户端向服务器发送请求时, Servlet容器将生成的SessionID保存在客户端的 Cookie中,如果客户端关闭了Cookie,则可以通 过URL重定向保存这个SessionID。
2013年8月12日星期一
1
Java EE基础教程
15.3 编程示例:网上书店
返回
15.3.1 顾客浏览图书 15.3.2 显示图书详细信息 15.3.3 将图书添加到购物车并显示购物车 信息 15.3.4 添加订单信息并结账
2013年8月12日星期一
1
Java EE基础教程
15.3.1 顾客浏览图书
JavaEE基础教程
第15 章 Servlet的会话跟踪技术
15.1 session与会话
15.2 Servlet实现会话跟踪
15.3 编程示例:网上书店
清华大学出版社
15.1 session与会话
返回
HTTP是一种无状态协议,也就是说,当一个客户访问 服务器时,服务器不会保留客户端的任何信息,因此, Web服务器会将同一个客户的每次访问都当作一次新的 访问。但有时需要服务器保留客户端的信息,以识别同 一个客户的多次访问,那又如何实现呢? 为了跟踪用户的操作状态,Servlet容器使用了一个称 为HttpSession的对象实现这个功能,称为会话机制。 会话(Session)是指在一段时间内,一个客户与 Web服务器的一系列交互过程,在一次会话过程中,客 户可能多次访问同一个页面,也可能访问多个不同的服 务器资源。