|
| |
 |
サーブレット
(セッション管理)編 |
 |
◆サーブレットとは |
| サーブレットはサーバーで動く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 |