Section1: サーブレットテクノロジーモデル

HTTPプロトコル
HTTPリクエストの構造
要素名 説明
リクエスト行 サーバへの命令。メソッド、URL、HTTPバージョンの順に記述される。
例: GET /index.html HTTP/1.1
ヘッダー 各種ヘッダ情報を記述。書式は 「ヘッダ名: 値, 値, ...」で、値は複数記述可能。
例:
Accept: */*
Accept-Language: ja
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host: 192.168.0.2
Connection: Keep-Alive
空行(CR+LF) ヘッダとボディの区切り
ボディ POSTメソッド使用時のパラメータ
例: username=testId&password=testPassword&action=login
HTTPメソッド
メソッド 説明
GET ページの取得を要求する。
フォームでメソッドの指定を省略した場合はGETが使用される。
リクエストパラメータの付け方: URL末尾に [ ?key1=value1&key2=va&ue2 ]
POST クライアントからデータを送信し、ページの取得を要求する。
リクエストパラメータの付け方: HTTPリクエストのボディ部に [ key1=value1&key2=value2 ]
HEAD ヘッダ情報のみを要求する。
PUT サーバ上にファイルをアップロード(新規作成 or 上書き)する。
DELETE サーバ上のファイルを削除する。
TRACE リクエストの内容をそのままレスポンスとして返す。
リクエストがどのような経路をたどるか調べるためにある(らしい)。
OPTIONS どのようなメソッドをサポートしているかを調べるために使用。
CONNECT プロキシへのトンネリング要求。
プロキシ経由でSSLを使用する場合などに使用される。
  • GETはブラウザにキャッシュされるが、POSTはキャッシュされない
  • GETのリクエストパラメータに関する特徴
    • 長文の投稿には向かない
      • リクエストパラメータの文字制限があるため。最大文字数はサーバの実装依存
      • 長文の投稿はPOSTを使う。
    • パラメータを含めたURLをブラウザのお気に入りに登録できる。
      • 例えば、〇〇の検索結果ページをお気に入りに入れることが可能
    • ヘッダのリファラにリクエストパラメータが付加される
      • 例えば、ログイン情報をGETで送信するような作りにしていると、リファラにパスワードが入ってしまう。 この状態で別のドメインのサーバにアクセスすると、リファラを通じてパスワードが漏洩する。
      • ログイン情報などは必ずPOSTを使う
HTTPレスポンスの構造
要素名 説明
レスポンス行 応答のステータス。
HTTPバージョン、ステータスコード、補足メッセージの順に記述される。
例:
HTTP/1.1 200 OK
ヘッダー 各種ヘッダ情報を記述。
書式は 「ヘッダ名: 値, 値, ...」。 値は複数記述可能。
例: 
Date: Sat, 06 Nov 2010 12:47:54 GMT
Server: Apache
Last-Modified: Sun, 13 Aug 2007 02:02:40 GMT
Accept-Ranges: bytes
Content-Length: 36845
Connection: close
Content-Type: text/html
空行(CR+LF) ヘッダとボディの区切り
ボディ HTML、画像データなど
HttpServlet
HttpServletの継承関係
HttpServletが継承するクラス、実装するインターフェースについて、パッケージ名も含めて答えよ。
javax.servlet.GenericServletクラスはjavax.servlet.Servletインターフェースとjavax.servlet.ServletConfigインターフェースを実装する。javax.servlet.http.HttpServletクラスはjavax.servlet.GenericServletクラスを継承する。
  • GenericServlet、HttpServletはServletConfigインターフェースを実装している(中身はServletConfig実装クラスへの委譲)ため、ServletConfigのメソッドも利用出来る。
ServletのAPI
シグネチャ 説明
ライフサイクルメソッド(3種)
public void init(ServletConfig config) サーブレットがインスタンス化された時に呼び出される。
public void service(ServletRequest req, ServletResponse res) リクエストを処理するメソッド。
public void destroy() サーブレットが破棄される時(通常はコンテナ終了時)に呼び出される。
サーブレット情報取得(2種)
public ServletConfig getServletConfig() サーブレットの設定オブジェクトを取得する。
public String getServletInfo() サーブレットの作者やバージョンなどの情報を返す。
ServletConfigのAPI
シグネチャ 説明
初期化パラメータ関連(2種)
public String getInitParameter(String name) サーブレット初期化パラメータを取得する。
public Enumeration getInitParameterNames() サーブレット初期化パラメータの名前の列挙を取得する。
その他情報取得メソッド(2種)
public ServletContext getServletContext() コンテキストオブジェクトを取得する。
public String getServletName() サーブレット名を取得する。
GenericServletのAPI
シグネチャ 説明
ライフサイクルメソッド(1種)
public void init() Servlet#init(ServletConfig sc)の最後に呼ばれる初期化メソッド。 開発者がオーバーライドして実装することを意図しており、デフォルト実装は空。
ログ関連(2種)
public void log(String msg) ログを出力する。実際は ServletContext#log(String msg) への委譲。
public void log(String message, Throwable t) ログを出力する。実際は ServletContext#log(String msg, Throwable t) への委譲。
HttpServletのAPI
シグネチャ 説明
protected void doGet(HttpServletRequest req, HttpServletResponse resp) GETリクエストを処理する。GETメソッドをサポートする場合はオーバーライドする。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) POSTリクエストを処理する。POSTメソッドをサポートする場合はオーバーライドする。
protected void doHead(HttpServletRequest req, HttpServletResponse resp) HEADリクエストを処理する。
protected void doPut(HttpServletRequest req, HttpServletResponse resp) PUTリクエストを処理する。PUTメソッドをサポートする場合はオーバーライドする。
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) DELETEリクエストを処理する。DELETEメソッドをサポートする場合はオーバーライドする。
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) OPTIONリクエストを処理する。HTTP1.1で定義されないメソッドをサポートする場合以外はオーバーライドする必要はない。
protected void doTrace(HttpServletRequest req, HttpServletResponse resp) TRACEリクエストを処理する。このメソッドをオーバーライドする必要はない。
protected void service(HttpServletRequest req, HttpServletResponse resp) HTTPリクエストを受け取り、doXXXメソッドへディスパッチする。オーバーライドする必要はない。
protected long getLastModified(HttpServletRequest req) HttpServletRequestの最終更新時間を1970/1/1 0時からのミリ秒で返す。最終更新時間が分からない場合は負の数を返す。
  • doGetなどはprotectedで定義されているが、オーバーライドするときには可視性をpublicに広げることができるので注意。
    • Javaの言語仕様(というかオブジェクト指向言語一般?)として、オーバーライドするときに可視性を広げることができる。狭くすることはできない。
    • 実際の試験で、publicでオーバーライドしている問題が出てたので、念のため記述しておきました。
  • Tomcat6.0での各メソッドのデフォルト実装
    • doGet: サポートされていないメソッドとしてエラーを返す。
    • doPost: サポートされていないメソッドとしてエラーを返す。
    • doHead: 適切に処理される。 (Bodyのないレスポンスが返される)
    • doPut: サポートされていないメソッドとしてエラーを返す。
    • doDelete: サポートされていないメソッドとしてエラーを返す。
    • doOptions: 適切なサポートメソッドを返すよう実装されている。 (doXXXメソッドをオーバーライドされているかを調べ、されていればサポートメソッドとして判定する。)
    • doTrace: 適切にTRACE情報が返される。
    • protected service: doXXXへの振り分け処理
    • getLastModified: 常に-1を返す。
  • getLastModifedメソッドについて
    • GETメソッドの処理でキャッシュを有効活用するためには、このメソッドをオーバーライドし、適切な時間を指定する必要がある。
    • protected serviceメソッドではこのメソッドが返す時刻とクライアントからのIf-Modified-Sinceヘッダを元に、304 Not Modifiedをクライアントへ返すかどうかを決めている。
    • ちなみにStrutsのActionServletではこのメソッドをオーバーライドしていない。
HttpServletのライフサイクル
サーブレットに初回リクエストが到着してからのシーケンス(5シーケンス)
シーケンス
サーブレットクラスがロードされる。
(web.xmlでload-on-startupが設定されている場合は、サーブレットコンテナ起動時に実行される)
サーブレットクラスがインスタンス化される。
サーブレットクラスは必ずデフォルトコンストラクタ(引数がないコンストラクタ)を持たなければならない。
(web.xmlでload-on-startupが設定されている場合は、サーブレットコンテナ起動時に実行される)
init(ServletConfig)が呼ばれ、初期化処理が始まる。
serviceメソッドが呼び出される。以後、リクエストがあるたびにserviceメソッドが呼び出される。
サーブレット破棄時(一般的にはコンテナの終了時)にdestroyメソッドが呼ばれる。
ServletRequest
HttpServletRequestの継承関係
HttpServletRequestが継承するクラス、実装するインターフェースについて、パッケージ名も含めて答えよ。
javax.servlet.http.HttpServletRequestインターフェースはjavax.servlet.ServletRequestインターフェースを継承する。
ServletRequestのAPI
シグネチャ 説明
リクエストパラメータ関連(4種)
public String getParameter(String name) 指定された名前で取得できるリクエストパラメータを返す。複数の値が存在する場合は最初のパラメータを返す。対応するパラメータがなければnullを返す。
public String[] getParameterValues(String name) 指定された名前で取得できるリクエストパラメータの配列を返す。対応するパラメータがなければnullを返す。
public Enumeration getParameterNames() リクエストパラメータに含まれる名前の列挙を返します。
public Map getParameterMap() リクエストパラメータのMapを返す。
リクエストスコープ関連(4種)
public Object getAttribute(String name) 指定された名前の属性値を返す。対応する属性がなければnullを返す。
public Enumeration getAttributeNames() すべての属性名の列挙を返す。
public void setAttribute(String name, Object o) このリクエストに属性をセットする。
public void removeAttribute(String name) このリクエストから属性を削除する。
通信方式関連の情報取得(3種)
public String getScheme() 例えば http や https, ftp のようなリクエストのスキームを返す。
public String getProtocol() リクエストのプロトコル名とバージョンを HTTP/1.1 のように プロトコル名/メジャーバージョン番号.マイナーバージョン番号 の形式で返す。
public boolean isSecure() このリクエストが HTTPS のようなセキュアなチャネルを使って送られたものかどうかを返す。
ヘッダ情報取得(7種)
public String getServerName() クライアントから見た接続先サーバのホスト名を返す。(WebサーバがフロントにいればWebサーバのホスト名になる)
public int getServerPort() クライアントから見た接続先サーバのポート番号を返す(WebサーバがフロントにいればWebサーバのポート番号になる)
public int getContentLength() リクエストのメッセージボディのバイト長を返す。長さがわからない場合は -1 を返す。
public String getCharacterEncoding() このリクエストのメッセージボディで使われてる文字エンコーディングの名前を返す。
public String getContentType() リクエストに含まれるメッセージボディの MIME タイプを返す。タイプがわからない場合は null を返す。
public Locale getLocale() Accept-Language ヘッダを元に、クライアントがコンテンツを表示できると想定される Locale を返す。
public Enumeration getLocales() Accept-Language ヘッダを元にクライアントが表示可能であると想定されるロケールを、最適なロケール順に列挙したものを返す。
ヘッダ情報書き換え(1種)
public void setCharacterEncoding(String env) このリクエストのメッセージボディで使われている文字エンコーディング名を上書きする。
(メッセージボディであることに注意。つまり、POSTのリクエストパラメータにはこの文字エンコーディングが適用されるが、GETのリクエストパラメータには適用されない。 GETのリクエストパラメータの文字エンコーディングを設定する方法は、コンテナ依存。)
ボディ情報取得(2種)
public ServletInputStream getInputStream() リクエストのメッセージボディに含まれているバイナリデータを読み込むためのストリームを取得する。文字データ読み込み用のリーダーをすでに取得しているとIllegalStateException。
public BufferedReader getReader() リクエストのメッセージボディを文字データとして取得するためのリーダーを取得する。バイナリデータ読み込み用のストリームをすでに取得しているとIllegalStateException。
クライアント情報取得(3種)
public String getRemoteAddr() リクエストを送ってきたクライアントまたは最後のプロキシのIPアドレスを返す。
public String getRemoteHost() リクエストを送ってきたクライアントまたは最後のプロキシの完全修飾ドメイン名を返す。
public int getRemotePort() リクエストを送ったクライアントまたは最後のプロキシの送信元ポート番号を返す。
サーバ情報取得(3種)
public String getLocalAddr() リクエストを処理するサーブレットコンテナサーバのIPアドレスを返す。
public String getLocalName() リクエストを処理するサーブレットコンテナサーバのホスト名を返す。
public int getLocalPort() リクエストを処理するサーブレットコンテナサーバのポート番号を返す。
他リソースへのリクエスト委譲を行うためのオブジェクト取得(1種)
public RequestDispatcher getRequestDispatcher(String path) 指定されたパスに位置するリソースのラッパとして動作する RequestDispatcher オブジェクトを返す。
HttpServletRequestのAPI
シグネチャ 説明
セッション取得(2種)
public HttpSession getSession() このリクエストに関連づけられている現在のセッションを返す。セッションが存在しない場合は新たに生成する。
public HttpSession getSession(boolean create) このリクエストに関連づけられている現在のセッションを返す。引数がfalseでセッションが存在しない場合、nullを返す。
セッションID関連情報(4種)
public boolean isRequestedSessionIdFromCookie() リクエストされたセッションのIDがクッキーとして送られてきたかどうか。
public boolean isRequestedSessionIdFromURL() リクエストされたセッションIDがURLの一部として送られてきたかどうか。
public boolean isRequestedSessionIdValid() リクエストされたセッションのIDが有効であるかどうか。
public String getRequestedSessionId() クライアントによって指定されたセッションIDを返す。このIDが現在有効なセッションのIDと一致するとは限らない。
クッキーの取得(1種)
public Cookie[] getCookies() このリクエストと一緒にクライアントから送られてきた全てのクッキーを取得する。
HTTP特有のヘッダ情報取得(6種)
public String getMethod() 例えば GET、POST、PUT のような、HTTPメソッドの名前を返す。
public String getHeader(String name) 指定されたリクエストヘッダの値を返す。複数の値がある場合、最初の値を返す。(ここで言う複数とは、同じキーで「キー: 値」が複数定義されているものを指す。値がカンマ区切りで定義されているものは1つのヘッダとして認識される。)
public Enumeration getHeaders(String name) 指定されたリクエストヘッダの全ての値を返す。
public Enumeration getHeaderNames() このリクエストに含まれる全てのヘッダ名を返す。
public int getIntHeader(String name) 指定されたリクエストヘッダの値を整数として返す。
public long getDateHeader(String name) 指定されたリクエストヘッダの値を日付として返す。
パス関連取得(7種) (例は以下のURLへアクセスしている場合に取得できる情報)
http://localhost:8080/sampleApp/SampleServlet/test/?key1=value1&key2=value2
public StringBuffer getRequestURL() リクエストされたURLを返す。クエリ文字列は含まない。例: http://localhost:8080/sampleApp/SampleServlet/test/
public String getRequestURI() リクエストされたURLのうち、プロトコル、ホスト、ポート番号、クエリ文字列を除いた部分を返す。例: /sampleApp/SampleServlet/test/
public String getQueryString() リクエストされたURLのパスの後ろに含まれているクエリ文字列を返す。?は含まない。例: key1=value1&key2=value2
public String getContextPath() リクエストされたURLのうち、コンテキストを指す部分を返す。例: /sampleApp
public String getServletPath() リクエストされたURLのうち、Servletを呼び出すための部分を返す。例: /SampleServlet
public String getPathInfo() リクエストを生成した時にクライアントがURLに関連づけて送った拡張パス情報を返す。例: /test/
public String getPathTranslated() 拡張パス情報を物理的な絶対パスに変換してから返す。例: C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\sampleApp\test
認証関連(4種)
public String getAuthType() 使用している認証方式の名前を返す。
public String getRemoteUser() リクエストを生成したユーザが認証されている場合はそのユーザのログイン名を返す。
public java.security.Principal getUserPrincipal() 現在の認証ユーザの名前を含む java.security.Principal オブジェクトを返す。
public boolean isUserInRole(String role) 認証されているユーザが指定された論理的な「ロール」に含まれているかどうかを返す。指定するロール名はsecurity-role-refタグで指定した別名でもよい。
HttpServletRequestWrapperとは
HttpServletRequestを拡張したい時に使用するラッパークラス。
各メソッドのデフォルト実装は、ラップされたHttpServletRequestのメソッドをそのまま呼び出すようになっているため、開発者は拡張が必要なメソッドのみをオーバーライドすればよい。
HttpServletRequestWrapperの継承関係
HttpServletRequestWrapperが継承するクラス、実装するインターフェースについて、パッケージ名も含めて答えよ。
javax.servlet.ServletRequestWrapperはjavax.servlet.ServletRequestインターフェースを実装する。javax.servlet.http.HttpServletRequestWrapperはjavax.servlet.http.HttpServletRequestインターフェースを実装し、javax.servlet.ServletRequestWrapperを継承する。
HttpServletResponse
HttpServletResponseの継承関係
HttpServletResponseが継承するクラス、実装するインターフェースについて、パッケージ名も含めて答えよ。
javax.servlet.http.HttpServletResponseインターフェースはjavaqx.servlet.ServletResponseインターフェースを継承する。
ServletResponseのAPI
シグネチャ 説明
ヘッダ情報設定(4種)
public void setCharacterEncoding(String charset) UTF-8 のようなクライアントに送り返すレスポンスの文字エンコーディングを設定する。setContentType(type)やsetLocale(loc)で設定済みでも上書きする。コミット後に呼んだ場合は無効。
public void setContentType(String type) クライアントに送り返されるレスポンスのコンテントタイプを設定する。文字エンコーディングも含まれる。コミット後に呼んだ場合は無効。例: text/html;charset=UTF-8
public void setLocale(Locale loc) レスポンスがまだコミットされていない場合は、レスポンスのロケールを設定する。設定されたロケールから適切な文字エンコーディングの設定も行われる。コミット後に呼んだ場合は無効。
public void setContentLength(int len) レスポンスのメッセージボディ部分の長さを設定する。
ヘッダ情報取得(3種)
public String getCharacterEncoding() このレスポンスで送り返すボディで使用されている文字エンコーディング (MIME 文字セット) 名を返す。
public String getContentType() このレスポンスで送り返す MIME ボディに適用されているコンテントタイプを返す。例: text/html;charset=UTF-8
public Locale getLocale() このレスポンスに setLocale(Locale) メソッドで設定されたロケールを返す。
ボディ情報書き込み(2種)
public ServletOutputStream getOutputStream() レスポンスにバイナリデータを出力する際に使用するストリームを返す。ストリームのflush()が呼ばれるとレスポンスがコミットされる。文字データ書き込み用のWriterをすでに取得しているとIllegalStateException。
public PrintWriter getWriter() 文字データをクライアントに送り返すのに使用するWriterを返す。Writerのflush()が呼ばれるとレスポンスがコミットされる。バイナリデータ出力用ストリームをすでに取得しているとIllegalStateException。
バッファ関連(6種)
public void setBufferSize(int size) レスポンスのバッファサイズを設定する。すでにメッセージボディが出力されている場合、IllegalStateException。
public int getBufferSize() このレスポンスに設定されている実バッファサイズを返す。
public void flushBuffer() バッファリングされているコンテンツを強制的にクライアントに出力する。レスポンスがコミットされる。
public void reset() バッファリングされているデータ、ステータスコードとヘッダフィールドの値を削除する。コミット後に呼ぶとIllegalStateException。
public void resetBuffer() バッファリングされているデータを削除する。ステータスコードとヘッダフィールドの値はそのまま。コミット後に呼ぶとIllegalStateException。
public boolean isCommitted() レスポンスがすでにコミットされたかどうかを返す。
HttpServletResponseのAPI
シグネチャ 説明
クッキーの設定(1種)
public void addCookie(Cookie cookie) 指定されたクッキーをレスポンスに追加する。
ヘッダ情報設定(7種)
public void addHeader(String name, String value) 指定された名称で指定された値を持つレスポンスヘッダを追加する。すでに値が設定されている場合は、値の後ろにカンマ区切りで並べる。例: test: value1, value2, value3
public void addIntHeader(String name, int value) 指定された名称で指定された整数値を持つレスポンスヘッダを追加する。すでに値が設定されている場合は、値の後ろにカンマ区切りで並べる。例: test: value1, value2, value3
public void addDateHeader(String name, long date) 指定された名称で指定された日付の値を持つレスポンスヘッダを追加する。すでに値が設定されている場合は、値の後ろにカンマ区切りで並べる。例: test: value1, value2, value3
public void setHeader(String name, String value) 指定された名称で指定された値を持つレスポンスヘッダを追加する。すでに値が設定されている場合は、それを書き換える。
public void setIntHeader(String name, int value) 指定された名称で指定された整数値を持つレスポンスヘッダを追加する。すでに値が設定されている場合は、それを書き換える。
public void setDateHeader(String name, long date) 指定された名称で指定された日付の値を持つレスポンスヘッダを追加する。すでに値が設定されている場合は、それを書き換える。
public void setStatus(int sc) このレスポンスのステータスコードを設定する。
ヘッダ情報取得(1種)
public boolean containsHeader(String name) 指定された名前を持つヘッダが既にセットされているかどうかを返す。
URLエンコード(2種)
public String encodeURL(String url) 指定された URL がセッション ID を含むようにエンコードする。
public String encodeRedirectURL(String url) 指定されたリダイレクト用 URL がセッションIDを含むようにエンコードする。
エラーページ遷移(2種)
public void sendError(int sc) バッファをクリアし、指定されたステータスを使ってクライアントにエラーレスポンスを送る。
public void sendError(int sc, String msg) 指定されたステータスとメッセージを使ってクライアントにエラーレスポンスを送る。ステータスに対応するエラーページが用意されている場合は、エラーページが表示されるため、メッセージは表示されない。
リダイレクト(1種)
public void sendRedirect(String location) 指定されたリダイレクト先の URL を用いて、クライアントに一時的なリダイレクトレスポンスを送信する。
絶対パスと相対パスを指定可能。
"/"から始まる場合はサーブレットコンテナのルート(コンテキストではない)からの相対パスとなる(/context名/servlet/path)。
それ以外の相対パスは現在のリクエストURIからの相対パスとなる。
HttpServletResponseWrapperとは
HttpServletResponseを拡張したい時に使用するラッパークラス。
各メソッドのデフォルト実装は、ラップされたHttpServletResponseのメソッドをそのまま呼び出すようになっているため、開発者は拡張が必要なメソッドのみをオーバーライドすればよい。
HttpServletResponseWrapperの継承関係
HttpServletResponseWrapperが継承するクラス、実装するインターフェースについて、パッケージ名も含めて答えよ。
javax.servlet.ServletResponseWrapperはjavax.servlet.ServletResponseインターフェースを実装する。javax.servlet.httpHttpServletResponseWrapperはjavax.servlet.http.HttpServletResponseインターフェースを実装し、javax.servlet.ServletResponseWrapperを継承する。
Cookie
Cookieクラスのパッケージ
javax.servlet.http
CookieのAPI
シグネチャ 説明
コンストラクタ(1種)
public Cookie(String name, String value) コンストラクタ。
getter(8種)
public String getName() Cookie の名前を返す。
public String getValue() Cookie の値を返す。
public String getDomain() この Cookie にセットされているドメイン名を返す。
public String getPath() ブラウザが送り返してきた Cookie に含まれているサーバ上のパスを返す。
public int getMaxAge() Cookie の最長存続期間の値を秒単位の数値で返す。
public boolean getSecure() セキュアなプロトコルを使っている場合のみ、ブラウザが Cookie を送ってくるようになっているかどうかを返す。
public int getVersion() それぞれの仕様に取り込まれた Cookie のプロトコルのバージョンを返す。
public String getComment() この Cookie がどのような目的で使われるかを記述したコメントを返す。
setter(7種)
public void setValue(String newValue) Cookie が生成された後で、新しい値を設定する。
public void setDomain(String pattern) この Cookie がどこで生成されたかを表すドメインを設定する。
public void setPath(String uri) クライアントがこの Cookie を返さなくてはいけないパスを設定する。
public void setMaxAge(int expiry) Cookie の最長存続期間を秒単位で設定する。
public void setSecure(boolean flag) HTTPS や SSL のようなセキュアなプロトコルを使っている場合のみ Cookie を送り返すようにブラウザに指示する。
public void setVersion(int v) この Cookie が採用しているプロトコルのバージョンを設定する。
public void setComment(String purpose) Cookie がどのような目的をもっているのかを記述するコメントを設定する。
その他(1種)
public Object clone() Cookie のコピーを返す。標準の Object#clone メソッドをオーバライドしている。
inserted by FC2 system