手把手做一个JSP入门程序(七):使用Cookie实现浏览记录(JSP)

使用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>
  • 为了能够记录和显示浏览记录,我们将有如下过程:
    1. 获取Cookie中的isbn字符串
    2. 添加当前浏览的图书的isbn
    3. 更新Cookie
    4. 利用BookDAO从数据库获取数据
    5. 显示浏览记录
<%
    // 往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条时,只去最新4String[] 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程序也就完成啦!中间涉及的知识点好好掌握下,就可以写简单的程序啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值