学长今天告诉我 Java Web会话技术Session的简单使用

本文介绍了Java Web中的Session技术,它通过服务端存储信息并利用Cookie传递Session ID。每个Session可以有多个属性,文章通过代码示例展示了Session的工作原理,以及如何在不同客户端之间创建和使用Session。
摘要由CSDN通过智能技术生成

什么是Session

Session技术是将信息保存在服务端,而客户端需要接收、记录和回送Session的ID,所以Session通常情况下是借助Cookie技术来传递ID给服务端的,服务端拿到session id之后查询内存中对应的记录。

一个客户端对应一个Session,而一个Session有多个Attribute,每一个Attribute有唯一的name。

编写代码证明提出的观点:

<pre class="brush:java;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; font-family: Monaco, Menlo, Consolas, &quot;Courier New&quot;, monospace; line-height: 30px; background: rgb(255, 255, 255); border-left: 3px solid rgb(108, 226, 108); border-radius: 4px !important; width: 640px; font-size: 14px; clear: both;">protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    HttpSession session = req.getSession();
    PrintWriter writer = resp.getWriter();
    // 给session绑定一个user对象
    session.setAttribute("user", new User(1, "kongsam"));
    List<String> users = new ArrayList<>();
    users.add("kongsam");
    users.add("xiaoming");
    users.add("xiaohong");
    // 给session绑定一个list数组
    session.setAttribute("list", users);
    // 最后打印输出
    writer.println("JSESSIONID = " + session.getId());
    writer.println("object => user = " + session.getAttribute("user").toString());
    for (String user : users) {
        writer.println("list => user = " + user);
    }
}
</pre>

两个不同的浏览器就是两个不同的客户端,这两个客户端对应不同的JSESSIONID。

Cookie的工作原理以及讲解请见上一篇文章

Session如何工作

在现实生活中,当你去理发店理发时,你可以选择在前台办理一张会员卡,前台工作人员将你的基本信息和之后的消费信息等都存储到店家电脑的硬盘上,在以后消费的时候你仅凭一张会员卡就可以查询到你所有的信息和消费记录。注意,这里的你是指客户端,前台(店家)指的是服务端。

结合代码理解Session

SessionDemo01是用来创建一个假的数据库,并且把这个数据库存放到Session中进行保管。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    HttpSession session = req.getSession();
    // 创建一个假数据库
    Map<String, VipUser> vipUsers = new HashMap<>();
    vipUsers.put("kongsam", new VipUser(1, "kongsam", "123", 50));
    vipUsers.put("xiaoming", new VipUser(2, "xiaoming", "123", 100));
    vipUsers.put("xiaohong", new VipUser(3, "xiaohong", "123", 200));
    // 将假数据库的数据存放到Session中
    session.setAttribute("vipUsers", vipUsers);
}

然后SessionDemo02用于访问Session里vipsUsers数据库,如果用户没有办理或者不存在该用户则为其注册一个新VIP。

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf-8");
    resp.setCharacterEncoding("utf-8");
    resp.setContentType("text/html;charset=utf-8");
    HttpSession session = req.getSession();
    // 获取username
    String username = req.getParameter("username");
    // 从Session中取出数据库
    Map<String, VipUser> maps = (Map<String, VipUser>) session.getAttribute("vipUsers");
    // 判断数据库中是否有和username匹配的用户
    if (maps.get(username) != null && maps.get(username).getUsername().equals(username)) {
        resp.getWriter().println(maps.get(username).getUsername() + "您好,您目前的积分是: " + maps.get(username).getPoints());
    } else {
        resp.getWriter().println("您还没有办理会员卡,前台正在为您办理中...,请刷新页面。");
        maps.put(username, new VipUser(1, username, "123", 50));
        session.setAttribute("vipUsers", maps);
    }
}

来看看效果吧!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java盘鱼宴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值