JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > サーブレット (セッション管理)編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2002/11/20  田中宏和
サーブレット (セッション管理)編
◆サーブレットとは
サーブレットはサーバーで動くJavaのプログラムです。クライアントのWEBブラウザから要求があると、サーブレットのプログラムがHTMLやその他のリソースを動的に生成して結果をWEBブラウザに返します。
◆セッションとは
セッションとはWebサイトを訪れた訪問者が行う一連の行動のことです。例えば、電子商取引サイトなどで、ログインからログアウトまでを1セッションといいます。
◆セッション管理とは

セッション管理とはセッションの情報を管理することです。例えば、電子商取引サイトなどで、ログインからログアウトするまでの間、訪問者のログイン情報や取引情報などを保存して管理することをいいます。こうすることで、訪問者毎にログインしているのかどうか、どんな取引をしているのだろうかなどがわかるので、訪問者毎に適切な画面を出力したりすることができます。

◆ここでの環境
OS Windows XP
J2SE SDK 1.4.1_01
Tomcat 4.1.12
◆Tomcatを使用可能にする
サーブレット編を参考にしてTomcatを使用可能にしてください。
◆セッションを開始するサーブレット
まず、セッションを開始するサーブレットを作成します。このサーブレットが呼ばれるとセッションを開始します。
HelloWorldStartSession.java(ここからダウンロード)
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;


public class HelloWorldStartSession extends HttpServlet {

  //HTTP リクエストの処理
  public void service(HttpServletRequest request,
                      HttpServletResponse response)
                        throws ServletException, IOException {

    // セッションを開始します
    HttpSession session = request.getSession(true);
    // セッションに情報を設定します
    session.setAttribute("MESSAGE" , "セッション管理でHello World");
    session.setAttribute("DATE" , new Date());


    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>セッション開始</title>");
    out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
    out.println("<meta http-equiv=\"Cache-Control\" content=\"no-cache\">");
    out.println("<meta http-equiv=\"Expires\" content=\"-1\">");
    out.println("</head>");
    out.println("<body onLoad=\"focus()\">");
    out.println("セッションを開始しました");
    out.println("</body>");
    out.println("</html>");
  }
}
 
HttpServletRequestインターフェースのgetSessionメソッドで、引数にtrueを指定することで現在のセッションが存在しない場合に新しいセッションが生成されます。
(メソッドの定義)
public HttpSession getSession(boolean create)
HttpSessionインターフェースのsetAttributeメソッドでセッションに情報を設定できます。どの型のオブジェクトでも設定できます。
(メソッドの定義)
public void setAttribute(java.lang.String name,
                         java.lang.Object value)
 
◆セッションが存在するかどうか表示するサーブレット
セッションが存在するかどうか調べるサーブレットです。存在する場合、セッションに設定されているメッセージを表示します。
HelloWorldTestSession.java(ここからダウンロード)
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;


public class HelloWorldTestSession extends HttpServlet {
  //HTTP リクエストの処理
  public void service(HttpServletRequest request,
                      HttpServletResponse response)
                        throws ServletException, IOException {


    // セッションを取得します
    HttpSession session = request.getSession(false);

    String msg;
    if (session == null) { // セッションが存在しない場合
      msg = "セッションは存在しません";
    } else { // セッションが存在する場合
      // 設定されているデータを取得
      String message = (String)session.getAttribute("MESSAGE");
      Date date = (Date)session.getAttribute("DATE");
      msg = "セッションが存在します<br>" +
            "セッションに設定されているメッセージは<br>" +
            "<b>" + message + "</b><br>" +
            "です。<br>" +
            "設定した時刻は" + date.toString() + "です。";
    }

    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>セッション確認</title>");
    out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
    out.println("<meta http-equiv=\"Cache-Control\" content=\"no-cache\">");
    out.println("<meta http-equiv=\"Expires\" content=\"-1\">");
    out.println("</head>");
    out.println("<body onLoad=\"focus()\">");
    out.println(msg);
    out.println("</body>");
    out.println("</html>");
  }
}
 
HttpServletRequestインターフェースのgetSessionメソッドで、引数にfalseを指定することで新しいセッションを作成しなくなります。もし、セッションが存在しない場合にはnullが返ってきます。
HttpSessionインターフェースのgetAttributeメソッドでセッションに設定されている情報を取得できます。
(メソッドの定義)
public java.lang.Object getAttribute(java.lang.String name)
 
◆セッションを終了するサーブレット
セッションを終了するサーブレットです。これが呼び出されるとセッションが終了します。
HelloWorldEndSession.java(ここからダウンロード)
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class HelloWorldEndSession extends HttpServlet {

  //HTTP リクエストの処理
  public void service(HttpServletRequest request,
                      HttpServletResponse response)
                        throws ServletException, IOException {

    // セッションを取得します
    HttpSession session = request.getSession(false);
    // セッションが存在する場合
    if (session!=null) {
      // セッションを無効にします
      session.invalidate();
    }

    response.setContentType("text/html; charset=Shift_JIS");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>セッション終了</title>");
    out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
    out.println("<meta http-equiv=\"Cache-Control\" content=\"no-cache\">");
    out.println("<meta http-equiv=\"Expires\" content=\"-1\">");
    out.println("</head>");
    out.println("<body onLoad=\"focus()\">");
    out.println("セッションを終了しました");
    out.println("</body>");
    out.println("</html>");
  }
}
 
HttpSessionインターフェースのinvalidateメソッドでセッションを無効にすることができます。
(メソッドの定義)
public void invalidate()
 
◆コンパイル
コマンドプロンプト
C:\JavaHello\Session>javac *.java

C:\JavaHello\Session>

◆クラスファイルのコピーとTomcatの起動
Tomcatでサーブレットが実行できるように、上でコンパイルしたクラスファイルを[Tomcatのフォルダ]\webapps\examples\WEB-INF\classesの下にコピーしてください。コピーしたらTomcatを起動してください。
◆Tomcatで表示してセッションの状態を確認
セッションの開始 http://localhost:8080/examples/servlet/HelloWorldStartSession
セッションの確認 http://localhost:8080/examples/servlet/HelloWorldTestSession
セッションの終了 http://localhost:8080/examples/servlet/HelloWorldEndSession
上記のURLをいろいろな順番でクリックしてセッションの状態を確認してください。おおおお!
 
◆セッションのタイムアウト時間について
あるサイトにログインしたユーザーが必ずログアウトするとは限らないので(たとえばブラウザを閉じてしまう)、セッションにはタイムアウト時間が存在します。タイムアウト時間がないとサーバーにユーザーのセッション情報が残ったままになってしまうからです。Tomcatの場合、このタイムアウト時間はデフォルトでは30分になっています。Webアプリケーション毎にセッションのタイムアウト時間を設定するにはweb.xmlファイルを編集します。
■セッションのタイムアウト時間の設定(Webアプリケーション毎)
60分に設定する場合です。分単位で設定します。
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <session-config>
    <session-timeout>60</session-timeout>
  </session-config>
</web-app> 
■セッションのタイムアウト時間の設定(セッション毎)
セッション毎にタイムアウト時間を設定するには、HttpSessionインターフェースのsetMaxInactiveIntervalメソッドを使用します。web.xmlの設定よりこの設定の方が優先されます。
5分に設定する場合です。秒単位で設定します。
    HttpSession session = request.getSession(true);
session.setMaxInactiveInterval(60 * 5);
 
■関連
サーブレット編
サーブレット(Linux)編

 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME