• 検索結果がありません。

前回アクセス時刻表示 testCookie.html................................................................................................43 testCookie.java.................................................................................................43

ドキュメント内 ウェブアプリケーション (ページ 47-50)

第 2 章 Servlet

2.3 サーブレットのプログラム例

2.3.3 前回アクセス時刻表示 testCookie.html................................................................................................43 testCookie.java.................................................................................................43

以下にCookieという仕組みを使って、前回アクセスした時刻を表示するサーブレットプログ

ラムの例を示します。

Cookieとは、ウェブサイトの提供者が、ウェブブラウザを通じてウェブサイト訪問者(ユー

ザ)のコンピュータに情報を保存させる機能です。Cookieにはユーザに関する情報や最後にサ イトを訪れた日時、そのサイトの訪問回数などを記録しておくことができます。主にユーザの識 別に使われ、認証システムや、WWW によるサービスをユーザ別にカスタマイズするパーソナ ライズシステムの要素技術として利用されています。

ここではサーバにアクセスしたときに、その時刻をウェブブラウザに送り返し、次にアクセス したときにはその情報を再びサーバに送って表示しています。

testCookie.html

1 <html>

2 <head>

3 <meta http-equiv="Content-Type" content="text/html;

charset=Shift_JIS">

4 <title>ログイン</title>

5 </head>

6 <body>

7 <form method="post" action="../../servlet/testCookie">

8 名前: <input type="input" name="username" size="20">

9 <input type="submit"value="login"/> <br>

10 </form>

11 </body>

12 </html>

testCookie.java

1 package jp.ac.u_tokyo.k.is.chapter2;

2

3 import java.io.*;

4 import javax.servlet.*;

5 import javax.servlet.http.*;

6 import java.util.Calendar;

7

8 public class testCookie extends HttpServlet{

9 public void doGet (HttpServletRequest request,

10 HttpServletResponse response) throws ServletException, IOException{

11 response.setContentType("text/html;charset=Shift-JIS");

12 PrintWriter out = response.getWriter();

13

14 String cookiename = "lastaccess";//セットするCookieの名前 15 String lastAccessTime = "はじめてのアクセス";

16

17 //クッキー一覧を取り出して必要とするクッキーがあるか 18 Cookie cookies[] = null;

19 if ((cookies = request.getCookies()) != null) { 20 for (int i=0; i<cookies.length; i++) {

21 if (cookies[i].getName().equals(cookiename)) { 22 try {

23 lastAccessTime = (String)(cookies[i].getValue());

24 } catch (Exception e) { 25 lastAccessTime = "エラー";

26 } 27 } 28 } 29 }

30 //クッキーを再セット

31 String now = Calendar.getInstance().getTime().toString();

//現在時刻 32 Cookie cookie = new Cookie(cookiename, now);

33 response.addCookie(cookie);

34

35 //HTMLを表示

36 out.println("<html><head>");

37 out.println("<title>testCookie</title>");

38 out.println("</head>");

39 out.println("前回アクセス:" + lastAccessTime);

40 out.println("</body></html>");

41 }

42 protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException { 43 doGet(request, response);

44 } 45 }

それでは、特徴的な部分についてみていくことにします。

まず、以下の部分ではクッキーを読み込んでいます。

17 //クッキー一覧を取り出して必要とするクッキーがあるか 18 Cookie cookies[] = null;

19 if ((cookies = request.getCookies()) != null) { 20 for (int i=0; i<cookies.length; i++) {

21 if (cookies[i].getName().equals(cookiename)) { 22 try {

23 lastAccessTime = (String)(cookies[i].getValue());

24 } catch (Exception e) {

25 lastAccessTime = "はじめてのアクセス";

26 } 27 } 28 } 29 }

まず、Cookieオブジェクトの配列としてcookiesを宣言します。request.getCookies()により ブラウザからサーバにページを要求する際、自動的に送信されるクッキー情報を取得します。

getCookies()メソッドはブラウザから送られてきたすべてのクッキーの配列を返し、もしクッキ

ーが無ければnullを返します。(cookies = request.getCookies()) != nullというのは、cookies が空ではない、つまりクッキーが存在した場合をあらわします。

また、20行目のcookies.lengthで配列の長さを取得し、配列の回数だけクッキーをチェック

します。getCookies()メソッド自体はHttpServletRequestオブジェクトのメソッドです。

また、21行目のcookies[i].getName().equals(cookiename)は取得したクッキー情報のクッキー

名が目的のクッキーlastaccessであるかどうかを判断します。

31~33行目では、クッキーを作成し、新しい時刻を代入しています。

31 String now = Calendar.getInstance().getTime().toString();

//現在時刻 32 Cookie cookie = new Cookie(cookiename, now);

33 response.addCookie(cookie);

30行目では、現在の時刻を取得して文字列nowに代入しています。その後、32行目で新た

なCookieオブジェクトを生成しています。名前と値を引数にクッキーオブジェクトを作成して、

作成したオブジェクトを引数にしてaddCookie メソッドを実行します。

ここでは、cookienameという名前とlastaccessという値をセットしています。また33行目

のaddCookieメソッドを使用することで、ブラウザに記録されます。

ドキュメント内 ウェブアプリケーション (ページ 47-50)