session服务端技术的应用练习一 购物车

Session
钝化: 服务器停止时 如果你的Session中保存了对象 并且该对象 实现了序列化接口 Serializable
系统会把你保存的Session 序列化到 服务器的work 文件夹 你的工程下.一个文件中

活化:当你重新启动了服务器 系统会重新把钝化下来的那个文件 加载回Session中

创建一个商品 书类

public class Book  implements Serializable{
    private static final long serialVersionUID = 1L;
            private String  id;
            private String  name;
            public Book() {
                super();
                // TODO Auto-generated constructor stub
            }
            public Book(String id, String name) {
                super();
                this.id = id;
                this.name = name;
            }
            public String getId() {
                return id;
            }
            public void setId(String id) {
                this.id = id;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            @Override
            public String toString() {
                return "Book [id=" + id + ", name=" + name + "]";
            }


}

模拟获取到的数据的信息.获取数据集合的方法.获取到集合中的元素一一对应的ID

public class BookUtil {
    //声明一个保存数的容器
    private static HashMap<String, Book> books = new HashMap<>();
    //添加 数据 
    static {
        books.put("1",new Book("1","葵花宝典"));
        books.put("2",new Book("2","葵花"));
        books.put("3",new Book("3","宝典"));
        books.put("4",new Book("4","花宝典"));
    }
    //获取集合的方法
    public static HashMap<String, Book> getBooks(){
        return books;
    }

    //按id 查找对应的书的方法
    public static Book findBookById(String id) {
        return books.get(id);
    }
}

//做一个商品列表 将 BookUtil 与Book联系起来

public class ShowAllBooks extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //设置响应编码格式
                response.setContentType("text/html;charset=UTF-8");
                //告诉服务器  请求的内容是什么编码格式的
                request.setCharacterEncoding("UTF-8");

                PrintWriter out = response.getWriter();
                 //利用 HashMap 来获取  getbook 这个 类中的内容
                HashMap<String, Book> books = BookUtil.getBooks();
                //利用 HashMap中的 keySet方法 遍历  getbook这个类中的 内容
                for (String key : books.keySet()) {
                        //获取遍历后 每个key的值 
                    Book book = books.get(key);

                    //利用resopnse 将响应到网页上
                    out.write("<a href='"+ request.getContextPath() +"/addBook?id="+book.getId()+"'>"+book.getName()+"</a><br>");
                }
                //添加查看购物车的链接
                out.write("<a href ='"+request.getContextPath()+"/ShowCar'>查看购物车</a>");
                //设置 Session 的有效时间 
                request.getSession().setMaxInactiveInterval(10);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

有了商品列表后要将商品添加到购物车中所以写一个商品的添加方法

public class AddBook extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应编码格式
        response.setContentType("text/html;charset=UTF-8");
        //告诉服务器  请求的内容是什么编码格式的
        request.setCharacterEncoding("UTF-8");
            //从请求中获取点击的那一本书(获取参数)
        String id = request.getParameter("id");
        //
        Book book = BookUtil.findBookById(id);
        //创建一个容器 (相当于购物车  保存买的书)   两种情况: 一 已经存过书了  二 没存过书
        HttpSession session = request.getSession();
        ArrayList<Book> car = (ArrayList<Book>)session.getAttribute("car");

        if (car==null) {
            // 相当于第一次访问  创建容器
            car = new ArrayList<>();
        }
        //把书添加到容器中
        car.add(book);
        //把这个容器添加到session中
        session.setAttribute("car", car);
        //显示添加成功

        //1秒后返回商品列表页
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

有了添加商品的方法,但是目前还没有购物车,所以要写一个购物车.并且要判断这个购物车中是否添加了商品 商品是否添加成功

public class ShowCar extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //设置响应编码格式
                response.setContentType("text/html;charset=UTF-8");
                //告诉服务器  请求的内容是什么编码格式的
                request.setCharacterEncoding("UTF-8");

                PrintWriter out = response.getWriter();
                //获取Session对象
                HttpSession session = request.getSession();
                //判断session中的数据是否为空
                ArrayList<Book> car = (ArrayList<Book>)session.getAttribute("car");
                if (car!=null) {
                    //遍历输出
                    for (Book book : car) {
                        out.write(book.getName()+"<br/>");
                    }
                }else {
                    out.write("购物车是空的");
                    //2秒跳回 商品列页面
                    response.setHeader("reftesh", "3;url = "+request.getContextPath()+"/ShowAllBooks");
                }



    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

上面写完后还要配置servlet路径 才可以运行

 <servlet>
  <servlet-name>ShowAllBooks</servlet-name>
  <servlet-class>com.lan3g.car.ShowAllBooks</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>ShowAllBooks</servlet-name>
  <url-pattern>/ShowAllBooks</url-pattern>
  </servlet-mapping>

  <servlet>
  <servlet-name>AddBook</servlet-name>
  <servlet-class>com.lan3g.car.AddBook</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>AddBook</servlet-name>
  <url-pattern>/addBook</url-pattern>
  </servlet-mapping>


   <servlet>
  <servlet-name>ShowCar</servlet-name>
  <servlet-class>com.lan3g.car.ShowCar</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>ShowCar</servlet-name>
  <url-pattern>/ShowCar</url-pattern>
  </servlet-mapping>

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值