Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】(二)

简介: Session 是另一种记录浏览器状态的机制。不同的是Cookie保存在浏览器中,Session保存在服务器中。用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是Session

使用Session完成简单的购物功能

  • 我们还是以书籍为例,所以可以copy“显示浏览过的商品“例子部分的代码。
response.setContentType("text/html;charset=UTF-8");
        PrintWriter printWriter = response.getWriter();
        printWriter.write("网页上所有的书籍:" + "<br/>");
        //拿到数据库所有的书
        LinkedHashMap<String, Book> linkedHashMap = DB.getAll();
        Set<Map.Entry<String, Book>> entry = linkedHashMap.entrySet();
        //显示所有的书到网页上
        for (Map.Entry<String, Book> stringBookEntry : entry) {
            Book book = stringBookEntry.getValue();
            String url = "/ouzicheng/Servlet6?id=" + book.getId();
            printWriter.write(book.getName());
            printWriter.write("<a href='" + url + "'>购买</a>");
            printWriter.write("<br/>");
        }

在购物车页面上,获取到用户想买的书籍【用户可能不单想买一本书,于是乎,就用一个List容器装载书籍】,有了:先遍历Cookie,再判断是否是第一次访问Servlet的逻辑思路,我们就可以先获取到Session的属性,如果Session的属性为null,那么就是还没有该属性

//得到用户想买书籍的id
        String id = request.getParameter("id");
        //根据书籍的id找到用户想买的书
        Book book = (Book) DB.getAll().get(id);
        //获取到Session对象
        HttpSession httpSession = request.getSession();
        //由于用户可能想买多本书的,所以我们用一个容器装着书籍
        List list = (List) httpSession.getAttribute("list");
        if (list == null) {
            list = new ArrayList();
            //设置Session属性
            httpSession.setAttribute("list",list);
        }
        //把书籍加入到list集合中
        list.add(book);

按我们正常的逻辑思路:先创建一个ArrayList对象,把书加到list集合中,然后设置Session的属性。这样是行不通的。每次Servlet被访问的时候都会创建一个ArrayList集合,书籍会被分发到不同的ArrayList中去。所以下面的代码是不行的!

//得到用户想买书籍的id
        String id = request.getParameter("id");
        //根据书籍的id找到用户想买的书
        Book book = (Book) DB.getAll().get(id);
        //获取到Session对象
        HttpSession httpSession = request.getSession();
        //创建List集合
        List list = new ArrayList();
        list.add(book);
        httpSession.setAttribute("list", list);

既然用户已经购买了书籍,那么也应该给提供页面显示用户购买过哪些书籍

//得到用户想买书籍的id
        String id = request.getParameter("id");
        //根据书籍的id找到用户想买的书
        Book book = (Book) DB.getAll().get(id);
        //获取到Session对象
        HttpSession httpSession = request.getSession();
        //由于用户可能想买多本书的,所以我们用一个容器装着书籍
        List list = (List) httpSession.getAttribute("list");
        if (list == null) {
            list = new ArrayList();
            //设置Session属性
            httpSession.setAttribute("list",list);
        }
        //把书籍加入到list集合中
        list.add(book);
        String url = "/ouzicheng/Servlet7";
        response.sendRedirect(url);

列出用户购买过的书籍

   //要得到用户购买过哪些书籍,得到Session的属性遍历即可
        HttpSession httpSession = request.getSession();
        List<Book> list = (List) httpSession.getAttribute("list");
        if (list == null || list.size() == 0) {
            printWriter.write("对不起,你还没有买过任何商品");
        } else {
            printWriter.write("您购买过以下商品:");
            printWriter.write("<br/>");
            for (Book book : list) {
                printWriter.write(book.getName());
                printWriter.write("<br/>");
            }
        }
  • 效果如下

42.jpg

目录
相关文章
|
3月前
|
JavaScript Java 容器
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
本文简要回顾了Servlet过滤器Filter的概念和使用,通过实例演示了如何创建过滤器以过滤请求字符编码,并解释了在web.xml中配置过滤器时使用`/`、`/*`和`/**`的区别。
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
|
2月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
199 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
2月前
|
安全 测试技术 API
优化 API 生命周期的 5 个关键领域
您是否曾遇到过令人沮丧的 API 文档?或为版本控制问题而苦恼?或为集成难题而苦恼?这些只是困扰 API 开发领域的一些常见挑战。
|
3月前
|
Java 应用服务中间件 数据库连接
探索研究Servlet 生命周期
【9月更文挑战第22天】
56 7
|
2月前
|
监控 API 数据安全/隐私保护
2024年开源API工具盘点,覆盖API全生命周期
2024年经济持续低迷,本文整理一些免费的开源工具,旨在帮助企业组织降低工具的支出成本,能用免费的何必用付费的呢(狗头)?
89 0
|
3月前
|
存储 安全 搜索推荐
探索研究Servlet Session 跟踪
【9月更文挑战第27天】
24 0
|
3月前
|
存储 搜索推荐 UED
探索研究Servlet Cookie 处理
【9月更文挑战第25天】
41 0
|
5月前
|
Java 数据库连接 开发者
Java中的Servlet生命周期详解
Java中的Servlet生命周期详解
|
5月前
|
XML Java 数据格式
jsp和servlet有什么区别?
总的来说,JSP和Servlet都是创建动态Web应用程序的重要工具,但它们的使用依赖于特定的需求和上下文。
45 0
|
5月前
|
XML Java 数据格式
jsp和servlet有什么区别?
总的来说,JSP和Servlet都是创建动态Web应用程序的重要工具,但它们的使用依赖于特定的需求和上下文。
44 0