查看全文:https://www.longkui.site/program/java/idea2020sevletsession3/7204/
【任务目标】
通过所学Session知识以及购物车的访问流程,以购买蛋糕为例,模拟实现购物车功能。
1.创建实体类
先创建一个文件夹,名称为cn.itcast.session.entity
然后右击 entity文件夹,选择New—>Java Class,名字为Cake
代码参考如下:
package cn.itcast.session.entity;public class Cake{private static final long serialVersionUID=1L;private Stringid;private String name;publicCake(){}public Cake(String id, String name){this.id=id;this.name=name;}public StringgetId(){returnid;}public void setId(Stringid){this.id=id;}public StringgetName(){returnname;}public void setName(String name){this.name=name;}}然后再在entity文件下创建一个数据库模拟类,CakeDB,代码参考如下:
package cn.itcast.session.entity;importjava.util.Collection;importjava.util.LinkedHashMap;importjava.util.Map;public class CakeDB{private static Map<String, Cake>cake=new LinkedHashMap<String, Cake>();static{cake.put("1", new Cake("1","A类蛋糕"));cake.put("2", new Cake("2","B类蛋糕"));cake.put("3", new Cake("3","C类蛋糕"));cake.put("4", new Cake("4","D类蛋糕"));cake.put("5", new Cake("5","E类蛋糕"));}// 获得所有的蛋糕 public static Collection<Cake>getAll(){returncake.values();}// 根据指定的id获蛋糕 public static Cake getCake(Stringid){returncake.get(id);}}创建完后如下:
2.创建Servlet类
首先创建第一个Servlet类,用于展示所有可购买蛋糕的列表,通过点击 ”点击购买“按钮,便可以将指定蛋糕添加到购物车中。
先新建一个文件夹,右击session文件夹,选择New—>package
名称为 servlet
然后右击 servlet,选择New—>Create New Servlet,名字为ListCakeServlet
代码参考如下:
package cn.itcast.session.servlet;importcn.itcast.session.entity.Cake;importcn.itcast.session.entity.CakeDB;importjava.io.*;importjava.util.Collection;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;@WebServlet(name="ListCakeServlet",urlPatterns="/ListCakeServlet")public class ListCakeServlet extends HttpServlet{private static final long serialVersionUID=1L;public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{resp.setContentType("text/html; charset=utf-8");PrintWriter out=resp.getWriter();Collection<Cake>cakes=CakeDB.getAll();out.write("本站提供的蛋糕有:<br>");for(Cake cake:cakes){String url="PurchaseServlet?id="+ cake.getId();out.write(cake.getName()+"<a href='"+ url +"'>点击购买</a><br>");}}}再创建一个servlet,名字为PurchaseServlet
package cn.itcast.session.servlet;importcn.itcast.session.entity.Cake;importcn.itcast.session.entity.CakeDB;importjava.io.IOException;importjava.util.*;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;@WebServlet(name="PurchaseServlet",urlPatterns="/PurchaseServlet")public class PurchaseServlet extends HttpServlet{private static final long serialVersionUID=1L;public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{// 获得用户购买的商品 Stringid=req.getParameter("id");if(id==null){// 如果id为null,重定向到ListBookServlet页面 String url="ListBookServlet";resp.sendRedirect(url);return;}Cake book=CakeDB.getCake(id);// 创建或者获得用户的Session对象 HttpSession session=req.getSession();// 从Session对象中获得用户的购物车 List<Cake>cart=(List)session.getAttribute("cart");if(cart==null){// 首次购买,为用户创建一个购物车(List集合模拟购物车)cart=new ArrayList<Cake>();// 将购物城存入Session对象 session.setAttribute("cart", cart);}// 将商品放入购物车 cart.add(book);// 创建Cookie存放Session的标识号 Cookie cookie=new Cookie("JSESSIONID", session.getId());cookie.setMaxAge(60*30);cookie.setPath("/Servlet");resp.addCookie(cookie);// 重定向到购物车页面 String url="CartServlet";resp.sendRedirect(url);}}最后创建一个Servlet,名字为CartServlet
package cn.itcast.session.servlet;importcn.itcast.session.entity.Cake;importjava.io.*;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.*;@WebServlet(name="CartServlet",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<Cake>cart=null;// 变量pruFlag标记用户是否买过商品 boolean purFlag=true;// 获得用户的session HttpSession session=req.getSession(false);// 如果session为null,purFlag置为falseif(session==null){purFlag=false;}else{// 获得用户购物车 cart=(List)session.getAttribute("cart");// 如果用的购物车为null,purFlag置为falseif(cart==null){purFlag=false;}}/* * 如果purFlag为false,表明用户没有购买蛋糕 重定向到ListServlet页面 */if(!purFlag){out.write("对不起!您还没有购买任何商品!<br>");}else{// 否则显示用户购买蛋糕的信息 out.write("您购买的蛋糕有:<br>");double price=0;for(Cake cake:cart){out.write(cake.getName()+"<br>");}}}}创建完后如下:
3.测试效果
先访问蛋糕列表
http://localhost:8080/Servlet01_war_exploded/ListCakeServlet
后续查看全文:https://www.longkui.site/program/java/idea2020sevletsession3/7204/