Index ソフト・ハード Java | サーブレット |
サーブレット サーブレット作成 リクエスト レスポンス生成 サーブレット実行 マルチスレッド ライフサイクル リクエストパラメータ フォームデータ送信 パラメータの取出し リクエストの転送 スコープ リクエストスコープ セッション管理 セッションスコープ |
サーブレット ・Webコンテナ上で動作するJavaアプリケーション ・クライアントのリクエストに応じたレスポンスを生成できる。 ・Webコンテナにより、リクエストのURL対応するサーブレットが実行される。 ・クライアントのリクエスト種別に対応したメソッドが呼び出される。 ・動作 サーブレットに初回リクエスト→クラスロード→インスタンス生成 2回目以降のリクエストは、メモリにロード済のインスタンスがレスポンスサーブレットの作成(Eclipse) ・サーブレットを作成するプロジェクトを右クリック、新規→サーブレット選択 ・サーブレットは、javax.servlet.http.HttpServletクラスを継承 HTTPプロトコルに特化したサーブレットを作成するための抽象クラス JavaEEのAPIに定義 ソース・フォルダー:\WebAppSample\src\main\java Java パッケージ:servlet クラス名:SampleServlet スーパークラス:javax.servlet.http.HttpServlet・URLマッピングの指定 このサーブレットに対応付けるURLの文字列を指定 URLマッピング:/SampleServlet を編集 →/sample へ http://localhost:8080/WebAppSample/sample サーブレットのソースコードではアノテーションとして記述 @WebServlet("/コンテキストルートからのパス") @WebServlet("/sample") class SampleServlet extends HttpServlet{ (web.xml にURLマッピングの情報を登録してもよい。)・オーバーライドするメソッドの指定 スーパークラスから継承されたメソッドのうち、オーバーライドするものを指定 doGet doPost・サーブレットが格納されるディレクトリ(プロジェクト・エクスプローラー)
GETリクエスト/POSTリクエスト ・クライアントからのHTTPリクエストは、GETリクエストとPOSTリクエストがある。 ・URLに直接アクセス場合のHTTPリクエストは、GETリクエスト ・サーブレットでは、リクエスト種別に対応したメソッドが呼び出される。 ・メソッドの実行が終わると、クライアントにレスポンスが返る。
@WebServlet("/sample")
class SampleServlet extends HttpServlet {
・・・
protected void doGET(・・・) throws ・・・ {
・・・
}
protected void doPOST(・・・) throws ・・・ {
・・・
}
}
レスポンスの生成 ・クライアントへのレスポンスは、HttpServletResponseオブジェクトと表される。 ・このオブジェクトはWebコンテナで生成され、メソッドの引数として渡される。
protected void doGET(HttpServletRequest reqest, HttpServletResponse response)
throws ServletException IOException {
//レスポンスのコンテンツタイプ、エンコーディング方式
response.seType("text/html; charset=UTF-8");
//レスポンス書き出し用オブジェクトの取得
PrintWriter pw = response.getWriter();
//レスポンス書き出し
pw.println("<!DOGTYPE html><html>");
pw.println("<head><title>Hello Servlet</title></head>");
pw.println("<body>Hello Servlet</body>");
pw.println("</html>");
}
}
サーブレットの実行 ・localhost:8080/WebAppSample/sample Hello Servletマルチスレッド処理 ・Webコンテナがメモリ上にロードされたサーブレットのメソッドを複数同時に実行 ・スレッドセーフになるように作る。 ・変数の面でのスレッドセーフ ヒープ領域:クラス変数、インスタンス変数(他のスレッドで壊される可能性あり。) スタック領域:ローカル変数(安全な変数)ライフサイクル ・あらかじめ用意されたメソッドをWebコンテナがライフサイクルに従って呼び出す。 コールバック方式(コンテナがユーザのプログラムを順次呼び出す方式)・サーブレットの処理の進行 サーブレットのロード:インスタンス化 初期化処理:initメソッド サービス処理:serviceメソッド(処理が終わると実行待ちになる。) 消滅処理:destroyメソッド 消滅リクエストパラメータ ・HTTPリクエストと同時に、クライアントからWebサーバに送られるデータ パラメータ名と値のペアデータとして送られる。・GETリクエストによるパラメータ送信 クエリ文字列としてURLの末尾に付加される。 送信可能な文字数に制限がある。・POSTリクエストによるパラメータ送信 HTTPリクエストのメッセージボディ部に記述される。 送信可能な文字数に制限はない。フォームによるデータ送信 ・form要素 method属性:リクエスト種別(GET/POST)を指定 action属性:データの送信先を指定・input要素 name属性:リクエストパラメータの「パラメータ名」を指定 value属性:リクエストパラメータの「値」を指定リクエストパラメータの取り出し ・クライアントからのリクエストは、HttpServletRequestオブジェクトと表される。 ・このオブジェクトはWebコンテナで生成され、メソッドの引数として渡される。 ・getParameterメソッドやgetParameterValuesメソッドの引数としてパラメータ名を指定 リクエストの転送(フォワード) ・サーブレットでは、クライアントのリクエストを他のリソースに転送できる。 ・クライアントへのレスポンスは、転送先のリソースが行われる。 ・転送は、RequestDispatcherオブジェクトのforwardメソッドを使う。 ・このオブジェクトは、requestオブジェクトのgetRequestDispatcherを使い取得 ・getRequestDispatcherメソッドの呼び出し時に、転送先のリソースのパスを指定 ・forwardメソッドの引数として、リクエストオブジェクトとレスポンスオブジェクトを指定
protected void doPOST(HttpServletRequest reqest, HttpServletResponse response)
throws ServletException IOException {
//転送先のパスを指定して転送処理用のオブジェクトを取得
RequestDispatcher rd = request.getRequestDispatcher("transfer");
//リクエストの転送
rd.forward(request,response);
}
スコープ ・JavaWebアプリケーションで、オブジェクトの存続期間を決める。 ・スコープには任意のデータを保持できる。 ・3種類のスコープに対応するインターフェースは、あらかじめ定められている。 アプリケーションスコープ セッションスコープ:ステートフル通信(複数のリクエスト間でステート(情報)を共有) リクエストスコープ:ステートレス通信(1リクエスト単位で情報が管理される)・スコープへのデータの設定や取得の操作 対応するインターフェースを実装したクラスのオブジェクトに対して行う。リクエストスコープ ・一つのリクエストに対してレスポンスを返すまで 主にリクエストの転送(フォワード)と共に使用する。・スコープに保持できるデータは、「属性名(String型)」と「属性値(Object型)」のペア ・設定されたデータは、レスポンスをし終えると消滅 ・リクエストスコープの利用 リクエストスコープに対応するのは、HttpServletRequestのオブジェクト スコープへ値を設定する場合は、setAttributeメソッドを使う。 スコープへ設定した値を取得する場合は、getAttributeメソッドを使う。 取得した属性値は、適切な型にキャストする。セッション管理 ・クライアント毎の情報をサーバ側で継続的に維持管理する仕組み ・一般的に、セッションIDを利用したセッション管理を行う。 ・HTTP上でステートフルなWebサービスを実現 サーバはリクエストに対し、レスポンスとセッションIDを返す。 クライアントはリクエストとセッションIDを送る。(サーバはセッションIDでクライアントを認識)セッションスコープ ・セッションスコープは、セッション毎に生成 ・スコープに保持できるデータは、「属性名(String型)」と「属性値(Object型)」のペア ・セッションスコープの利用 セッションスコープに対応するのは、HttpSessionのオブジェクト スコープへ値を設定する場合は、setAttributeメソッドを使う。 スコープへ設定した値を取得する場合は、getAttributeメソッドを使う。 removeAttributeで不要になった属性を削除できる。 invalidateメソッドで不要になったセッションを無効にできる。・セッションオブジェクトはWebコンテナで管理される。 セッションIDが発行されたタイミングで生成 セッションのタイムアウトや明示的な無効化消滅(Webコンテナで制御) |
All Rights Reserved. Copyright (C) ITCL |