JSP中session的简单应用——以购物车为例

题目

编写两个页面,一个显示一些历史图书的名称和价格,一个显示一些计算机书名的名称和价格。每本书后面都有一个链接——购买,单击该链接,能够将该书本加到购物车;每个页面上都有链接,单击该链接,将该图书从购物车删除。

解题思路

难点在于点击链接后发送请求,这不同于传统的表单,我们需要在链接后面直接加上请求的数据,并且去获取。

解题步骤

1. 设计两个图书页面

1.1页面1——历史图书价格(Login.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>历史图书</title>
</head>

<body>
《梦回大清》¥39.99<br>
《梦回大唐》¥49.99<br>
购物车中的书有:
</body>
</html>
1.2页面2——计算机图书价格(login2.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>历史图书</title>
</head>

<body>
《梦回Java》¥39.99<br>
《梦回Python》¥49.99<br>
购物车中的书有:
</body>
</html>

2.获取购买信息,存入session中

<%
	ArrayList books=(ArrayList)session.getAttribute("books");
	if(books==null)
	{
		books=new ArrayList();
		session.setAttribute("books",books);
	}
	String bookname=request.getParameter("bookname");
	if(bookname!=null){
	bookname=new String(bookname.getBytes("ISO-8859-1"),"utf-8"); 
 	books.add(bookname);
 	session.setAttribute("books",books);
	}
%>

这里的bookname会在下文给出出处。

这里需要注意一点,为了防止session丢失,在检测到请求session为null的时候,我们才会去创建一个ArrayList。
还有一点,因为图书的名字可能是中文,所以要记得要使用 bookname=new String(bookname.getBytes("ISO-8859-1"),"utf-8"); 转换一下编码方式,这里的utf-8是我原先的JSP编码格式,大家可以把这里换成自己的,比如gb2312之类的。

3. 购买超链接的设计方式

在超链接的URL后方添加一个问号,填上需要传递的信息,就可以默认使用get方法传值。

<a href="Login.jsp?bookname=梦回大清">购买</a><br>

以此为模板,上文提到的bookname的来源就是这里,JSP代码会检测到bookname,然后利用session添加书籍名称。

4.添加删除超链接的设计方式

和第三步基本一致,因为购物车中每一个商品都有顺序,所以在删除的时候,只需要传递这件商品所处位置的下标,就可以准确的将其删除。这样不会导致重复书名的商品被删除。

<a href="Login.jsp?delete=<%=i%> ">删除</a>

这里的i在循环中给出。

5.完整代码

5.1 页面1——历史图书价格(Login.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>历史图书</title>
</head>

<body>
《梦回大清》¥39.99<a href="Login.jsp?bookname=梦回大清">购买</a><br>
《梦回大唐》¥49.99<a href="Login.jsp?bookname=梦回大唐">购买</a><br>
<%
	
	ArrayList books=(ArrayList)session.getAttribute("books");
	
	if(books==null)
	{
		books=new ArrayList();
		session.setAttribute("books",books);
	}
	String bookname=request.getParameter("bookname");
	if(bookname!=null){
	bookname=new String(bookname.getBytes("ISO-8859-1"),"utf-8"); 
 	books.add(bookname);
 	session.setAttribute("books",books);
	}
	String delete=request.getParameter("delete");
	if(delete!=null){
		int i=Integer.parseInt(delete);
		books.remove(i);
		session.setAttribute("books",books);
	}
%>
购物车中的书有:<br>
<%
		int i=0;
	for( i=0;i<books.size();i++)
	{
	%>
		<a href="Login.jsp?delete=<%=i%> ">删除</a>
		
		 <%out.println(books.get(i)+"<br>");}
		%>

</body>
</html>

5.2 页面2——计算机图书价格(login2.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>

<meta charset="UTF-8">
<title>计算机图书</title>
</head>
<body>
《梦回Java》¥39.99<a href="login2.jsp?bookname=梦回Java">购买</a><br>
《梦回Python》¥49.99<a href="login2.jsp?bookname=梦回Python">购买</a><br>
<%
	
	ArrayList books=(ArrayList)session.getAttribute("books");
	
	if(books==null)
	{
		books=new ArrayList();
		session.setAttribute("books",books);
	}
	String bookname=request.getParameter("bookname");
	if(bookname!=null){
	bookname=new String(bookname.getBytes("ISO-8859-1"),"utf-8"); 
 	books.add(bookname);
 	session.setAttribute("books",books);
	}
	String delete=request.getParameter("delete");
	if(delete!=null){
		int i=Integer.parseInt(delete);
		books.remove(i);
		session.setAttribute("books",books);
	}
%>
购物车中的书有:<br>
<%
		int i=0;
	for( i=0;i<books.size();i++)
	{
	%>
		<a href="Login.jsp?delete=<%=i%> ">删除</a>
		
		 <%out.println(books.get(i)+"<br>");}
		%>

</body>
</html>

奇怪的是,点击了“购买”或者“删除”的时候,的确是可以成功传递所需要的值的,但是如果此时刷新了页面,**请求会继续被发送 **,这个问题尚未解决,但基本满足了题目要求。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值