我想实现这个
在我的page1.jsp中,我有一个链接,该链接触发一个servlet
<a href="Servlet">link1</a>
因此,当用户按下link1时,servlet和其他我想做的事情有两件
1将一个对象传递到下一页page2.jsp,然后
2重定向用户到page2.jsp
在Servlet中,我写道:
request.setAttribute("cis", myObjet);
RequestDispatcher disp = getServletContext().getRequestDispatcher("/page2.jsp");
disp.forward(request, response);
response.sendRedirect("page2.jsp");
运行应用程序后,我在控制台中收到一个错误,上面写着:
在提交响应后无法调用sendRedirect()
我读了一些与此相关的主题,但我还没有解决它。此外,应用程序仍在继续工作,尽管我在控制台中遇到了这个错误。。。非常感谢!
如果您必须有多个重定向行来检查每个行的条件,为了不获得异常,您应该控制响应的提交。
HttpServletResponse response = (HttpServletResponse) getResponse();
if (!response.isCommitted()){
// redirect or dispatch whereever you want
}
首先,在使用了forward()
之后,不能调用sendRedirect()
。所以,你得到了例外。
然而,似乎确实不需要使用sendRedirect()
。您似乎认为您需要在forward()
之后使用sendRedirect()
,因为您在这两个页面中都使用了相同的页面。事实上,情况并非如此。
只需删除sendRedirect
行,您就可以了。
另请参阅:
- java.lang.IollegalStateException:提交响应后无法(forward|sendRedirect|create session)
您试图做的根本错误。你不能在转发后进行重定向,反之亦然。你可以做正向或重定向。
阅读这些链接:
http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html#forward(javax.servlet.ServletRequest,javax.servlets.ServletResponse)
http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletResponse.html#sendRedirect(java.lang.String)
http://javapapers.com/jsp/difference-between-forward-and-sendredirect/
希望这能有所帮助。
Sahil
您可以使用rd.include(req,res)的组合;和res.sendRedirect(-);同时,但你不能与rd.forward(req,res)的组合;和res.sendRedirect(-);同时因为两者都转发到了新页面。