12_サーブレットCookies処理
105213 ワード
サーブレットCookies処理
Cookiesはクライアントコンピュータに格納されたテキストファイルであり、様々な追跡情報が保持されている.Javaサーブレットは明らかにHTTP Cookiesをサポートしている.
ユーザーを識別するには、次の3つのステップがあります.
サーバスクリプトは、ブラウザにCookiesのセットを送信します.例えば、名前、年齢、識別番号などです.
ブラウザは、将来の使用に備えて、これらの情報をローカルコンピュータに格納します.
次のブラウザがWebサーバに要求を送信すると、ブラウザはこれらのCookies情報をサーバに送信し、サーバはこれらの情報を使用してユーザーを識別します.
この章では、Cookiesの設定またはリセット方法、アクセス方法、削除方法について説明します.
Cookie剖析
Cookiesは通常HTTPヘッダ情報に設定されます(JavaScriptはブラウザに直接Cookieを設定することもできますが).Cookieのサーブレットを設定すると、次のヘッダ情報が送信されます.
ご覧のように、Set-Cookieヘッダには、名前値ペア、GMT日付、パス、ドメインが含まれています.名前と値はURLで符号化されます.expiresフィールドは、ブラウザに所定の時間と日付の後にCookieを「忘れる」ように指示するコマンドです.
ブラウザがCookiesを格納するように構成されている場合は、有効期限までこの情報が保持されます.ユーザーのブラウザがCookieのパスとドメインに一致するページを指す場合、Cookieはサーバに再送信されます.ブラウザのヘッダ情報は次のようになります.
サーブレットはリクエストメソッドでrequestできる.getCookies()はCookieにアクセスし、このメソッドはCookieオブジェクトの配列を返します.
サーブレットCookiesメソッド
以下に、サーブレットでCookiesを操作する際に使用できる有用なメソッドのリストを示します.
シーケンス番号
方法&説明
1
public void setDomain(String pattern)この方法は、w 3 cschoolのようなクッキーが適用するドメインを設定する.cc.
2
public String getDomain()この方法は、w 3 cschoolのようなクッキーが適用するドメインを取得する.cc.
3
public void setMaxAge(int expiry)この方法では、クッキーの有効期限が秒単位で設定されます.このように設定しないと、クッキーは現在のセッションでのみ有効になります.
4
public int getMaxAge()このメソッドはcookieの最大生存サイクル(秒単位)を返し、デフォルトでは-1はブラウザが閉じるまでcookieが継続することを示します.
5
public String getName()メソッドはクッキーの名前を返します.名前は作成後は変更できません.
6
public void setValue(String newValue)このメソッドはクッキーに関連付けられた値を設定します.
7
public String getValue()このメソッドは、クッキーに関連付けられた値を取得します.
8
public void setPath(String uri)この方法はクッキーに適用されるパスを設定します.パスを指定しない場合は、現在のページと同じディレクトリの下にある(サブディレクトリの下を含む)すべてのURLがクッキーを返します.
9
public String getPath()このメソッドは、クッキーに適用されるパスを取得します.
10
public void setSecure(boolean flag)この方法は、クッキーが暗号化された(すなわちSSL)接続のみで送信されるべきかどうかを示すブール値を設定する.
11
public void setComment(String purpose)この方法は、クッキーの目的を記述する注釈を規定する.このコメントは、ブラウザがユーザーにクッキーを表示するときに便利です.
12
public String getComment()このメソッドは、クッキーの目的を記述するコメントを返し、クッキーにコメントがない場合nullを返します.
サーブレットによるCookiesの設定
サーブレットによるCookiesの設定には、次の3つのステップがあります.
(1)Cookieオブジェクトを作成する:cookie名とcookie値を持つCookieコンストラクタを呼び出すことができ、cookie名とcookie値は文字列です.
名前にしても値にしても、スペースまたは以下の文字は含めるべきではありません.
(2)最大生存期間の設定:setMaxAgeメソッドを使用して、クッキーが有効な時間(秒単位)を維持できるように指定できます.次に、最長有効期間24時間のクッキーを設定します.
(3)HTTP応答ヘッダにCookieを送信:responseを使用することができる.addCookieは、以下に示すように、HTTP応答ヘッダのCookiesを追加する.
≪インスタンス|Instance|emdw≫
フォームデータのインスタンスを変更し、名前と姓にCookiesを設定します.
上のサーブレットHelloFormをコンパイルし、web.xmlファイルに適切なエントリを作成し、最後に次のHTMLページを試してサーブレットを呼び出します.
上のHTMLの内容をファイルhelloに保存します.htmで/webapps/ROOTディレクトリに入れます.アクセス時http://localhost:8080/Hello.htmの場合、上記フォームの実際の出力は以下のようになります.
名前:
姓:
名前と姓を入力して[コミット](Submit)ボタンをクリックすると、名前と姓が画面に表示され、firstNameとlastNameの2つのCookiesが設定され、次回コミットボタンを押すと、この2つのCookiesがサーバに返されます.
次のセクションでは、WebアプリケーションでこれらのCookiesにアクセスする方法について説明します.
サーブレットによるCookiesの読み込み
Cookiesを読み込むには、HttpServiceRequestのgetCookies()メソッドを呼び出してjavaxを作成する必要があります.servlet.http.Cookieオブジェクトの配列.次に配列をループし、getName()メソッドとgetValue()メソッドを使用して各クッキーと関連する値にアクセスします.
≪インスタンス|Instance|emdw≫
上記の例で設定したCookiesを読みましょう
上のサーブレットReadCookiesをコンパイルし、web.xmlファイルに適切なエントリを作成します.first_を設定した場合name cookieは「John」、last_nameクッキーは「Player」で、実行を試みますhttp://localhost:8080/ReadCookiesを選択すると、次の結果が表示されます.
Cookies名と値名の検索:first_name,値:John名:last_name,値:Player
サーブレットによるCookiesの削除
Cookiesを削除するのは簡単です.クッキーを削除するには、次の3つの手順に従います.
既存のクッキーを読み込み、クッキーオブジェクトに格納します.
setMaxAge()メソッドを使用してクッキーの年齢をゼロに設定し、既存のクッキーを削除します.
このクッキーをレスポンスヘッダに追加します.
≪インスタンス|Instance|emdw≫
次の例では、「first_name」という既存のクッキーが削除されます.次にReadCookiesのサーブレットを実行するとfirst_が返されます.nameは空の値です.
上のサーブレットDeleteCookiesをコンパイルし、web.xmlファイルに適切なエントリを作成します.現在実行中http://localhost:8080/DeleteCookiesを選択すると、次の結果が表示されます.
Cookies名と値が削除されたcookie:first_name名:first_name,値:John名:last_name,値:Player
今から実行してみますhttp://localhost:8080/ReadCookies次のように、クッキーが1つしか表示されません.
Cookies名と値名の検索:last_name,値:Player
Cookiesは、Internet Explorerから手動で削除できます.[ツール](Tools)メニューで、[インターネットオプション](Internet Options)を選択します.すべてのCookiesを削除する場合は、「Cookiesを削除」を押します.
Cookiesはクライアントコンピュータに格納されたテキストファイルであり、様々な追跡情報が保持されている.Javaサーブレットは明らかにHTTP Cookiesをサポートしている.
ユーザーを識別するには、次の3つのステップがあります.
サーバスクリプトは、ブラウザにCookiesのセットを送信します.例えば、名前、年齢、識別番号などです.
ブラウザは、将来の使用に備えて、これらの情報をローカルコンピュータに格納します.
次のブラウザがWebサーバに要求を送信すると、ブラウザはこれらのCookies情報をサーバに送信し、サーバはこれらの情報を使用してユーザーを識別します.
この章では、Cookiesの設定またはリセット方法、アクセス方法、削除方法について説明します.
Cookie剖析
Cookiesは通常HTTPヘッダ情報に設定されます(JavaScriptはブラウザに直接Cookieを設定することもできますが).Cookieのサーブレットを設定すると、次のヘッダ情報が送信されます.
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=w3cschool.cc
Connection: close
Content-Type: text/html
ご覧のように、Set-Cookieヘッダには、名前値ペア、GMT日付、パス、ドメインが含まれています.名前と値はURLで符号化されます.expiresフィールドは、ブラウザに所定の時間と日付の後にCookieを「忘れる」ように指示するコマンドです.
ブラウザがCookiesを格納するように構成されている場合は、有効期限までこの情報が保持されます.ユーザーのブラウザが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
サーブレットはリクエストメソッドでrequestできる.getCookies()はCookieにアクセスし、このメソッドはCookieオブジェクトの配列を返します.
サーブレットCookiesメソッド
以下に、サーブレットでCookiesを操作する際に使用できる有用なメソッドのリストを示します.
シーケンス番号
方法&説明
1
public void setDomain(String pattern)この方法は、w 3 cschoolのようなクッキーが適用するドメインを設定する.cc.
2
public String getDomain()この方法は、w 3 cschoolのようなクッキーが適用するドメインを取得する.cc.
3
public void setMaxAge(int expiry)この方法では、クッキーの有効期限が秒単位で設定されます.このように設定しないと、クッキーは現在のセッションでのみ有効になります.
4
public int getMaxAge()このメソッドはcookieの最大生存サイクル(秒単位)を返し、デフォルトでは-1はブラウザが閉じるまでcookieが継続することを示します.
5
public String getName()メソッドはクッキーの名前を返します.名前は作成後は変更できません.
6
public void setValue(String newValue)このメソッドはクッキーに関連付けられた値を設定します.
7
public String getValue()このメソッドは、クッキーに関連付けられた値を取得します.
8
public void setPath(String uri)この方法はクッキーに適用されるパスを設定します.パスを指定しない場合は、現在のページと同じディレクトリの下にある(サブディレクトリの下を含む)すべてのURLがクッキーを返します.
9
public String getPath()このメソッドは、クッキーに適用されるパスを取得します.
10
public void setSecure(boolean flag)この方法は、クッキーが暗号化された(すなわちSSL)接続のみで送信されるべきかどうかを示すブール値を設定する.
11
public void setComment(String purpose)この方法は、クッキーの目的を記述する注釈を規定する.このコメントは、ブラウザがユーザーにクッキーを表示するときに便利です.
12
public String getComment()このメソッドは、クッキーの目的を記述するコメントを返し、クッキーにコメントがない場合nullを返します.
サーブレットによるCookiesの設定
サーブレットによるCookiesの設定には、次の3つのステップがあります.
(1)Cookieオブジェクトを作成する:cookie名とcookie値を持つCookieコンストラクタを呼び出すことができ、cookie名とcookie値は文字列です.
Cookie cookie = new Cookie("key","value");
名前にしても値にしても、スペースまたは以下の文字は含めるべきではありません.
[ ] ( ) = , " / ? @ : ;
(2)最大生存期間の設定:setMaxAgeメソッドを使用して、クッキーが有効な時間(秒単位)を維持できるように指定できます.次に、最長有効期間24時間のクッキーを設定します.
cookie.setMaxAge(60*60*24);
(3)HTTP応答ヘッダにCookieを送信:responseを使用することができる.addCookieは、以下に示すように、HTTP応答ヘッダのCookiesを追加する.
response.addCookie(cookie);
≪インスタンス|Instance|emdw≫
フォームデータのインスタンスを変更し、名前と姓にCookiesを設定します.
// java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// HttpServlet
public class HelloForm extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// Cookies
Cookie firstName = new Cookie("first_name",
request.getParameter("first_name"));
Cookie lastName = new Cookie("last_name",
request.getParameter("last_name"));
// Cookies 24
firstName.setMaxAge(60*60*24);
lastName.setMaxAge(60*60*24);
// Cookies
response.addCookie( firstName );
response.addCookie( lastName );
//
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = " Cookies ";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">
";
out.println(docType +
"<html>
" +
"<head><title>" + title + "</title></head>
" +
"<body bgcolor=\"#f0f0f0\">
" +
"<h1 align=\"center\">" + title + "</h1>
" +
"<ul>
" +
" <li><b> </b>:"
+ request.getParameter("first_name") + "
</li>" +
" <li><b> </b>:"
+ request.getParameter("last_name") + "
</li>" +
"</ul>
" +
"</body></html>");
}
}
上のサーブレットHelloFormをコンパイルし、web.xmlファイルに適切なエントリを作成し、最後に次のHTMLページを試してサーブレットを呼び出します.
<html>
<head>
<meta charset="utf-8">
<title> (runoob.com)</title>
</head>
<body>
<form action="HelloForm" method="GET">
:<input type="text" name="first_name">
<br />
:<input type="text" name="last_name" />
<input type="submit" value=" " />
</form>
</body>
</html>
上のHTMLの内容をファイルhelloに保存します.htmで
名前:
姓:
名前と姓を入力して[コミット](Submit)ボタンをクリックすると、名前と姓が画面に表示され、firstNameとlastNameの2つのCookiesが設定され、次回コミットボタンを押すと、この2つのCookiesがサーバに返されます.
次のセクションでは、WebアプリケーションでこれらのCookiesにアクセスする方法について説明します.
サーブレットによるCookiesの読み込み
Cookiesを読み込むには、HttpServiceRequestのgetCookies()メソッドを呼び出してjavaxを作成する必要があります.servlet.http.Cookieオブジェクトの配列.次に配列をループし、getName()メソッドとgetValue()メソッドを使用して各クッキーと関連する値にアクセスします.
≪インスタンス|Instance|emdw≫
上記の例で設定したCookiesを読みましょう
// java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// HttpServlet
public class ReadCookies extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
Cookie cookie = null;
Cookie[] cookies = null;
// Cookies
cookies = request.getCookies();
//
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "Reading Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">
";
out.println(docType +
"<html>
" +
"<head><title>" + title + "</title></head>
" +
"<body bgcolor=\"#f0f0f0\">
" );
if( cookies != null ){
out.println("<h2> Cookies </h2>");
for (int i = 0; i < cookies.length; i++){
cookie = cookies[i];
out.print(" :" + cookie.getName( ) + ",");
out.print(" :" + cookie.getValue( )+" <br/>");
}
}else{
out.println("<h2> Cookies</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
上のサーブレットReadCookiesをコンパイルし、web.xmlファイルに適切なエントリを作成します.first_を設定した場合name cookieは「John」、last_nameクッキーは「Player」で、実行を試みますhttp://localhost:8080/ReadCookiesを選択すると、次の結果が表示されます.
Cookies名と値名の検索:first_name,値:John名:last_name,値:Player
サーブレットによるCookiesの削除
Cookiesを削除するのは簡単です.クッキーを削除するには、次の3つの手順に従います.
既存のクッキーを読み込み、クッキーオブジェクトに格納します.
setMaxAge()メソッドを使用してクッキーの年齢をゼロに設定し、既存のクッキーを削除します.
このクッキーをレスポンスヘッダに追加します.
≪インスタンス|Instance|emdw≫
次の例では、「first_name」という既存のクッキーが削除されます.次にReadCookiesのサーブレットを実行するとfirst_が返されます.nameは空の値です.
// java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// HttpServlet
public class DeleteCookies extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
Cookie cookie = null;
Cookie[] cookies = null;
// Cookies
cookies = request.getCookies();
//
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String title = "Delete Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " +
"transitional//en\">
";
out.println(docType +
"<html>
" +
"<head><title>" + title + "</title></head>
" +
"<body bgcolor=\"#f0f0f0\">
" );
if( cookies != null ){
out.println("<h2>Cookies </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(" cookie:" +
cookie.getName( ) + "<br/>");
}
out.print(" :" + cookie.getName( ) + ",");
out.print(" :" + cookie.getValue( )+" <br/>");
}
}else{
out.println(
"<h2 class="tutheader">No cookies founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
上のサーブレットDeleteCookiesをコンパイルし、web.xmlファイルに適切なエントリを作成します.現在実行中http://localhost:8080/DeleteCookiesを選択すると、次の結果が表示されます.
Cookies名と値が削除されたcookie:first_name名:first_name,値:John名:last_name,値:Player
今から実行してみますhttp://localhost:8080/ReadCookies次のように、クッキーが1つしか表示されません.
Cookies名と値名の検索:last_name,値:Player
Cookiesは、Internet Explorerから手動で削除できます.[ツール](Tools)メニューで、[インターネットオプション](Internet Options)を選択します.すべてのCookiesを削除する場合は、「Cookiesを削除」を押します.