Javaサーブレット dispatchの方法と仕組み
Advertisements
ディスパッチとは、サーブレットから他のリソースにリクエストを転送すること。
javax.servlet.RequestDispathcerインターフェースを利用する。
ここでは、ForwardServletに向けたリクエストをForwardServletBに転送する処理のサンプルを記載する。
package dispatch; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ForwardServlet extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ //コンソールに出力 System.out.println("Call ForwardServlet"); //RequestDispatcherオブジェクトは画面の遷移先を定義するオブジェクト RequestDispatcher dispatcher = request.getRequestDispatcher("/ForwardServletB"); dispatcher.forward(request,response); } }
getRequestDispatcherのパスの指定は、[/]で始まる場合はWebアプリケーションのルート(コンテキストルート)からの相対パスである。
[/]で始まらない場合は、リクエストされたURLからの相対パスである。
RequestDispatcher dispatcher = request.getRequestDispatcher("/ForwardServletB");
今回はrequest.getRequestDispatcher("/ForwardServletB");と設定した。
それは、web.xmlに以下のように定義したからだ。
<servlet> <servlet-name>ForwardServlet</servlet-name> <servlet-class>dispatch.ForwardServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ForwardServlet</servlet-name> <url-pattern>/ForwardServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>ForwardServletB</servlet-name> <servlet-class>dispatch.ForwardServletB</servlet-class> </servlet> <servlet-mapping> <servlet-name>ForwardServletB</servlet-name> <url-pattern>/ForwardServletB</url-pattern> </servlet-mapping>
ForwardServletBのURLは、(コンテキストルート)/ForwardServletBに設定されている。
上記のサーブレット宛のリクエストを別のサーブレットに転送する。
転送先のサーブレットは以下のとおり。
package dispatch; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ForwardServletB extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ System.out.println("Call ForwardServletB"); response.setContentType("text/plain; charset=Windows-31J"); response.getWriter().println("ForwardServletBのメッセージ"); } }
ForwardServletにHTTPリクエストすると、ブラウザには下記のように表示される
http://localhost:8080/basic/ForwardServlet
ForwardServletBのメッセージ