Cookie实现购物车

@Controller
public class TzController {
    /*
    * GLW
    * */
    @Autowired
  private   ShopService shopService;
    private ObjectMapper mapper=new ObjectMapper();
    private  Cookie cookie=new Cookie("Cart","");

      @GetMapping("/login")
    public String Tzlogin(){

          return "login";
      }
      @GetMapping("/tes")
      public String tes(HttpServletRequest request,HttpServletResponse response) throws JsonProcessingException, UnsupportedEncodingException {
          Boolean b1=true;
          Cookie cookies=new Cookie("ad","sss");
          response.addCookie(cookies);
          Cookie[] sb=request.getCookies();
          //判断是否有名为Cart的cookie 没有就进行创建
          for(int i=0;i<sb.length;i++){
              if(sb[i].getName().equals("Cart")){
                  b1=false;
                  break;
              }else {
                  b1=true;
              }
          }    System.out.println(b1+"b1");
          if(b1==true){
              //页面加载时就创建一个名字为Cookie路径为/的cookie,如果两个Cookie的名字相同访问路径不同是不会进行覆盖的
              System.out.println("aaaa");
              Map<Integer,Shop> mpp=new HashMap<>();
              String mpstring=   mapper.writeValueAsString(mpp);
              String fom=URLEncoder.encode(mpstring,"utf-8");
              cookie=new Cookie("Cart",fom);
              cookie.setPath("/");
              response.addCookie(cookie);
          }
          return "login";
      }
    @GetMapping("/addcart/{id}")
    public String AddCart(@PathVariable("id") Integer sid, HttpServletRequest request, HttpServletResponse response) throws IOException, JsonProcessingException {
            //根据传过来的SID查询数据库的对应商品
          Shop s1= shopService.selShopByid(sid);
          //创建一个MAP
        Map<Integer,Shop> mpp=new HashMap<>();
       //数据库中没有这个字段 手动设置数量为1
        s1.setNum(1);
        //获取cookie数组遍历判断名字为Cart的cookie
        for(Cookie c1 : request.getCookies()){
        if("Cart".equals(c1.getName())){
                     //mpp=mapper.readValue(URLDecoder.decode(c1.getValue(), "utf-8"),Map.class);
            System.out.println("-------------------------");
                 //找到后利用JACKSON转为Map
                   mpp = mapper.readValue(URLDecoder.decode(c1.getValue(), "utf-8"), new TypeReference<Map<Integer,Shop>>(){});
                //取完数据后让此Cookie立刻过期
                   c1.setMaxAge(0);
        }
        }
        //遍历刚才的MAP
        for(Object key : mpp.keySet()){
            Integer k=Integer.parseInt(""+key);
            //判断购物车中是否有这个商品
            if(k==sid){
                //有就让数量+1
                s1.setNum(mpp.get(key).getNum()+1);
            }
            //因为MAP会将KEY相同的覆盖所以没有else
        }
        //添加进Map
        mpp.put(sid,s1);
        //再将MAP用JACKSON转换为JSON字符串
        String mpstring=   mapper.writeValueAsString(mpp);
        //编码为Cookie所支持的
        String fom=URLEncoder.encode(mpstring,"utf-8");
        //创建cookie
        cookie=new Cookie("Cart",fom);
        //设置访问路径为根路径,不然跨页面无法访问(此操作会将用来初始化的cookie覆盖达到更新的目的)
        cookie.setPath("/");
        //利用响应对象添加cookie
        response.addCookie(cookie);//        String sw="";
       /*
       *cookie是这样的,因为需要在客户端保存,所以刚设置后直接读是不存在的,需要完成一次与客户端浏览器的交互后, 浏览器保存后,再读才可以
       * */
        //所以这里遍历出来的是你上一次操作的时间段里面装的数据
      for(Cookie cookie : request.getCookies()){
            if(cookie.getName().equals("Cart")){
                System.out.println("dd"+mapper.readValue(URLDecoder.decode(cookie.getValue(), "utf-8"),Map.class));
            }
       }
       return "index";
    }

      @Autowired
      private UserinfoService service;
    @RequestMapping("/index")
    public String Tzindex(HttpServletRequest request){
        if(request.getSession().getAttribute("user")!=null){

        return "index";
        }else {

            return "login";
        }
      }

    @GetMapping("/hf")
    public String Tzhf(HttpServletRequest request){
        if(request.getSession().getAttribute("user")!=null) {
            return "hf";
        }else {

            return "login";
        }
    }
    @GetMapping("/ly")
    public String tzly(HttpServletRequest request){
         UserInfo u1=(UserInfo) request.getSession().getAttribute("user");
        if(u1!=null) {
            request.setAttribute( "users",service.selallnotMy(u1.getUid()));
            return "ly";


        }else {

            return "login";
        }
    }
    @GetMapping("/car")
    public String car(){
        return "Carts";

    }

  
   


}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值