1.创建Book类,实现对图书信息的封装。
package cn.it.sessionDemo.example1; import java.io.Serializable; /** * 该类实现对图书的封装 * * @author 12428 * */ public class Book implements Serializable { private static final long serialVersionUID = 1L; 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 void setID(String iD) { ID = iD; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2.创建一个BookDB类实现对图书类的操作
package cn.it.sessionDemo.example1; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; /** * 该类实现数据库模拟 * * @author 12428 * */ public class BookDB { private static Map<String, Book> books = new LinkedHashMap<String, Book>(); // 静态代码块在Java类被加载时执行,由于类只加载一次,应此静态代码块只执行一次。 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); } }
3.创建一个ListBookServlet类,用来显示可购买的图书信息。
package cn.it.sessionDemo.example1; import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 该servlet是显示所有的图书列表。通过图书后面的购买连接可以把图书添加到购物车中 * * @author 12428 * */ @WebServlet("/ListBookServlet") public class ListBookServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ListBookServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); Collection<Book> books = BookDB.getAll(); out.write("本站的图书有:"); for (Book b : books) { // 将图书的id值作为参数传过去 String url = "/SessionDemo2/PurchaseServlet?id=" + b.getID(); out.write(b.getName() + "<a href='" + url + " '>点击购买</a><br/>"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
4.创建一个实现购物车功能的servlet类
package cn.it.sessionDemo.example1; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 该servlet类是用于实现购物车功能,既将用户购买的东西作为session的属性值存进去,再重定向到 到已购买商品的也买你 * * @author 12428 * */ @WebServlet("/PurchaseServlet") public class PurchaseServlet extends HttpServlet { private static final long serialVersionUID = 1L; public PurchaseServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获得用户的购买信息 String id = request.getParameter("id"); // 有些用户会直接访问这个Servlet,先判断访问时是否带有书的ID if (id == null) { // 如果Id为空,返回图书列表Servlet String url = "/SessionDemo2/ListBookServlet"; response.sendRedirect(url);
//此处一定要返回,不然会出现错误 return; } // 获取购买的图书信息 Book book = BookDB.getBook(id); // 创建session对象 HttpSession session = request.getSession(); // 从session中获得购物车对象 List<Book> cart = (List<Book>) session.getAttribute("cart"); // 判断session对象是否有cart这个属性,如果没有这个属性的话,集合cart的值应为空 if (cart == null) { // 没有cart属性,用户是首次购买,为用户创建一个购物车 cart = new ArrayList<Book>(); // 将购物车对象添加到session对象中 session.setAttribute("cart", cart); } // 将商品放入购物车 cart.add(book); // 创建一个Cookie存放session的信息 Cookie cookie = new Cookie("JSESSION", session.getId()); cookie.setMaxAge(60 * 30); cookie.setPath("/SessionDemo2"); // 将cookie发送到客户端 response.addCookie(cookie); // 重定向到已购买商品的页面。 String url = "/SessionDemo2/CartServlet"; response.sendRedirect(url); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
5.创建一个展示用户购买信息的类
package cn.it.sessionDemo.example1; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @WebServlet("/CartServlet") public class CartServlet extends HttpServlet { private static final long serialVersionUID = 1L; public CartServlet() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); // 变量cart引用用户的购物车 List<Book> cart = null; // 创建一个变量是来判断用户是否购买过商品 boolean Flag = true; // 获得用户的session,如果没有查到也不创建新的session。 HttpSession session = request.getSession(false); // 如果session为空,Flag为false; if (session == null) { Flag = false; } else {// 不为空,就获得用户的购物车 cart = (List<Book>) session.getAttribute("cart"); // 如果用户的购物车为空,就设置Falg为false。 if (cart == null) { Flag = false; } } // 如果Flag为false,表明用户没有购买过商品,重定向到ListServlet页面。 if (!Flag) { out.write("对不起,你没有购买任何商品"); } else { // 显示用户的购买信息 out.write("你购买的商品有:"); for (Book b : cart) { out.write(b.getName() + "<br/>"); } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }