SJC-WC 『1章HTTPとサーブレット』
≪HTTP≫
HTTPリクエスト:クライアント⇒サーバ
HTTPレスポンス:サーバ⇒クライアント
HTTPリクエストの構造
[リクエストライン]サーバに要求する処理の種類
[リクエストヘッダー]クライントに関する情報
[メッセージボディ]POSTメソッドの場合に送信される。HTMLのformとか
HTTPレスポンスの構造
[ステータスライン]リクエストの結果
[レスポンスヘッダー]サーバに関する情報
[メッセージボディ]クライアントに返送するデータ
WEBアプリケーションの誕生と変遷
初期:HTTPによる静的なコンテンツの配信
1次:CGIによる動的コンテンツが可能に(Perl)(マルチプロセス=処理が遅くなる)
2次:webアプリ専用の言語の誕生(Javaサーブレット、ASP、PHP)
3次:さらなる発展(J2EE、ASP.NET)
≪サーブレット≫
サーブレットコンテナ = サーブレットの実行環境 = RI
(RI:JAVAの仕様規約であるJSR-154の具体的な実装。Tomcatとか)
javax.servlet
<interface> <interface>
ServletRequest ServletResponse
△ △
| |
javax.servlet
<interface> <interface>
<interface> <interface>
HttpServletRequest HttpServletResponse
△ △
| | [実装クラス] [実装クラス]
ServletRequest
String getContentType():コンテントタイプを取得する
Locale getLocale() :Accept-Languageヘッダーに記述されたロケール情報を取得する
Enumeration getLocales() :Accept-Languageヘッダーに記述されたロケール情報を取得する(複数)
String getParameter(String) :引数で指定したパラメタ名に対応する値を取得。なければNullを返す
Map getParameterMap() :すべてのパラメタをMapオブジェクトとして取得する。複数選択可能なチェックボックス・ドロップダウンリストなど
String[] getParameterValues(String):引数で指定したパラメタ名に対応する値を配列で取得。
Enumeration getParameterNames() :すべてのパラメタ名を取得
HttpServletRequest
long getDateHeader(String):引数で指定されたヘッダーの値(日付)を取得
String getHeader(String) :引数で指定されたヘッダーの値(文字列)を取得
Enumeration getHeaderNames() :ヘッダー名の集合を取得
Enumeration getHeaders(String) :引数で指定されたヘッダー値の集合を取得
int getIntHeader(String) :引数で指定されたヘッダーの値(数値)を取得
String getMethod() :HTTPリクエストメソッドの種類を取得
String getQueryString() :URLに含まれるクエリストリングをそのまま返す
Cookie[] getCookies() :クライアントのクッキー値を取得
ServletResponse
void setCharacterEncoding(String):文字エンコーディングを設定
void setContetType(String) :コンテントタイプを設定(※1)
void setLocale(Locale) :ロケールを設定
PrintWriter getWriter() :テキスト出力のためのテキストストリームを取得
ServletOutputStream getOutputSteam():画像などのバイナリ出力のためのバイナリストリームの取得
HttpServletResponse
void sendRedirect(String) :リダイレクトを実行(※4)
void setDateHeader(String,long):ヘッダー(日付)をセット
void setHeader(String,String) :ヘッダー(文字列)をセット(※3)
void setIntHeader(String,int) :ヘッダー(数値)をセット
void setStatus(int) :ステータスコードをセット(※3)
void addCookie(Cookie) :クライアントにクッキーを保存(※2)
(※1):Stringには"text/plain"・"text/html"・"image/gif"・"application/pdf"・"application/vnd.ms-excel"
また、"text/html; charset=Windows-31J"で日本語文字エンコーディングの指定が可能
(※2):Cookie cookie = new Cookie("age","25");
res.addCookie(cookie);
(※3):リダイレクトを行う場合は以下のように記述
res.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); #SC_MOVED_PERMANENTLYはステータスコード301を表す
res.setHeader("Location","http://www.Kronos-jp.net") #第一引数はヘッダー名
(※4):リダイレクトを行う場合は以下のように記述
res.sendRedirect("http://www.Kronos-jp.net");
サーブレットのライフサイクル
①サーブレットクラスのロード :初回のみ
②インスタンス化 :初回のみ
③initメソッドの実行 :初回のみ
④serviceメソッドの実行 :2回目以降のリクエストでも実行される req.getMethod()にて取得した名前からdoXXXに分岐させている
└→doXXXメソッドの実行 :2回目以降のリクエストでも実行される
⑤destroyメソッドの実行 :コンテナがシャットダウンされる際に実行される