サーブレット 5章 includeとforward
- 5.1. 他のサーブレットの呼び出し
- 5.2. include
- 5.3. forward
- 5.4. ServletRequestを用いたデータ共有
5.3. forward
「forward」は他のリソース(「HTML」「JSP」「Servlet」)に処理を転送する機能です。includeのように、表示の一部だけを任せるという訳ではありません。そのため、1つ制約があり、forwardを行うまでに何らかの表示を返してはいけません。その場合にはIllegalStateExceptionが発生します。以下のサンプルでは、forwardの直前に出力を行っていますので、例外が発生します。
public final class ForwardServlet extends HttpServlet{ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ response.setContentType("text/html; charset=EUC-JP"); PrintWriter writer=response.getWriter(); writer.println("<html>"); //前の行で出力があるので、例外が発生する。 request.getRequestDispatcher("/resource/Included").forward(request,response); } }
逆にforwardした後、何の出力を行っても、例外は発生しませんが意味はありません。
forwardは処理(Servlet)と表示(JSP)を切り分けてアプリケーションを開発する際に、非常に重要な機能です。
(実習課題2)
3章の実習課題3のプログラムを改良しなさい。
- Internet Explorerだった場合には、実習課題1(5章)のプログラムに「forward」する。