Java Web基础练习

HttpSession 服务端的技术
1.Session服务器会为每一个用户创建独立的HttpSession

HttpSession原理
当用户第一次访问Servlet时 服务器端会给该用户创建一个独立Session
并且会生成一个SessionID
这个SessionID在响应浏览器的时候 会被装进cookie中
从而被保存到浏览器中
当用户再一次访问Servle的时候
请求中会携带者cookie中的 SessionID去访问
服务器会根据这个SessionID 去查看是否有对应的Session对象
有 就拿出来使用
没有 就创建一个Session(相当于第一次访问)

域的范围
Context域 > Session域 > Resquset域

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

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

模拟购物功能
需要的类
Book —> 书籍类(本应是数据库实现 现用类代替)
AddBook —> 把书添加到购物车里的类
BookUtil —> 模拟假数据 用一个容器能把Book类中的数据保存起来 并且有获取/查找等方法
ShowAllBooks —> 展示商品类
ShowCar —> 购物车界面类

Book类中只有书籍的基本属性 和无参/有参/get/set/toString方法
不贴出来了

AddBook类

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

// 获取点击是哪本书
String id = request.getParameter("id");
Book book = BookUtil.findBookById(id);
// 创建一个容器(相当于购物车 保存买的书)
// 两种情况 1.已经存过书 2.没存过
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);

// 显示添加成功
// 1s后返回商品列表页
}

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);
    }

ShowAllBooks类

response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");
        /*
         * 1.获取所有书
         * 2.遍历输出书名到网页上
         * 3.需要给书名添加一个连接(a标签)
         * 4.点击书名的时候 能知道是哪本
         */
        PrintWriter out = response.getWriter();
        HashMap<String,Book> books = BookUtil.getBooks();
        for (String key : books.keySet()) {
            Book book = books.get(key);
            // 响应到网页上
            out.write("<a href='"+ request.getContextPath() +"/addBook?id="+ book.getId()+"'>"+ book.getName() +"</a><br>");
        }
        // 添加查看购物车的链接
        out.write("<a href='"+ request.getContextPath() +"/showCar'>查看购物车</a><br>");

        // 设置session的有效时间
        request.getSession().setMaxInactiveInterval(10);
    }

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

ShowCar类

response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");

        // 获取session对象
        HttpSession session = request.getSession();
        PrintWriter out = response.getWriter();
        // 判断session中保存的数据是不是空的
        ArrayList<Book> car = (ArrayList<Book>)session.getAttribute("car");
        if (car != null) {
            // 遍历输出
            for (Book book : car) {
                out.write(book + "<br/>");
            }
        }else {
            out.write("您的购物车空无一物");
            // 2s跳回商品列表页面
            response.setHeader("refresh", "2;url="+request.getContextPath()+"/showAllBooks");
        }

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值