Java Web會話技術Session的簡單使用
什么是Session
Session技術是將信息保存在服務端,而客戶端需要接收、記錄和回送Session的ID,所以Session通常情況下是借助Cookie技術來傳遞ID給服務端的,服務端拿到session id之后查詢內(nèi)存中對應的記錄。
一個客戶端對應一個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數(shù)組 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.dbjr.com.cn/article/212734.htm
Session如何工作
在現(xiàn)實生活中,當你去理發(fā)店理發(fā)時,你可以選擇在前臺辦理一張會員卡,前臺工作人員將你的基本信息和之后的消費信息等都存儲到店家電腦的硬盤上,在以后消費的時候你僅憑一張會員卡就可以查詢到你所有的信息和消費記錄。注意,這里的你是指客戶端,前臺(店家)指的是服務端。
結(jié)合代碼理解Session
SessionDemo01是用來創(chuàng)建一個假的數(shù)據(jù)庫,并且把這個數(shù)據(jù)庫存放到Session中進行保管。
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); // 創(chuàng)建一個假數(shù)據(jù)庫 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)); // 將假數(shù)據(jù)庫的數(shù)據(jù)存放到Session中 session.setAttribute("vipUsers", vipUsers); }
然后SessionDemo02用于訪問Session里vipsUsers數(shù)據(jù)庫,如果用戶沒有辦理或者不存在該用戶則為其注冊一個新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中取出數(shù)據(jù)庫 Map<String, VipUser> maps = (Map<String, VipUser>) session.getAttribute("vipUsers"); // 判斷數(shù)據(jù)庫中是否有和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的簡單使用的詳細內(nèi)容,更多關于Java Session的使用的資料請關注腳本之家其它相關文章!
相關文章
深入探究Bean生命周期的擴展點Bean Post Processor
在Spring框架中,Bean生命周期的管理是非常重要的一部分,在Bean的創(chuàng)建、初始化和銷毀過程中,Spring提供了一系列的擴展點,其中,Bean Post Processor(后處理器)是一個重要的擴展點,它能夠在Bean的初始化前后做一些額外的處理,本文就和大家一起深入探究2023-07-07Java攔截過濾器模式 (Intercepting Filter )實現(xiàn)方法
攔截過濾器模式(Intercepting Filter Pattern)用于對應用程序的請求或響應做一些預處理/后處理,本文通過實例代碼介紹Java攔截過濾器模式 (Intercepting Filter )的相關知識,感興趣的朋友跟隨小編一起看看吧2024-03-03使用Spring Initializr方式如何快速構(gòu)建Spring Boot項目
Spring lnitializr是一個Web應用,它提供了一個基本的項目結(jié)構(gòu),能夠幫助我們快速構(gòu)建一個基礎的Spring Boot項目,本文分步驟講解如何使用Spring Initializr方式構(gòu)建Spring Boot項目,感興趣的朋友跟隨小編一起看看吧2023-08-08java實現(xiàn)Yaml轉(zhuǎn)Json示例詳解
這篇文章主要為大家介紹了java實現(xiàn)Yaml轉(zhuǎn)Json示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02Java利用Request請求如何獲取IP地址對應的省份、城市詳解
之前已經(jīng)給大家介紹了關于Java用Request請求獲取IP地址的相關內(nèi)容,那么下面這篇文章將給大家進入深入的介紹,關于Java利用Request請求如何獲取IP地址對應省份、城市的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-10-10