Jsp-cookies-handling
JSP-Cookieの処理
この章では、JSPでのCookie処理について説明します。 Cookieは、クライアントコンピューターに保存されるテキストファイルであり、さまざまな情報追跡目的で保持されます。 JSPは、基礎となるサーブレット技術を使用してHTTP Cookieを透過的にサポートします。
ユーザーの識別とリピートに関連する3つのステップがあります-
- サーバースクリプトは、一連のCookieをブラウザーに送信します。 たとえば、名前、年齢、識別番号など。
- ブラウザは、将来使用するためにこの情報をローカルマシンに保存します。
- ブラウザーが次にWebサーバーに要求を送信すると、ブラウザーはそれらのCookie情報をサーバーに送信し、サーバーはその情報を使用してユーザーを識別します。
この章では、Cookieを設定またはリセットする方法、Cookieにアクセスする方法、JSPプログラムを使用してCookieを削除する方法について説明します。
クッキーの構造
Cookieは通常、HTTPヘッダーに設定されます(JavaScriptはブラウザーで直接Cookieを設定することもできます)。 Cookieを設定するJSPは、次のようなヘッダーを送信する場合があります-
HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT;
path =/; domain = finddevguides.com
Connection: close
Content-Type: text/html
ご覧のとおり、* Set-Cookieヘッダー*には、名前と値のペア、GMT日付、パス、および*ドメイン*が含まれています。 名前と値はURLエンコードされます。 expires フィールドは、指定された日時の後にCookieを*「忘れる」*ようにブラウザに指示するものです。
ブラウザがクッキーを保存するように設定されている場合、有効期限までこの情報を保持します。 ユーザーがブラウザでCookieのパスとドメインに一致するページをポイントすると、Cookieがサーバーに再送信されます。 ブラウザのヘッダーは次のようになります-
GET/HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz
JSPスクリプトは、Cookie_オブジェクトの配列を返すリクエストメソッド _request.getCookies() を介してCookieにアクセスできます。
サーブレットCookieメソッド
次の表に、JSPでCookieを操作するときに使用できるCookieオブジェクトに関連付けられた便利なメソッドを示します-
S.No. | Method & Description |
---|---|
1 |
public void setDomain(String pattern) このメソッドは、Cookieが適用されるドメインを設定します。たとえば、finddevguides.comです。 |
2 |
public String getDomain() このメソッドは、Cookieが適用されるドメインを取得します。たとえば、finddevguides.comです。 |
3 |
public void setMaxAge(int expiry) このメソッドは、Cookieが期限切れになるまでの経過時間(秒単位)を設定します。 これを設定しない場合、Cookieは現在のセッションの間のみ持続します。 |
4 |
public int getMaxAge() このメソッドは、秒単位で指定されたCookieの最大有効期間を返します。デフォルトでは、ブラウザがシャットダウンするまでCookieが保持されることを示す -1 です。 |
5 |
public String getName() このメソッドは、Cookieの名前を返します。 作成後に名前を変更することはできません。 |
6 |
public void setValue(String newValue) このメソッドは、Cookieに関連付けられた値を設定します。 |
7 |
public String getValue() このメソッドは、Cookieに関連付けられた値を取得します。 |
8 |
public void setPath(String uri) このメソッドは、このCookieが適用されるパスを設定します。 パスを指定しない場合、現在のページとすべてのサブディレクトリと同じディレクトリ内のすべてのURLに対してCookieが返されます。 |
9 |
public String getPath() このメソッドは、このCookieが適用されるパスを取得します。 |
10 |
public void setSecure(boolean flag) このメソッドは、Cookieを暗号化(つまりSSL)接続のみで送信するかどうかを示すブール値を設定します。 |
11 |
public void setComment(String purpose) このメソッドは、Cookieの目的を説明するコメントを指定します。 このコメントは、ブラウザがユーザーにCookieを提示する場合に役立ちます。 |
12 |
public String getComment() このメソッドは、このCookieの目的を説明するコメントを返します。Cookieにコメントがない場合はnullを返します。 |
JSPを使用したCookieの設定
JSPでCookieを設定するには、次の3つの手順が必要です-
ステップ1:Cookieオブジェクトを作成する
Cookieコンストラクターは、両方とも文字列であるCookie名とCookie値で呼び出します。
Cookie cookie = new Cookie("key","value");
覚えておいて、名前も値も空白または次の文字のいずれかを含むべきではありません-
[ ] ( ) = , "/? @ : ;
ステップ2:最大年齢の設定
*setMaxAge* を使用して、Cookieの有効期間(秒単位)を指定します。 次のコードは24時間Cookieを設定します。
cookie.setMaxAge(60*60*24);
ステップ3:CookieをHTTP応答ヘッダーに送信する
*response.addCookie* を使用して、次のようにHTTP応答ヘッダーにCookieを追加します。
response.addCookie(cookie);
例
link:/jsp/jsp_form_processing [フォームの例]を変更して、姓と名のCookieを設定します。
<%
//Create cookies for first and last names.
Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
//Set expiry date after 24 Hrs for both the cookies.
firstName.setMaxAge(60*60*24);
lastName.setMaxAge(60*60*24);
//Add both the cookies in the response header.
response.addCookie( firstName );
response.addCookie( lastName );
%>
<html>
<head>
<title>Setting Cookies</title>
</head>
<body>
<center>
<h1>Setting Cookies</h1>
</center>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>
上記のコードを main.jsp ファイルに入れて、次のHTMLページで使用してみましょう-
<html>
<body>
<form action = "main.jsp" method = "GET">
First Name: <input type = "text" name = "first_name">
<br/>
Last Name: <input type = "text" name = "last_name"/>
<input type = "submit" value = "Submit"/>
</form>
</body>
</html>
上記のHTMLコンテンツを hello.jsp ファイルに保持し、 hello.jsp および main.jsp を <Tomcat-installation-directory>/webapps/ROOT ディレクトリに配置します。 http://localhost:8080/hello.jsp にアクセスすると、上記のフォームの実際の出力が表示されます。
名前苗字:
名と姓を入力して、送信ボタンをクリックしてください。 これにより、画面に名と姓が表示され、2つのCookie firstName と lastName も設定されます。 これらのCookieは、次回[送信]ボタンをクリックしたときにサーバーに返されます。
次のセクションでは、WebアプリケーションでこれらのCookieにアクセスする方法について説明します。
JSPを使用したCookieの読み取り
Cookieを読み取るには、_HttpServletRequest_の* getCookies()メソッドを呼び出して、_javax.servlet.http.Cookie_オブジェクトの配列を作成する必要があります。 次に、配列を循環し、 getName()および getValue()*メソッドを使用して、各Cookieおよび関連する値にアクセスします。
例
ここで、前の例で設定されたクッキーを読んでみましょう-
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
//Get an array of Cookies associated with the this domain
cookies = request.getCookies();
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println("<h2>No cookies founds</h2>");
}
%>
</body>
</html>
上記のコードを main.jsp ファイルに入れて、アクセスしてみましょう。 first_name cookie を「John」に、 last_name cookie を「Player」に設定すると、 _ http://localhost:8080/main.jsp_ を実行すると次の結果が表示されます-
Found Cookies Name and Value
Name : first_name, Value: John
Name : last_name, Value: Player
JSPを使用してCookieを削除する
Cookieを削除するのは非常に簡単です。 あなたがクッキーを削除したい場合は、単にこれらの3つの手順に従う必要があります-
- 既存のCookieを読み取り、Cookieオブジェクトに保存します。
- * setMaxAge()*メソッドを使用して既存のCookieを削除し、Cookieの有効期間をゼロに設定します。
- このCookieを応答ヘッダーに追加し直します。
例
次の例では、 "first_name" という名前の既存のCookieを削除する方法を示します。次回main.jsp JSPを実行すると、first_nameに対してnull値が返されます。
<html>
<head>
<title>Reading Cookies</title>
</head>
<body>
<center>
<h1>Reading Cookies</h1>
</center>
<%
Cookie cookie = null;
Cookie[] cookies = null;
//Get an array of Cookies associated with the this domain
cookies = request.getCookies();
if( cookies != null ) {
out.println("<h2> Found Cookies Name and Value</h2>");
for (int i = 0; i < cookies.length; i++) {
cookie = cookies[i];
if((cookie.getName( )).compareTo("first_name") == 0 ) {
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("Deleted cookie: " +
cookie.getName( ) + "<br/>");
}
out.print("Name : " + cookie.getName( ) + ", ");
out.print("Value: " + cookie.getValue( )+" <br/>");
}
} else {
out.println(
"<h2>No cookies founds</h2>");
}
%>
</body>
</html>
上記のコードを main.jsp ファイルに入れて、アクセスしてみます。 次の結果が表示されます-
Cookies Name and Value
Deleted cookie : first_name
Name : first_name, Value: John
Name : last_name, Value: Player
_http://localhost:8080/main.jsp_をもう一度実行すると、次のように1つのCookieのみが表示されるはずです-
Found Cookies Name and Value
Name : last_name, Value: Player
Internet ExplorerでCookieを手動で削除できます。 [ツール]メニューから開始し、[インターネットオプション]を選択します。 すべてのCookieを削除するには、[Cookieの削除]ボタンをクリックします。