HTTP プロトコルはステートレスであるため、Web アプリケーションは何らかの方法で、要求間でセッション情報を保持する必要があります。したがって、サーブレットが正しく機能するには、どのユーザが要求を送信しているか、そのユーザが Web アプリケーションとの対話を開始しているか、そのユーザが何を実行していたかをサーブレットが把握している必要があります。
単純な実装ではユーザ名が、セキュリティ保護されている実装ではユーザ名とパスワードが、電子商取引システムではショッピング カートがアプリケーションに記憶されます。サーブレット API を使用しないアプリケーションの場合、通常はアプリケーション固有の保存メカニズムを使用してセッション情報を保存し、非表示のフォーム フィールドまたはクッキーを通じてキー値をブラウザに返します。後続の要求では、このキー値を使用して前に保存されているセッション情報を取得します。
Java サーブレット仕様では HttpSession
インターフェイスが定義されています。このインターフェイスによって、実装の詳細を把握せずにセッション管理を行うことができます。HttpSession
インターフェイスは HttpServletRequest
クラスから取得できます。
getSession
メソッドによってセッションを確立し、getAttribute
メソッドによってセッションからの値にアクセスします。
public class SelectionForm extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { resp.setContentType(“text/html”); PrintWriter out = resp.getWriter(); String thisName = "Unknown Name"; // ログイン情報からユーザ名を取得します。 String[] attrArray = req.getParameterValues("myName"); // 呼び出しフォームには、myName の値が 1 つしかないと想定します。 if(attrArray != null && attrArray.length > 0) { thisName = attrArray[0]; } } ...
HttpServletRequest
オブジェクトの getSession
メソッドを呼び出すことによって新しいセッションを作成します。// セッションを作成します。 HttpSession thisSession = req.getSession();
// この例では、ユーザ名を保存します。 thisSession.setAttribute("name", thisName);
HttpServletRequest
オブジェクトの getSession
メソッドを呼び出すことによって session
オブジェクトの参照を取得します。import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class DisplayInfo extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { resp.setContentType(“text/html”); PrintWriter out = resp.getWriter(); out.println("<html><head><title>Display Information"); out.println("</title></head><body>"); out.println("<h1>displayInfo Servlet</h1>"); // session オブジェクトからログイン ユーザを取得します。 HttpSession thisSession = req.getSession(); ...
HttpSession
オブジェクトの getAttribute
メソッドを使用して希望する属性値にアクセスします。必ず結果を適切なタイプに変換してください。String userName = (String)thisSession.getAttribute("name");
if(userName != null) { out.println("<h2>Welcome " + userName + "</h2>"); }