2012-07-26 114 views
0

我在jsp應用程序中重定向時遇到了一些問題。通過servlet重定向JSP

我重定向的方法是這樣的:

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

當我開始在本地主機上所有應用程序工作正常,但是當我部署在服務器上它與此異常崩潰:

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語句,但它不起作用。

有人能告訴我爲什麼嗎?

在此先感謝。

+0

你能提供代碼,告訴您如何調用從其他地方這種方法嗎?謝謝 – 2012-07-26 08:58:57

回答

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

響應已寫入時出現此錯誤。

查看本帖中的answer。 。

術語重定向」您使用的是不是重定向按您的code.Its所謂的 「轉發」

嘗試:

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

EDIT(DetailedExplanation):

request.getRequestDispatcher(「url」)指派遣是相對於當前的HTTP請求。

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

路徑參數不必以「/」開頭

getServletContext().getRequestDispatcher(「url」)表示分派相對於ServletContext的根。

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

path參數必須開始一個「/」

+0

是的,我已經看到這篇文章,但不幫助我。爲什麼?因爲我找到了使用rediect方法的所有地方,並且在返回之後放置。我認爲別的不對。 – 2012-07-26 08:04:59

+0

@JordanBorisov:你能提供更多的代碼嗎?你提供的代碼不足以識別原因。 – 2012-07-26 08:36:51

+0

好吧我想我發現了問題,我必須使用request.getRequestDispatcher ...才能正常工作:請參閱網址:http://geekexplains.blogspot.com/2008/06/difference-between-forward-and.html – 2012-07-26 09:08:22