今回は、セッションIDの発行とサーブレット間での受け渡しを行うサンプルサーブレットを作成していきます。
まずは、作成していくサーブレットの内容を下記します。
サーブレットを呼び出すためのフォームを作成します。
「サーブレットの呼び出し」ボタンをクリックすると、サーブレット「SampleSessionCtl」を呼び出します。
サーブレット「SampleSessionCtl」では、セッションオブジェクトを生成し、生成されたセッションIDを表示するHTMLをレスポンスとして返します。
「次のサーブレット呼び出し」をクリックすると、サーブレット「SampleSessionGetServlet」を呼び出します。
サーブレット「SampleSessionGetServlet」では、セッションIDを取得し、取得したセッションIDを表示するHTMLをレスポンスとして返します。
セッションIDがサーブレットが変わっても同じ文字列であることが確認できます。
セッション生成メソッド一覧
セッションを生成するには、下記メソッドを使用します。
- HttpSession getSession()
- セッションを開始するメソッドです。セッション管理をはじめるにはHttpServletRequestオブジェクトのgetSession()メソッドを使用します。getSession()メソッドは、既にセッションが開始されているか開始されていないかに従い、引数であるboolean値の指定によって処理が異なります。
①getSession()とgetSession(true)の動作
まだセッションが開始されていないときは、新規に生成したHttpSessionオブジェクトを戻り値として返して、セッション管理を開始します。
既にセッションが開始されているときは、セッション管理の開始時に生成されたHttpSessionオブジェクトを戻り値として返します。②getSession(false)の動作
まだセッションが開始されていないときは、新規にHttpSessionオブジェクトを生成せずにnullを戻り値として返します。 - String getId()
- セッションIDを取得します。
サンプルサーブレットのソースコード
以降に各サーブレットのソースコードを記載します。(冗長な部分は省略し、主要な部分のみ記載しています。)
まずは、サーブレット呼び出し用のフォームを作成します。フォーム(HTMLファイル)の詳細な作成方法はこちらを参照してください。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>セッション管理サーブレットサンプル</title> </head> <body> <h1>セッション管理サーブレットサンプル</h1> <form action="SampleSessionCtl" method="GET"> <input type="submit" value="サーブレットの呼び出し"> </form> </body> </html>
「サーブレットの呼び出し」ボタンをクリックした場合のアクションとして、SampleSessionCtlサーブレットを呼び出してします。その際のリクエストの種類には「GET」を指定しています。
SampleSessionCtlサーブレットのdoGet()メソッドには下記のように記述します。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); HttpSession session = request.getSession(); out.println("<html>"); out.println("<head>"); out.println("<title>セッションの生成</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>セッションの生成(ページ1)</h1>"); out.println("<p>セッションIDは「" + session.getId() + "」です。</p>"); out.println("<a href=\"SampleSessionGetServlet\">次のサーブレット呼び出し</a>"); out.println("</body>"); out.println("</html>"); }
getSession()メソッドでHttpSessionオブジェクト生成し、getId()メソッドで取得したセッションIDを出力しています。
「次のサーブレット呼び出し」のリンク先として、SampleSessionGetServletサーブレットを指定します。その場合のリクエストの種類は「GET」になります。また、注意点として、println()メソッドでダブルクォーテーショ(“)を出力したい場合は、「\」でエスケープしてやる必要があります。
SampleSessionGetServletサーブレットのdoGet()メソッドには下記のように記述します。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); HttpSession session = request.getSession(); out.println("<html>"); out.println("<head>"); out.println("<title>セッションIDの取得</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>セッションIDの取得(ページ2)</h1>"); out.println("<p>セッションIDは「" + session.getId() + "」です。</p>"); out.println("<a href=\"SampleSessionCtl\">前のサーブレットに戻る</a>"); out.println("</body>"); out.println("</html>"); }
ここでもgetSession()メソッドを呼び出していますが、今回は、既にセッションが開始されているので、セッション管理の開始時に生成されたHttpSessionオブジェクトが戻り値として返されます。そのため、getId()メソッドで取得するセッションIDは前のページで表示した文字列と同じになります。