Java 之 HttpSession

HttpSession

/*
 * HttpSession 服务端的技术
 * 服务器会为每一个用户创建一个独立的 session
 * 
 * HttpSession 原理
 * 当用户第一次访问 Servlet 时,服务器端对给该用户创建一个独立的 Session, 并且生成一个 SessionID
 * 这个 SessionID 在响应浏览器的时候,会被装进 cookie 中
 * 从而被保存到浏览器中
 * 当用户再一次访问 Servlet 的时候
 * 请求中会携带着 cookie 中的 SessionID 去访问
 * 服务器会根据这个 SessionID 去查看是否有对应的 Session 对象
 * 有,则直接调用
 * 无,则创建一个(相当于用户第一次访问)(看病案例)
 * 
 * 域的范围
 * Context 域 > Session 域 > Request 域
 * Session 域只要会话不结束就会存在,但是Session 域有默认存活时间-30分钟
 * 
 * 模拟购物功能
 * 大概需要几个页面来完成 --- 需要几个 Servlet 类
 * 需要3个 Servlet 类
 * session 中保存什么数据合适,添加一个保存书的容器
 * 书类:id,bookname
 * 模拟假数据,逻辑和功能跑通了,再连接数据库
 * 模拟假数据的类
 * map 集合 HashMap<String,Book>
 * 方法:根据 ID 获取对应的书
 */
@SuppressWarnings("serial")
public class Demo extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");

        // 获取参数
        String username = request.getParameter("username");

        // 获取 session 对象
        HttpSession session = request.getSession();
        // 保存数据
        session.setAttribute("username", username);
        // 打印 SessionID
        System.out.println(session.getId());
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
/*
 * 测试获取 session 域中的数据
 */
public class Demo extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        request.setCharacterEncoding("UTF-8");

        // 获取 session 域中的数据
        HttpSession session = request.getSession();
        String username = (String)session.getAttribute("username");
        // 响应到网页上
        response.getWriter().write(username + " " + session.getId());

    }

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

        // 获取 session 对象
        HttpSession session = request.getSession();
        ArrayList<Book> car = (ArrayList<Book>) session.getAttribute("car");
        PrintWriter out = response.getWriter();
        if (car != null) {
            // 遍历输出
            for (Book book : car) {
                out.write(book + "<br>");
            }
            out.write("<a href='" + request.getContextPath() + "/showallbooks'>会到商品页面</a>");
        } else {
            out.write("当前无任何商品");
            response.setHeader("refresh", "3;url=" + request.getContextPath() + "/showallbooks");
        }
    }

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

}


/*
 * 展示商品列表
 */
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");

        /*
         * 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() + "' name="
                    + book.getName() + ">" + book + "</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 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);
    }
}


/*
 * Session
 * 钝化
 * 服务器停止时
 * 如果你的 session 中保存了对象
 * 并且该对象实现了序列化接口 Serializable 
 * 系统会把你保存 session 序列化到服务器的 work 文件夹你的工程下一个文件
 * 活化
 * 当你重新启动了服务器,系统会重新把钝化的文件进行加载,加载回 session 中
 */
public class Book implements Serializable {
    /**
     * 序列化 id
     */
    private static final long serialVersionUID = 1L;
    private String id;
    private String name;

    public Book() {
        super();
    }

    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 id + " " + name;
    }

}


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);
        // 创建一个容器(相当于购物车,保存买的书)
        // 两种情况: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);
        // 显示添加成功
        // 1秒后返回商品列表页
        response.setHeader("refresh", "2;url=" + request.getContextPath() + "/showallbooks");
    }

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

}

http://blog.csdn.net/huzongnan/article/list

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值