由于种种原因,部分内容被隐藏,请大家原谅。
如果有什么问题,可以与我联系,我会尽快解答。
如果你觉得这篇文章对你有用,请回贴,谢谢。
授课教师:牟勇
课时: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电子书店显示和查看书籍:首先获得所有书籍的信息并显示,当用户单击某一本书籍时,显示该书籍的详细信息,以供用户选择是否购买。
request、response 对象有哪些常用方法?
web.xml文件的作用?
如何理解Servlet的生命周期?
实现页面跳转有几种方式?它们之间有哪些区别?
如何理解HTTP协议?
如何理解会话(session)?
使用什么方法来获得HttpSession对象?
问题1:HTTP有什么特点?
答案:无状态
问题2:什么是无状态?
答案:HTTP协议不记录用户的访问信息。
问题3:如何显示张三和李四分别访问了多少次服务?
答案:HTTP协议无法做到,只能另想别的办法,记录用户张三和李四的访问次数。
问题4:在线购物中如何对不同的用户进行区别?
答案:HTTP协议无法做到,只能另想别的办法。
分析:问题3和4归纳起来,其实只要解决一个问题:如何标识一个用户?
解决方案:由服务器提供唯一标识(ID号),每次用户访问时检查这个ID号,以便识别用户。这个方案就是我们平时所说的会话跟踪。
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");
}
...
|
教员应请一至二位学员完成该练习。
实现电子书店的购物车
根据幻灯片,说明电子书店购物车的业务流程。
电子书店演示
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>
|
简要说明上面的代码(如果有时间,可以现场演示或请学员来做)
在Web项目中为什么需要使用会话?
会话是如何创建的?
如何结束一个会话?
如何在会话中保存和取得数据?
如何创建会话
如何结束一个会话
如何在会话中保存和取得数据
暂无
暂无
习题1:71页至72页选择题
习题2:72页第1,2,3,4题
习题3:预习第四章,试做课后的选择题发表于 @ 2008年05月08日 14:35:03|评论(loading...)|编辑