鍍金池/ 教程/ Linux/ Servlet HttpSession會(huì)話
Servlet web.xml welcome-file-list
Servlet從數(shù)據(jù)庫(kù)讀取記錄性能優(yōu)化
Servlet URL重寫(xiě)帶參數(shù)
War文件
Web技術(shù)基礎(chǔ)
Servlet GenericServlet類
Servlet API
Servlet ServletInputStream類
使用MyEclipse創(chuàng)建Servlet
Servlet增刪改查
Servlet ServletConfig配置信息
Servlet Cookies
Servlet重定向
Servlet生命周期
Servlet HttpSession會(huì)話
Servlet HttpServlet類
Servlet注冊(cè)表單示例
Servlet表單隱藏字段
Servlet下載文件
Servlet教程
Servlet身份驗(yàn)證過(guò)濾器
Servlet ServletOutputStream類
Servlet HttpSession登錄注銷實(shí)例
Servlet啟動(dòng)時(shí)加載
Servlet事件和監(jiān)聽(tīng)器
使用Eclipse創(chuàng)建Servlet
Servlet ServletContextEvent事件
Servlet HttpSessionEvent統(tǒng)計(jì)在線用戶數(shù)實(shí)例
Servlet RequestDispatcher請(qǐng)求轉(zhuǎn)發(fā)
Servlet使用注釋
Servlet過(guò)濾器示例
Servlet過(guò)慮器
Servlet ServletContext配置信息
Servlet登錄注銷Cookies實(shí)例
Servlet工作流程
Servlet會(huì)話跟蹤
Servlet登錄實(shí)例
Servlet ServletRequest接口
Servlet ServletRequestEvent類和接口
Servlet入門程序
Servlet查詢搜索數(shù)據(jù)示例
Servlet FilterConfig應(yīng)用示例
Servlet顯示所有頭信息
Servlet屬性設(shè)置
使用NetBeans創(chuàng)建Servlet
Servlet接口實(shí)現(xiàn)
Servlet上傳文件

Servlet HttpSession會(huì)話

在本節(jié)中,我們將介紹Servlet中的HttpSession對(duì)象的使用,在應(yīng)用容器中,它為每個(gè)用戶創(chuàng)建會(huì)話ID。容器使用此標(biāo)識(shí)來(lái)識(shí)別特定的用戶。HttpSession的一個(gè)對(duì)象可用于執(zhí)行兩個(gè)任務(wù):

  1. 綁定對(duì)象
  2. 查看和操作有關(guān)會(huì)話的信息,如會(huì)話標(biāo)識(shí)符,創(chuàng)建時(shí)間和上次訪問(wèn)時(shí)間。

如何獲取HttpSession對(duì)象?

HttpServletRequest接口提供了兩種獲取HttpSession對(duì)象的方法:

  • public HttpSession getSession():返回與此請(qǐng)求相關(guān)聯(lián)的當(dāng)前會(huì)話,或者如果請(qǐng)求沒(méi)有會(huì)話,則創(chuàng)建一個(gè)會(huì)話。
  • public HttpSession getSession(boolean create): 返回與此請(qǐng)求相關(guān)聯(lián)的當(dāng)前HttpSession,如果沒(méi)有當(dāng)前會(huì)話,并且create的值為true,則返回一個(gè)新會(huì)話。

HttpSession接口的常用方法

  1. public String getId() - 返回一個(gè)包含唯一標(biāo)識(shí)符值的字符串。
  2. public long getCreationTime() - 返回創(chuàng)建此會(huì)話的時(shí)間,以1970年1月1日GMT格林尼治時(shí)間以來(lái)的毫秒為單位。
  3. public long getLastAccessedTime() - 返回客戶端發(fā)送與此會(huì)話相關(guān)聯(lián)的請(qǐng)求的最后一次,為1970年1月1日GMT以來(lái)的毫秒數(shù)。
  4. public void invalidate() - 使此會(huì)話無(wú)效,然后取消綁定綁定到該對(duì)象的任何對(duì)象。

HttpSession應(yīng)用示例

在本示例中,我們將在會(huì)話范圍中的屬性設(shè)置在一個(gè)servlet中,并從另一個(gè)servlet中的會(huì)話范圍獲取該值。要在會(huì)話范圍內(nèi)設(shè)置屬性,可使用HttpSession接口的setAttribute()方法設(shè)置屬性,并使用getAttribute()方法獲取屬性。

打開(kāi)Eclipse,創(chuàng)建一個(gè)動(dòng)態(tài)Web項(xiàng)目:HttpSession,其完整的目錄結(jié)構(gòu)如下所示 -

以下是這個(gè)項(xiàng)目中的幾個(gè)主要的代碼文件。

文件:index.html -

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HttpSession會(huì)話跟蹤示例</title>
</head>
<body>
    <div style="text-algin: center; padding-top: 12px;">
        <form action="servlet1" method="get">
            名字:<input type="text" name="username" value="maxsu"/><input type="submit"
                value="提交" />
        </form>
    </div>
</body>
</html>

文件:FirstServlet.java -

package com.yiibai;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class FirstServlet
 */
public class FirstServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        try {
            PrintWriter out = response.getWriter();
            String username = request.getParameter("username");
            out.print("你好, " + username);

            HttpSession session = request.getSession();
            session.setAttribute("username", username);
            session.setAttribute("age", "22");
            out.print("<hr/><a href='servlet2'>在第二個(gè)Servlet訪問(wèn)Session屬性值</a>");

            out.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }

}

文件:SecondServlet.java -

package com.yiibai;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class SecondServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        try {
            PrintWriter out = response.getWriter();
            HttpSession session = request.getSession(false);
            String n = (String) session.getAttribute("username");
            String age = (String) session.getAttribute("age");
            out.print("您好, " + n + " !<br/> ");
            out.print("你的年齡是: " + age + " 歲 ");
            out.close();

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

文件:web.xml -

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>HttpSession</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>serv1</servlet-name>
        <servlet-class>com.yiibai.FirstServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>serv1</servlet-name>
        <url-pattern>/servlet1</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>s2</servlet-name>
        <servlet-class>com.yiibai.SecondServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>s2</servlet-name>
        <url-pattern>/servlet2</url-pattern>
    </servlet-mapping>
</web-app>

在編寫(xiě)上面代碼后,部署此Web應(yīng)用程序(在項(xiàng)目名稱上點(diǎn)擊右鍵->”Run On Server…”),打開(kāi)瀏覽器訪問(wèn)URL: http://localhost:8080/HttpSession/ ,如果沒(méi)有錯(cuò)誤,應(yīng)該會(huì)看到以下結(jié)果 -

在上面輸入框中輸入:maxsu,提交應(yīng)該會(huì)看到以下結(jié)果 -

注意:此時(shí)FirstServletHttpSession的對(duì)象調(diào)用了setAttribute()方法,設(shè)置了兩個(gè)屬性:usernameage的值。

點(diǎn)擊上面的“在第二個(gè)Servlet訪問(wèn)Session屬性值”鏈接,可以看到讀取Session屬性的結(jié)果如下 -