使用Cookie实现浏览记录
为了能够实现保存用户浏览记录的功能,我们可以将用户浏览过的书籍的ISBN保存到Cookie中,然后在服务器通过Cookie中的ISBN来获取到相应书籍的信息。
修改BookDAO,实现通过多个ISBN获取书籍信息
在BookDAO.java中添加如下方法。其中isbnStr是多个isbn字符串通过”,”间隔连接成的一个字符串。
/*
* 通过一系列isbn获取书籍信息
*/
public ArrayList<Book> getViewList(String isbnStr){
ArrayList<Book> books = new ArrayList<Book>();
// 返回最多4条信息
int maxRecordCount = 4;
if(isbnStr != null && isbnStr.length() > 0){
String[] isbns = isbnStr.split(",");
if(isbns.length >= maxRecordCount){
// 商品记录数大于等于4条,只取最新4条
for(int i = isbns.length - 1; i >= isbns.length-maxRecordCount; i --){
books.add(getBookByISBN(isbns[i]));
}
}else{
// 商品记录数小于4条
for(int i = isbns.length-1; i >= 0; i --){
books.add(getBookByISBN(isbns[i]));
}
}
return books;
}else{
return null;
}
}
在single.jsp中显示浏览记录
我们需要将以下这段代码替换为JSP代码。
<div class="col-md-2 record">
<div class="rec-head">浏览记录</div>
<div class="rec-card">
<a href="single.html"><img class="img-rec pull-left" src="img/图解网站分析.jpg"/></a>
<div class="pull-left txt-rec">图解网站分析<br />¥34.8</div>
</div>
<div class="rec-card">
<a href="single.html"><img class="img-rec pull-left" src="img/图解网站分析.jpg"/></a>
<div class="pull-left txt-rec">图解网站分析<br />¥34.8</div>
</div>
<div class="rec-card">
<a href="single.html"><img class="img-rec pull-left" src="img/图解网站分析.jpg"/></a>
<div class="pull-left txt-rec">图解网站分析<br />¥34.8</div>
</div>
<div class="rec-card">
<a href="single.html"><img class="img-rec pull-left" src="img/图解网站分析.jpg"/></a>
<div class="pull-left txt-rec">图解网站分析<br />¥34.8</div>
</div>
</div>
- 为了能够记录和显示浏览记录,我们将有如下过程:
- 获取Cookie中的isbn字符串
- 添加当前浏览的图书的isbn
- 更新Cookie
- 利用BookDAO从数据库获取数据
- 显示浏览记录
<%
// 往Cookie中添加当前访问的书籍isbn
String isbnStr = "";
// 从客户端获取Cookie集合
Cookie[] cookies = request.getCookies();
if(cookies != null && cookies.length > 0){
for(Cookie c:cookies){
if(c.getName().equals("BookViewRecordCookie")){
isbnStr = c.getValue();
}
}
}
// 添加当前访问的记录
isbnStr += request.getParameter("isbn") + ",";
// 记录超过4条时,只去最新4条
String[] arr = isbnStr.split(",");
if(arr != null && arr.length > 0){
if(arr.length >= 4){
isbnStr = "";
for(int i=arr.length-1; i >= arr.length-4; i --){
isbnStr = arr[i] + "," + isbnStr;
}
}
}
// 创建最新的Cookie
Cookie cookie = new Cookie("BookViewRecordCookie",isbnStr);
response.addCookie(cookie);
%>
<div class="col-md-2 record">
<div class="rec-head">浏览记录</div>
<%
//利用BookDAO获取浏览记录
ArrayList<Book> booksView = bookdao.getViewList(isbnStr);
if(booksView != null && booksView.size() > 0){
for(Book b: booksView){
System.out.println("进入");
System.out.println("book = " + book);
%>
<div class="rec-card">
<a href="single.jsp?isbn=<%= b.getIsbn() %>"><img class="img-rec pull-left" src="img/<%= b.getImg() %>"/></a>
<div class="pull-left txt-rec"><%= b.getName() %><br />¥<%= b.getPrice() %></div>
</div>
<%
}
}
%>
Cookie和Session
由于HTTP 是一个无状态协议,所以为了记住状态(比如某人是否已经登录)便产生了Cookie。Cookie是保存在客户端的浏览器的,因此也产生了一个弊端:Cookie中的数据可以被伪造。而Session则是保存在服务器中。session 通过一个session_id来与客户端的Cookie进行交互,该session_id则存在客户端的Cookie中。与node.js需要手动创建session不同,jsp中的session会在用户访问时自动进行创建。
到这里我们的这个JSP程序也就完成啦!中间涉及的知识点好好掌握下,就可以写简单的程序啦!