サーブレット間の連携

「サーブレット間の連携」の編集履歴(バックアップ)一覧はこちら

サーブレット間の連携」(2009/03/01 (日) 00:00:53) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*&bold(){インクルード(include)} 例えば、サーブレットAが呼ばれ、レスポンスに対して出力をしている途中でサーブレットBをインクルードしたとする。そうするといったんサーブレットBへ処理が移った後でサーブレットBの処理が終わったら呼び出し元のサーブレットAへ処理が戻り、残りの処理を行う。 例えばこのWebアプリケーションのパスが「/dispatch」でインクルードしたいサーブレットが「/dispatch/includetest」だった場合は次のようになる。 String disp = "/includetest"; RequestDispatcher dispatch = request.getRequestDispatcher(disp); dispatch.include(request, response); |URL|http://localhost:8080/dispatch/dispatchtest| |アプリケーション配置場所|c:\servlet-sample\dispatch\| |web.xmlファイル|c:\servlet-sample\dispatch\WEB-INF\web.xml| |コンテキストファイル|C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\Catalina\localhost\dispatch.xml| *&bold(){フォワード(forward)} インクルードと似ているがフォワードの場合は処理をフォワード先のサーブレットに移すため、呼び出し元のサーブレットには処理は戻って来ない。また呼び出し元の方ではレスポンスに対する出力も行えない。その為、呼び出し元の方で何らかの処理を行った上で、処理をフォワード先のサーブレットに完全に移す場合に利用する。 フォワードは、元のサーブレットへ送られてきたパラメータなども含めてフォワード先のサーブレットへそのままフォワードする。その為、クライアントからはサーブレット内部でフォワードされたことに気が付かないまま、フォワード先のサーブレットからの出力を受け取る。 String disp = "/forwardtest"; RequestDispatcher dispatch = request.getRequestDispatcher(disp); dispatch.forward(request, response); *&bold(){リクエストへの属性追加} フォワードなどを行う際に、フォワード先に何か別の情報を合わせて渡すことができる。クライアントから送られてきたリクエストをフォワード先に渡す前に、リクエストに属性を追加することで実現する。 呼び出し元:setAttributeメソッド request.setAttribute("hantei", "Out"); 呼び出し先:getAttributeメソッド String hantei = (String)request.getAttribute("hantei"); *&bold(){リダイレクト(redirect)} リダイレクトは他のサーブレットやHTMLファイルに処理を移す。フォワードと似ているが、フォワードはサーバ内で次のサーブレットなどへ処理を移すが、リダイレクトの場合はクライアントに対してリダイレクト先のサーブレットなどを見に行くように指示を出すだけ。その為、クライアント側でも処理が別のページ移ったことを認識できる。 例えば何かの処理をしてエラーだった場合にはエラーページへ飛ことや、データベースの処理だけをするサーブレットを呼び出した後に処理が終わったらサーブレットでは何も出力を行わずに特定のページへ飛ばすなどに使う。リダイレクトの場合には、別のサーバにあるURLへ飛ばすことも可能(フォワードの場合は同一サーバ内しか行えない)。 String url = "/dispatch/redirecttest"; response.sendRedirect(url);

表示オプション

横に並べて表示:
変化行の前後のみ表示: