RequestDispatcher
オブジェクトの forward
メソッドを使用して、ほかのサーブレットまたは JSP に制御を渡すことができます。forward
メソッドを使用する場合、呼び出し側のサーブレットから出力ストリームに書き込むことはできません。必要であれば、呼び出し側のサーブレットは、ServletRequest
オブジェクトの setAttribute
メソッド (JSP の request
オブジェクト) を使用して属性を設定することにより、目的のサーブレットに情報を渡します。その場合、ターゲット プログラムは次の方法で属性にアクセスします。
ServletRequest
オブジェクトの getAttribute
メソッドによってこれらの属性にアクセスできます。
request
オブジェクトの getAttribute
メソッドによってこれらの属性にアクセスできます。
RequestDispatcher
オブジェクトの参照は、getRequestDispatcher
メソッドによって取得します。このメソッドは ServletContext
オブジェクトと ServletRequest
オブジェクトの両方に含まれています。唯一の違いは、ServletRequest.getRequestDispatcher
で指定するパス名には先頭のスラッシュが不要なことです。したがって、相対 URL を使用することができます。ServletContext.getRequestDispatcher
の場合は、先頭のスラッシュが必要です。次に、ServletContext.getRequestDispatcher
を使用した例を示します。
import java.io.*;
import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class TestCaller extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { // ServletContext を取得します。 ServletContext sc = this.getServletContext(); // RequestDispatcher で目的のサーブレットをラップします。 RequestDispatcher rd = sc.getRequestDispatcher("/servlet/callMe"); if (rd !=null) { // 制御をサーブレットに渡します。 try { rd.forward(req, resp); } catch (Exception e) { sc.log("Problem invoking servlet.", e); } } } }
RequestDispatcher
オブジェクトを使用して、JSP に制御を渡すことができます。
メモ この方法を使用すると、 HTML ページに制御を渡すこともできます。 |
import java.io.*;
import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class TestCaller extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { // ServletContext を取得します。 ServletContext sc = this.getServletContext(); // RequestDispatcher で JSP をラップします。 RequestDispatcher rd = sc.getRequestDispatcher("/test.jsp"); if (rd !=null) { // JSP に制御を渡します。 try { rd.forward(req, resp); } catch (Exception e) { sc.log("Problem invoking JSP.", e); } } } }