由于种种原因,部分内容被隐藏,请大家原谅。
如果有什么问题,可以与我联系,我会尽快解答。
如果你觉得这篇文章对你有用,请回贴,谢谢。
授课教师:牟勇 课时: 100 分钟 l 本章技能目标 n 理解会话跟踪原理 n 会获得Sesison对象 n 会使用session对象进行数据存取 l 本章重点 nHttpSession的理解 nsession的创建 l 本章难点 n使用session进行会话跟踪 l 本章工作任务 n升级E-Book电子书店实现购物车功能 u 显示书籍列表 u 单击书籍后,显示书籍的详细信息 l 整章授课思路 n本章依次讲解三个问题:回顾HTTP协议的无状态,会话跟踪原理,实现E-Book电子书店显示和查看书籍。 n回顾HTTP协议的无状态:通过计算机在网络中遇到的问题,进行疑问式阐述HTTP的无状态,而这种无状态在很多情况下无法完成程序的需要。在这种情况下,只有通过会话跟踪来实现。 n会话跟踪原理:服务器可以为客户端分配一个唯一的ID号,从而来区分不同的客户端。并说明会话是如何创建,使用的,以及会话的存在周期。 n实现E-Book电子书店显示和查看书籍:首先获得所有书籍的信息并显示,当用户单击某一本书籍时,显示该书籍的详细信息,以供用户选择是否购买。 回顾: [5分钟] request、response 对象有哪些常用方法? web.xml文件的作用? 如何理解Servlet的生命周期? 实现页面跳转有几种方式?它们之间有哪些区别? 如何理解HTTP协议? 预习检查: [5分钟] 如何理解会话(session)? 使用什么方法来获得HttpSession对象? 课程知识点讲解: 回顾HTTP协议的无状态:[20分钟] 问题1:HTTP有什么特点? 答案:无状态 问题2:什么是无状态? 答案:HTTP协议不记录用户的访问信息。 问题3:如何显示张三和李四分别访问了多少次服务? 答案:HTTP协议无法做到,只能另想别的办法,记录用户张三和李四的访问次数。 问题4:在线购物中如何对不同的用户进行区别? 答案:HTTP协议无法做到,只能另想别的办法。 分析:问题3和4归纳起来,其实只要解决一个问题:如何标识一个用户? 解决方案:由服务器提供唯一标识(ID号),每次用户访问时检查这个ID号,以便识别用户。这个方案就是我们平时所说的会话跟踪。 会话跟踪原理[30分钟] HttpSession 对象 v 服务器为每个会话创建一个HttpSession对象 v 每个会话对象都有一个唯一的ID v 把用户的数据保存在相应的HttpSession对象内 什么是会话? Session的中文意思就是会话。它是指当前浏览器与服务器间多次的请求、响应关系, 示例:记录不同用户的访问次数
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(true); // 获得 Session 对象 Object count = session.getAttribute("COUNTER");// 取值 int counter = 0; if (count == null) { counter = 1; //将第一次计数存入session session.setAttribute("COUNTER", new Integer(1));// 存值 } else { counter = ((Integer) count).intValue(); counter++;//计数加一 //将计数存入session session.setAttribute("COUNTER", new Integer(counter)); } } 教员应详细讲解重点代码(红色部分) 会话的创建 使用HttpServletRequest 的 getSession() 方法创建会话, 语法如下:
public HttpSession getSession(); public HttpSession getSession( boolean value); 教员应说明两个getSession方法之间的区别。 会话的使用 保存数据,取出数据
public void setAttribute(String param,Object value); public Object getAttribute(String param); 说明:保存数据时,数据应以对象的形式进行保存,取出时,数据的类型为Object,所以需要进行类型转换。 session 对象的存在周期 v session的创建 n 浏览器访问服务器时,服务器为每个浏览器创建不同的session对象 v session的关闭 n 调用session. invalidate()方法,使session对象失效 n 访问时间间隔大于非活动时间间隔, session对象失效 n 关闭浏览器时,session对象失效 现场编程:在登录页面用户已录入用户名,现编写一个Servlet接收该数据,并把用户名值保存在HttpSession对象内
… public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userName=request.getParameter("userName"); HttpSession session=request.getSession(); if (userName!=null && "".equals(userName)) session.setAttribute("userName", userName); else response.sendRedirect("index.html"); } ... 教员应请一至二位学员完成该练习。 实现E-Book电子书店显示和查看书籍[30分钟] 实现电子书店的购物车 根据幻灯片,说明电子书店购物车的业务流程。 电子书店演示 v 显示所有书籍的列表 v 点击某本书,显示书籍的详细信息 v 添加当前书籍到购物车 电子书店的数据库设计 见幻灯片19 电子书店的实体对象设计-书(Book) 见幻灯片20 书籍类--BookBean.java
import java.io.Serializable; public class BookBean implements Serializable { private String ISBN; //ISBN编号 private String title; //书名 private String copyright; //版权 private String imageFile; //封面图像 private int editionNumber; //版本 private int publisherID; //出版商ID private double price; //价格 public void setISBN(String isbn) { // 设定ISBN编号 ISBN = isbn; } public String getISBN() { // 返回ISBN编号 return ISBN; } … } ... 教员详细说明实体Bean的一般写法(私有变量,默认构造方法,setXXX()与getXXX()方法) 购物车的设计---- 书籍清单 见幻灯片21 数据库连接类
public class ConnectionManager { … //打开数据库连接 public static Connection getConnction() { Connection dbConnection = null; try { Class.forName("driver"); dbConnection = DriverManager .getConnection("url", "user", "pass"); } catch (Exception e) { e.printStackTrace(); } return dbConnection; } //关闭数据库连接 … } 简要说明数据库连接类(打开,关闭,如果有时间,可以现场演示) 数据库访问类
public List getTitles() { List titlesList = new ArrayList(); try { connection = ConnectionManager.getConnction(); titlesQuery = connection.prepareStatement("select* form titles"); ResultSet results = titlesQuery.executeQuery(); while (results.next()) { BookBean book = new BookBean(); book.setISBN(results.getString("isbn")); ... //设置其他的属性值 titlesList.add(book); } }catch (Exception exception) { exception.printStackTrace(); } return titlesList; } 简要说明上面的代码(如果有时间,可以现场演示,或请学员来做) 显示所有商品列表--books.jsp
<% TitlesBean titlesBean = new TitlesBean(); List titles = titlesBean.getTitles(); session.setAttribute( "titles", titles ); //显示titles内数据 for(int i=0;i<titles.size( );i++){ %> <td> <A href="displayBook.jsp?isbn=<%= currentBook.getISBN() %>"> <IMG height=110 src="/store/images/<%=currentBook.getImageFile() %>"> </A> </td> <% } %> 简要说明上面的代码(如果有时间,可以现场演示或请学员来做) 显示书籍详细信息――displayBook.jsp
<% List titles = (List) session.getAttribute("titles"); int size = titles.size(); BookBean book = null; String isbn = request.getParameter("isbn"); int i = 0; while (i < size) { book = (BookBean) titles.get(i); if (isbn.equals(book.getISBN())) { session.setAttribute("bookToAdd", book); // 保存书籍到session对象 break; // isbn 匹配当前书籍 } i++; } %> <td><IMG src="/store/images/<%=book.getImageFile() %>" /></td> 简要说明上面的代码(如果有时间,可以现场演示或请学员来做) 本章总结 [10分钟] 在Web项目中为什么需要使用会话? 会话是如何创建的? 如何结束一个会话? 如何在会话中保存和取得数据? 考核点 如何创建会话 如何结束一个会话 如何在会话中保存和取得数据 扩展部分: 暂无 学员问题汇总: 暂无 作业: 习题1:71页至72页选择题 习题2:72页第1,2,3,4题 习题 3 :预习第四章,试做课后的选择题