Java Web会话技术Session的简单使用
什么是Session
Session技术是将信息保存在服务端,而客户端需要接收、记录和回送Session的ID,所以Session通常情况下是借助Cookie技术来传递ID给服务端的,服务端拿到session id之后查询内存中对应的记录。
一个客户端对应一个Session,而一个Session有多个Attribute,每一个Attribute有唯一的name。
编写代码证明提出的观点:
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);
}
}
两个不同的浏览器就是两个不同的客户端,这两个客户端对应不同的JSESSIONID。
Cookie的工作原理以及讲解请见://www.jb51.net/article/212734.htm
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);
}
}
来看看效果吧!
以上就是Java Web会话技术Session的简单使用的详细内容,更多关于Java Session的使用的资料请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341