はじめまして。
お世話になります。

以下のようにサーブレットから条件によってJSPファイルを
使い分けようと思っているのですが、うまく出来ません。

  protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, java.io.IOException
  {

    PrintWriter out = response.getWriter();

    out.println("<html>");
    out.println("<head>");
    out.println("<title>タイトル</title>");
    out.println("</head>");
    out.println("<body>");

    RequestDispatcher rd = null;
    if(/* 条件1 */)
    {
      rd = request.getRequestDispatcher("hoge1.jsp");
    }
    else if(/* 条件2 */)
    {
      rd = request.getRequestDispatcher("hoge2.jsp");
    }
    else
    {
      rd = request.getRequestDispatcher("hoge3.jsp");
    }
    out.println("</body>");
    out.println("</html>");

    if(rd != null)
    {
      rd.include(request,response);
    }
  }

このようにすると

<html>

・ サーブレットから出力した部分

</html>

<****>
JSPで出力した部分
</****>

とサーブレットの部分だけ先に出力されてしまいます。

JSPファイルの前後に出力させるにはどのようにすればよいのでしょうか。
よろしくお願い致します。

A 回答 (1件)

// (A)printlnでHTMLタグを出力


out.println("<html>");
out.println("・・・略・・・");

// (B)必要に応じてJSPのRequestDispatcherを取得
// (取得しているだけで何も出力はしていない)
if(/* 条件1 */)
{
rd = request.getRequestDispatcher("hoge1.jsp");
}
・・・略・・・

// (C)</body></html>タグを出力
out.println("</body>");
out.println("</html>");


// (D) 先ほどの(B)で取得したRequestDispatcherを
// インクルード(ここで出力している)
if(rd != null)
{
rd.include(request,response);
}


こういうことですので、</html>の後にインクルードしたJSPの内容が出力されるのは正しく動作しているといっていいと思います。おそらく、getRequestDispatcherした段階で内容が出力されると勘違いしてしまったのではないでしょうか。
 </body>の前にインクルードしたJSPを出力したいのであれば、(C)の前に(D)を実行するようにしてみてはいかがですか。
    • good
    • 0
この回答へのお礼

ああ、なるほど!
その通り勘違いしていました。
includeの意味を全然考えてなかったです(汗
その方法でやってみます。
ありがとうございました。

お礼日時:2005/04/11 22:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報