0

jsp アプリのリダイレクトに問題があります。

私のリダイレクト方法は次のようなものです:

public static void redirectUrl(String url,HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
    request.getSession().getServletContext().getRequestDispatcher("/" + url).forward(request,response);
}

localhost でアプリを起動するとすべて正常に動作しますが、サーバーにデプロイすると次の例外でクラッシュします。

Servlet error
java.lang.IllegalStateException: Response has already been committed
at com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.3.0)].server.http.EvermindHttpServletResponse.resetBuffer(EvermindHttpServletResponse.java:1933)
at com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.3.0)].server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:221)
at app.framework.request.Controller.doPost(Controller.java:50)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.3.0)].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:835)
at com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.3.0)].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:341)
at com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.3.0)].server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:230)
at com.evermind[Oracle Application Server Containers for J2EE 10g (10.1.2.3.0)].server.http.GetParametersRequestDispatcher.forward(GetParametersRequestDispatcher.java:257)

すべてのリダイレクト呼び出しの後に return ステートメントを配置しましたが、機能しません。

誰かが理由を教えてもらえますか?

前もって感謝します。

4

1 に答える 1

1
java.lang.IllegalStateException: Response has already been committed

このエラーは、応答が既に書き込まれている場合に発生します。

この投稿の答えを参照してください。

あなたが使用している「リダイレクト」という用語は、コードごとのリダイレクトではありません。「転送」と呼ばれます。

試す:

request.getRequestDispatcher("/" + url).forward(request, response);

EDIT(詳細説明):

request.getRequestDispatcher(“url”)ディスパッチが現在の HTTP リクエストに関連していることを意味します。

RequestDispatcher reqDispObj = request.getRequestDispatcher("/home.jsp");

パス パラメータは「/」で始まる必要はありません

getServletContext().getRequestDispatcher(“url”)は、ディスパッチが のルートに相対的であることを意味しServletContextます。

RequestDispatcher reqDispObj = getServletContext().getRequestDispatcher("/ContextRoot/home.jsp");

パス パラメータは「/」で始まる必要があります

于 2012-07-26T07:59:03.023 に答える