博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb——使用会话维持状态2
阅读量:4683 次
发布时间:2019-06-09

本文共 4940 字,大约阅读时间需要 16 分钟。

  在这次的例子里面,将完成一类似购物车的功能,在客户访问网站的时候,会选中自己将要购买的商品,而购物车将始终维持着商品的状态,会话将联系起选择第一个商品(第一个请求),选择其他商品(其他请求)以及付款等等操作。

1、在Web.xml中配置会话

30
true
COOKIE

  使用这样的设置,会话超过30分钟将会失效,使用cookie进行会话追踪,在会话cookie从将HttpOnly置为true用于解决安全问题。

 

2、页面逻辑

  这个demo只有两个网页,以下是这两个网页预览:

  • 第一页商品列表页面将拥有一个点击进入购物车的链接View Cart,和一个商品列表,商品的名字可点击,点击之后将把该商品加入购物车。

  • 这是购物车页面的预览,这里将有一个返回商品列表页面的链接,然后是一个点击之后清空购物车的Empty Cart,再然后就是显示购物车中商品及其数目的列表。

 

 3、JSP

  • 先是商品列表页面,View Cart被点击之后,action将被置于viewCart这个变量将在doGet方法中使用,这里使用了一个map记录了商品的编号和名字,点击后action将被置于addToCart,productId将赋值为商品的id
<%@ page import="java.util.Map" %>            Product List                

Product List

">View Cart
<% @SuppressWarnings("unchecked") Map
products = (Map
)request.getAttribute("products"); for(int id : products.keySet()) { %>
"><%= products.get(id) %>
<% } %>
  • 这是购物车页面的JSP,这里使用的有两个map,products是记录商品的id和名字,cart记录商品的id和已选数,然后是两个链接,第一个链接将直接返回商品链表页面,第二个将清空购物车,具体实现是将action赋值为emptyCart,然后交由Servlet操作。
<%@ page import="java.util.Map" %>            View Cart                

View Cart

">Product List
">Empty Cart
<% @SuppressWarnings("unchecked") Map
products = (Map
)request.getAttribute("products"); @SuppressWarnings("unchecked") Map
cart = (Map
)session.getAttribute("cart"); if(cart == null || cart.size() == 0) out.println("Your cart is empty."); else { for(int id : cart.keySet()) { out.println(" "+products.get(id) + " (qty: " + cart.get(id) + ")
"); } } %>

 

4、代码逻辑

  • 首先是doGet,根据actiond的值将调用不同的方法
@Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        String action = req.getParameter("action");        if(action == null){            action = "browse";        }        switch (action){            case "addToCart":                //将商品加入购物车中                this.addToCart(req,resp);                break;            case "viewCart":                //进入购物车页面                this.viewCart(req,resp);                break;            case "emptyCart":                //清空购物车                this.emptyCart(req,resp);                break;            case "browse":            default:                //进入商品列表页面                this.browse(req,resp);                break;        }    }
  • 这两个方法将直接把请求转发给JSP并传递products这个map对象,
private void viewCart(HttpServletRequest req, HttpServletResponse resp)            throws ServletException,IOException {        req.setAttribute("products",this.products);        req.getRequestDispatcher("/WEB-INF/jsp/view/viewCart.jsp")                .forward(req,resp);    }    private void browse(HttpServletRequest req, HttpServletResponse resp)            throws ServletException,IOException {        req.setAttribute("products",this.products);        req.getRequestDispatcher("/WEB-INF/jsp/view/browse.jsp")                .forward(req,resp);    }
  • addToCart方法将把请求中的商品加入购物车中,首先从请求头中获取到商品的id,然后调用HttpServletRequest的getSession方法获取会话,getSession有两种方式:getSession()和getSession(boolean)。也就是说其实可以选择不输入参数和输入true或者false三种,其中getSession()和getSession(true)效果是一样的,如果会话存在就返回已有会话,如果会话不存在就创建一个新的会话(并不会返回null),而getSession(false)如果会话存在就返回会话,如果不存在就返回null。然后查询会话中的cart特性,如果不存在就添加cart特性,cart其实一个根据id存储商品数目的map,如果cart中没有该商品数目最终就置1,如果有将加1。
private void addToCart(HttpServletRequest req, HttpServletResponse resp)            throws ServletException,IOException {        int productId;        try {            productId = Integer.parseInt(req.getParameter("productId"));        }catch (Exception e){            resp.sendRedirect("shop");            return;        }        HttpSession session = req.getSession();        if(session.getAttribute("cart") == null){            session.setAttribute("cart", new Hashtable
()); } Map
cart = (Map
)session.getAttribute("cart"); if(!cart.containsKey(productId)){ cart.put(productId,0); } cart.put(productId,cart.get(productId) + 1); resp.sendRedirect("shop"); }
  • 最后是清空购物车的emptyCart方法,这里将删除会话中的cart,从而实现清空购物车的功能
private void emptyCart(HttpServletRequest req, HttpServletResponse resp)            throws ServletException,IOException {        req.getSession().removeAttribute("cart");        resp.sendRedirect("shop?action=viewCart");    }

 

转载于:https://www.cnblogs.com/xxbbtt/p/8399077.html

你可能感兴趣的文章
MVC弹出子页面向父页面传值
查看>>
用shell定义和访问数组
查看>>
KNN算法原理以及代码实现
查看>>
解读typescript中 super关键字的用法
查看>>
指定IE7(或其他版本)如何访问?
查看>>
iframe 自动适应页面高度
查看>>
eclipse环境下基于tomcat-7.0.82构建struts2项目
查看>>
input标签附带提示文字(bootstrap里面输入框的两侧同时添加额外元素)
查看>>
VHDL硬件描述语言学习笔记---VHDL语言要素
查看>>
某种密码(搜索专练)
查看>>
【BZOJ5305】【HAOI2018】—苹果树(组合数学)
查看>>
【BZOJ3821】【UOJ#46】【清华集训2014】—玄学(线段树分治)
查看>>
【leetcode 简单】 第八十三题 反转字符串中的元音字母
查看>>
【leetcode 简单】 第一百零八题 找到所有数组中消失的数字
查看>>
引用同一解决方案的类库工程不成功
查看>>
[转]单例模式中为什么用枚举更好
查看>>
selenium 获取断言信息
查看>>
c# 模拟get请求例子,演示Session会话状态。
查看>>
[.net 面向对象程序设计深入](0) 开篇
查看>>
C 多线程学习
查看>>