Java会话范围

我正在以娱乐为目的学习编程。我开始学习是因为我想制作一个古书销售网站,但是为了在服务器上动态生成网页并进行数据处理,我需要了解Java Servlet(Java Servlet)的知识…(^^;)以古书网站为例,我发现很难理解顾客放入购物车的信息如何保持,所以我决定写一篇文章解释一下!!ヾ ^^♪

セッション

ユーザーごとの状態を保持する仕組み

サーブレットではjavax.servlet.http.HttpSessionインターフェースを使って扱う

package session;

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

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

public class CounterServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{

        //1.セッションの取得
        HttpSession session = request.getSession();

        //2.セッションからのオブジェクトの取得
        Integer count = (Integer)session.getAttribute("count");

        //3.カウンタを+1
        if(count == null){
            count = new Integer(0);
        }
        count = new Integer(count.intValue() + 1);

        //4.セッションにオブジェクトを格納
        session.setAttribute("count", count);

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");

        //セッションIDの表示
        out.println("<p>sessionId=" + session.getId());

        //セッションIDの表示
        out.print("<p>count=" + count);

        //このサーブレットへのリンクの表示
        String linkurl = request.getRequestURI();
        out.println("<p><a href=\"" + linkurl + "\">RELOAD</a>");
        out.println("</body></html>");
    }

}
    1. 当创建HttpSession对象时,应用程序服务器会分配一个唯一的标识符“会话ID”。会话的一致性似乎是由该会话ID进行保证的。

 

    1. 我们从会话属性中获取名为”count”的对象,并将其转换为Integer类型。

 

    1. 由于在最初的请求中,会话属性中没有名为count的对象,所以count的值为null。

 

    1. 进行计数增加操作

 

    1. 由于最初阶段为null,所以将其赋值为0。

 

    使用setAttribute方法,在加1后的值将被注册到会话属性中。

在会话范围中传递数据
在请求范围注册的数据无法跨请求传递,但是在会话范围注册的数据可以进行传递。

requestスコープ

1回のHTTPプロトコルで実行される、サーブレットとforwardされたJSP間で有効なオブジェクト
リクエストの処理が終わると破棄

HttpServletRequest属性として設定

sessionスコープ

同一のセッションで実行される、サーブレットやJSPで有効なオブジェクト
一定時間経過でsession終了ともに破棄
HttpSessionの属性として設定

セッションスコープのオブジェクトを操作するメソッド

Object getAttribute(java.lang.String name)
引数で指定したオブジェクトを取得します。存在しない場合はnullを返します。
返ってくる型はObject型ですので、適切にキャストして利用することが多いようです。

void setAttribute(java.lang.String name, java.lang.Object value)
引数valueで指定したオブジェクトをnameという名前で登録します。

void removeAttribute(java.lang.String name)
引数nameで指定したオブジェクトを削除します。

java.util.Enumeration getAttributeNames()
登録されているnameの一覧を返します。

会话超时
如果不删除会话数据,未使用的数据将在服务器上残留。
作为一种避免方法,应用服务器内置了根据客户端最后访问时间检查并删除数据的机制。

<session-config>
        <session-timeout>3</session-timeout>
</session-config>