zoukankan      html  css  js  c++  java
  • 16_会话技术_Session案例

    【购物车中的信息保存】

    【Book.java】

    package com.Higgin.shopping;
    
    public class Book {
        private String id;
        private String name;
        private String author;
        private double price;
        
        public Book(String id, String name, String author, double price) {
            this.id = id;
            this.name = name;
            this.author = author;
            this.price = price;
        }
        
        //忽略get/Set方法
    }

    【Db.java】  模拟数据库

    package com.Higgin.shopping;
    
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    import org.junit.Test;
    
    /**
     *  模拟一个保存Book的数据库 
     */
    public class Db {
        private static Map<String,Book> map=new LinkedHashMap<String,Book>();
        
        static{
            map.put("1", new Book("1","《spring实战》","沃尔斯 (Craig Walls)",66));
            map.put("2", new Book("2","《大型分布式网站架构设计与实践》","陈康贤",79));
            map.put("3", new Book("3","《一线架构师实践指南》","温昱",35));
            map.put("4", new Book("4","《高性能网站构建实战》","刘鑫",88));
            map.put("5", new Book("5","《淘宝技术这十年》","子柳",45));
        }
        
        public static Map getAll(){
            return map;
        }
        
        
        @Test
        public void test(){
            Map<String,Book> map=Db.getAll();  //获取模拟数据库Db的所有Book数据
            for(Map.Entry<String, Book> entry:map.entrySet()){
                Book book=entry.getValue();
                System.out.println(book.getName()+"<a href='BuyServlet?id="+book.getId()+"' target='_blank' >购买</a><br/>");
            }
        }
    }

    【ListBookServlet.java】 商品列表购买页面

    package com.Higgin.shopping;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 购买页面
     * 模拟网站首页  列出所有书本
     */
    @WebServlet("/ListBookServlet")
    public class ListBookServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        public ListBookServlet() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out =response.getWriter();
            
            out.println("本站有如下书籍:<br/>");
            Map<String,Book> map=Db.getAll();  //获取模拟数据库Db的所有Book数据
            for(Map.Entry<String, Book> entry:map.entrySet()){
                Book book=entry.getValue();
                //点击"购买"后跳转至 BuyServlet处理,并带上对应的书本Id
                out.print(book.getName()+"<a href='BuyServlet?id="+book.getId()+"' target='_blank' >购买</a><br/>");
            }
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        }
    
    }

    【BuyServlet.java】 点击购买之后

    package com.Higgin.shopping;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    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("/BuyServlet")
    public class BuyServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        public BuyServlet() {
            super();
        }
    
        //ListBookServlet点击购买后跳转到这里
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            String id=request.getParameter("id"); //获取书本的Id
            Book book=(Book) Db.getAll().get(id);  //根据Id查找"数据库"对应的书,即本次购买的书
            
            HttpSession session=request.getSession();
            
            //从Session得到用户用于保存所有书的集合(购物车)
            List<Book> list = (List) session.getAttribute("listBook");  //首次购买这里没有数据
            if(list==null){   //如果是首次购买
                list=new ArrayList();  //新建一个List
                session.setAttribute("listBook", list);  //将购买的书本放入Session
            }
            list.add(book);   //每多购买一本,就在List中多添加一本书
            //request.getRequestDispatcher("/ListCarServlet").forward(request, response);  //转发会导致页面在刷新时,不断购买刚刚购买的商品
            response.sendRedirect(request.getContextPath()+"/ListCarServlet");  //重定向:可以避免刷新时重复购买的情况
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        }
    
    }

    【ListCarServlet.java】  购物车页面(点击购买了多少书本,就展示多少书本)

    package com.Higgin.shopping;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    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("/ListCarServlet")
    public class ListCarServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        public ListCarServlet() {
            super();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out =response.getWriter();
            
            HttpSession session =request.getSession(false); //获取Session
            if(session==null){  //如果Session中为空
                out.write("您没有购买任何商品!!!");
                return ;
            }
            
            out.write("您购买了如下商品:<br/>");
            List<Book> list=(List) session.getAttribute("listBook");  //如果Session不为空,提取对应的Session中的数据
            for(Book book:list){
                out.write(book.getName()+"<br/>");   //将提取的数据进行展示
            }
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        }
    
    }

    【运行结果】

    [1. 进入 http://localhost:8080/HelloServlet/ListBookServlet]

    [2.点击购买]

    [ 3.再点 ]

  • 相关阅读:
    tableView滑动时cell消失
    收集别人写的很好的关于多线程的文章
    scroll或是其子类被添加进view时,界面自动上移
    runtime之实现对象序列化
    runtime之方法的交换
    升级mac中的系统之后,给PHP安装扩展常出现问题
    ubuntu下搭建Scrapy框架简单办法
    CuDA的快速下载链接
    windows下Scrapy爬虫框架环境搭建
    windows下安装pywin32报错:close failed in file object destructor:sys.excepthook is missing lost sys.stderr
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5998431.html
Copyright © 2011-2022 走看看