【JSP篇】——cookie之商品浏览记录的实现:5.cookie实现前五条浏览记录
程序员文章站
2022-05-15 17:17:09
...
1.工程说明
首先,我们要思考在哪个地方将我们的信息保存到cookie对象中呢,毫无疑问,当然是用户点击商品的时候,我们要将我们的商品信息保存到cookie中。在前面我们在页面跳转的时候,将我们是商品的id进行传递,这个id就是我们当前浏览商品的信息编号,所以我们就可以把我们的这个id保存到客户端上。
如此,我们的客户端中有一个cookie对象,保存了用户浏览商品的id们,我们便可以获取这个cookie对象的内容,然后得到前5条id,通过id将我们的商品显示出来。
好啦,思路已经很明确了,接下来我们就一步一步去实现它。
2.保存cookie对象
获取当前商品信息的id,然后获取cookie中保存的id们,将它们合并,再次保存到客户端中。
其中,list就是我们要用到的,用于显示当前的浏览信息。
具体如下:
<%
String list="";
//从客户端获取cookie集合
Cookie[] cookies=request.getCookies();
//遍历集合,找到我们要的listViewCookie
if(cookies!=null&&cookies.length>0)
{
for(Cookie c:cookies)
{
//c.getName()=="listViewCookie" 不能这么写!!!
if(c.getName().equals("listViewCookie"))
{
System.out.println("我从客户端找到了cookie!");
list=c.getValue();
}
}
}
//将当前的id追加到以前的cookie中
list+=request.getParameter("id")+",";
//如果浏览记录超过1000条,我们清零
String[] arr=list.split(",");
if(arr!=null && arr.length>0)
{
if(arr.length>=1000)
{
System.out.println("这里将list清零了!");
list="";
}
}
//最后添加到我们的cookie中
Cookie cookieListView=new Cookie("listViewCookie",list);
response.addCookie(cookieListView);
%>
3.从服务器获取商品信息
list保存我们要用到的信息,由代码我们可以看见,它是由“,”作为分割,那么我们应该获取list中的id们,取出前五条id。
//获取最近浏览的前五条商品信息
public ArrayList<Good> getViewList(String list)
{
//在控制台输出一下我们的list:测试用
System.out.println("list:"+list);
//返回的结果集
ArrayList<Good> itemlist = new ArrayList<Good>();
//每次返回前五条记录
int iCount=5;
if(list!=null&&list.length()>0)
{
String[] arr = list.split(",");
System.out.println("arr.length="+arr.length);
//如果商品记录大于等于5条
if(arr.length>=5)
{
for(int i=arr.length-1;i>=arr.length-iCount;i--)
{
System.out.println("当前list的数字:"+arr[i]);
itemlist.add(getGoodById(Integer.parseInt(arr[i])));
}
}
else
{
for(int i=arr.length-1;i>=0;i--)
{
System.out.println("当前list的数字:"+arr[i]);
itemlist.add(getGoodById(Integer.parseInt(arr[i])));
}
}
return itemlist;
}
else
{
return null;
}
}
这样我们将list分解,又根据id从数据库中获取记录,记录保存在一个ArrayList 对象中。然后在我们的页面显示信息:
<%
GoodDao daoCookie=new GoodDao();
ArrayList<Good> arrGood=daoCookie.getViewList(list);
if(arrGood!=null && arrGood.size()>0 )
{
for(int i=0;i<arrGood.size();i++)
{
Good currentGood=arrGood.get(i);
%>
<!-- 循环开始的地方 -->
<div class="prod_box">
<div class="top_prod_box"></div>
<div class="center_prod_box">
<div class="product_title"><a href="details.jsp?id=<%=currentGood.getId() %>"><%=currentGood.getName() %></a></div>
<div class="product_img"><a href="details.jsp?id=<%=currentGood.getId() %>">
<img src="images/<%=currentGood.getImage() %>" alt="" title="" border="0" /></a></div>
<div class="prod_price"> <span class="price"><%=currentGood.getPrice() %>$</span></div>
</div>
<div class="bottom_prod_box"></div>
<div class="prod_details_tab">
<a href="#" title="header=[Add to cart] body=[ ] fade=[on]"><img src="images/cart.gif" alt="" title="" border="0" class="left_bt" /></a>
<a href="#" title="header=[Specials] body=[ ] fade=[on]"><img src="images/favs.gif" alt="" title="" border="0" class="left_bt" /></a>
<a href="#" title="header=[Gifts] body=[ ] fade=[on]"><img src="images/favorites.gif" alt="" title="" border="0" class="left_bt" /></a>
<a href="details.jsp?id=<%=currentGood.getId() %>" class="prod_details">详情</a>
</div>
</div>
<%
}
}
%>
4.效果
布局没有写好,弄成这个鬼样子了,但是功能是没有错的。
ok,使用cookie显示商品的浏览记录就做完了。