为了能够实现保存用户浏览记录的功能,我们可以将用户浏览过的书籍的ISBN保存到Cookie中,然后在服务器通过Cookie中的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; }}我们需要将以下这段代码替换为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程序也就完成啦!中间涉及的知识点好好掌握下,就可以写简单的程序啦!
新闻热点
疑难解答