JavaWeb-Session基礎舉例

Session

1.會話

會話:指用戶打開了一個瀏覽器,點擊了很多超鏈接,訪問了多個Web資源,後關閉瀏覽器,這個過程可以稱之爲“會話”。

有狀態的會話:例如一個學生來過咱們班的教室,下次再來的時候,我們就能記住他來過。這個就是有狀態的會話。

Eg:

一個網站如何證明你來過?

客戶端<——>服務端

1.服務端會給客戶一個 信件,客戶端下次訪問的時候,帶上這個信件,就可以被認出來了。(Cookie)。

2.服務器登記你來過了,下次再訪問的時候,會自動匹配你(Session)。

2.保存會話的兩種技術:

Cookie:

  • 客戶端技術(具有響應,請求)

Session:

  • 服務器技術,利用此技術,我們可以保存,用戶的會話信息,我們可以把信息或者數據放在Session中。

常見場景:

網站登錄後,關閉瀏覽器再打開此網頁,一般情況下第二次進入都不用再次登錄了,賬戶信息會被記住。

3.Session(重點!!!)

什麼是Session:

在這裏插入圖片描述

  • 服務器會給每一個用戶創建一個Session對象。

  • 一個Session獨佔一個瀏覽器,只要瀏覽器沒有關,這個Session就一直存在。

在這裏插入圖片描述

  • 用戶登錄之後,整個網站的子頁面都是可以訪問的。Eg:保存用戶信息;保存購物車信息……

在這裏插入圖片描述

對比Session和Cookie:

  • Cookie是把用戶的數據寫給用戶的瀏覽器,瀏覽器保存。(可以保存多個)

  • Session是把用戶的數據寫到用戶的Session中,由服務器創建,服務器端保存。(應僅保存重要的信息,避免造成服務器端的資源浪費)

使用場景:

  • 保存一個用戶登錄的信息。(用戶登錄;購物車等)

  • 在整個網站中經常會使用的數據,我們將其保存在Session中。

代碼分析:

文件排序:
在這裏插入圖片描述

web.xml:

<servlet>
    <servlet-name>Session1</servlet-name>
    <servlet-class>com.edwin.servlet.SessionDemo01</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Session1</servlet-name>
    <url-pattern>/Session1</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Session2</servlet-name>
    <servlet-class>com.edwin.servlet.SessionDemo02</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Session2</servlet-name>
    <url-pattern>/Session2</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Session3</servlet-name>
    <servlet-class>com.edwin.servlet.SessionDemo03</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Session3</servlet-name>
    <url-pattern>/Session3</url-pattern>
</servlet-mapping>

Session01:

package com.edwin.servlet;

import com.edwin.pojo.Person;

import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
/
 * @author Edwin D
 * @date 2020.6.6 上午 11:11
 */
public class SessionDemo01 extends HttpServlet {
    @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");

//        得到Session
        HttpSession session = req.getSession();

//        給Session存東西。
        session.setAttribute("name",new Person("Edwin 段",17));

//        獲取Session的Id
        String sessionId = session.getId();

//        判斷Session是不是新創建的
        if (session.isNew()) {
            resp.getWriter().write("Session創建成功,其Id爲:" + sessionId);
        } else {
            resp.getWriter().write("Session已經存在了!其Id爲:" + sessionId);
        }

//        Session創建的時候,做了什麼事?
//        Cookie cookie = new Cookie("JSESSIONID", sessionId);
//        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

在這裏插入圖片描述

Session02:

package com.edwin.servlet;

import com.edwin.pojo.Person;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/
 * @author Edwin D
 * @date 2020.6.6 下午 9:23
 */
public class SessionDemo02 extends HttpServlet {
    @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");

//        得到Session
        HttpSession session = req.getSession();
        Person person = (Person) session.getAttribute("name");
        System.out.println(person.toString());

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

在這裏插入圖片描述
Session03:

package com.edwin.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/
 * @author Edwin D
 * @date 2020.6.6 下午 9:50
 */
public class SessionDemo03 extends HttpServlet {
//    清空Session
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.removeAttribute("name");
//        註銷原有的SessionID,但是會立刻生成了一個新的。
        session.invalidate();
        System.out.println("註銷了原有Session");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

使用後再訪問Session02:

在這裏插入圖片描述
後臺:

在這裏插入圖片描述

自動註銷的XML配置:

<!--設置Session默認失效的時間-->
<session-config>
    <!--以分鐘爲單位,這裏是設置爲17分鐘後自動更換Session-->
    <session-timeout>17</session-timeout>
</session-config>

效果對比:

在這裏插入圖片描述

1Min後:

在這裏插入圖片描述

後期的學習:

在這裏插入圖片描述

路漫漫其修遠兮,吾將上下而求索。

參考文獻

《【狂神說Java】JavaWeb入門到實戰》

視頻連接

2020.06.07

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章