【JavaWeb】Cookie和Session简单应用情景

图书购物车的程序,购物访问具体流程如下:
在这里插入图片描述
运行效果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
主要代码:
在这里插入图片描述
ListBookServlet

package SessionTest;
import ...

@WebServlet(urlPatterns = "/ListBookServlet")
public class ListBookServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
			resp.setContentType("text/html;charset=utf-8");
			PrintWriter out = resp.getWriter();
			Collection<Book> books = BookDB.getAll();
			out.write("本站提供的图书有:<br>");
			for (Book book : books) {
				String url = "/PurchaseServlet?id=" + book.getId();
				//resp.encodeRedirectURL(java.lang.String url)用于对表单action和超链接的url地址进行重写
				String newUrl=resp.encodeRedirectURL(url);
				out.write(book.getName() + "<a href='" + newUrl + "'>点击购买</a><br>");
			}

		}
	}

PurchaseServlet

 package SessionTest;
 import ...

 @WebServlet(urlPatterns = "/PurchaseServlet")
 public class PurchaseServlet extends HttpServlet {
 	public void doGet(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
 			// 获得用户购买的商品
 			String id = req.getParameter("id");
 			if (id == null) {
 				// 如果id为null,重定向到ListBookServlet页面
 				String url = "/ListBookServlet";
 				resp.sendRedirect(url);
 				return;
 			}
 			Book book = BookDB.getBook(id);
 			// 创建或者获得用户的Session对象
 			HttpSession session = req.getSession();
 			// 从Session对象中获得用户的购物车
 			List<Book> cart = (List) session.getAttribute("cart");
 			if (cart == null) {
 				// 首次购买,为用户创建一个购物车(List集合模拟购物车)
 				cart = new ArrayList<Book>();
 				// 将购物城存入Session对象
 				session.setAttribute("cart", cart);
 			}
 			// 将商品放入购物车
			cart.add(book);
			// 创建Cookie存放Session的标识号
			Cookie cookie = new Cookie("JSESSIONID", session.getId());
			// 设置Cookie过期时间
			cookie.setMaxAge(60 * 30);
			// 设值Cookie在应用目录下共享
			cookie.setPath("/");
			// 发送Cookie
 			resp.addCookie(cookie);
 			// 重定向到购物车页面
 			String url = "/CartServlet";
 			String newurl=resp.encodeRedirectURL(url);
 			resp.sendRedirect(newurl);
 		}
 	}

CartServlet

package SessionTest;
import ...

@WebServlet(urlPatterns = "/CartServlet")
public class CartServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out = resp.getWriter();
		// 变量cart引用用户的购物车
		List<Book> cart = null;
		// 变量pruFlag标记用户是否买过商品
		boolean purFlag = true;
		// 获得用户的session
		HttpSession session = req.getSession(false);
		// 如果session为null,purFlag置为false
		if (session == null) {
			purFlag = false;
		} else {
			// 获得用户购物车
			cart = (List) session.getAttribute("cart");
			// 如果用的购物车为null,purFlag置为false
			if (cart == null) {
				purFlag = false;
			}
		}
		/*
		 * 如果purFlag为false,表明用户没有购买图书 重定向到ListServlet页面
		 */
		if (!purFlag) {
			out.write("对不起!您还没有购买任何商品!<br>");
		} else {
			// 否则显示用户购买图书的信息
			out.write("您购买的图书有:<br>");
			double price = 0;
			for (Book book : cart) {
				out.write(book.getName() + "<br>");
			}
		}
	}
}

模拟数据库代码:BookDB和Book

package SessionTest;
import ...
public class BookDB {
private static Map<String, Book> books = new LinkedHashMap<String, Book>();
	static {
		    books.put("1", new Book("1", "javaweb开发"));
		    books.put("2", new Book("2", "jdbc开发"));
			books.put("3", new Book("3", "java基础"));
			books.put("4", new Book("4", "struts开发"));
			books.put("5", new Book("5", "spring开发"));
		}
		// 获得所有的图书
		public static Collection<Book> getAll() {
			return books.values();
		}
		// 根据指定的id获得图书
		public static Book getBook(String id) {
			return books.get(id);
		}
	}

package SessionTest;
import java.io.Serializable;

public class Book implements Serializable {
	private String id;
	private String name;
	public Book() {
	}
	public Book(String id, String name) {
			this.id = id;
			this.name = name;
		}
		public String getId() {
			return id;
		}
		public String getName() {
			return name;
		}
	}

欢迎点赞评论,指出不足,笔者由衷感谢哦!~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值