我正在处理根据 geo-location
呈现内容的 servlet 页面,我想同时使用 sendRedirect
和 forward
;例如;您从 France
浏览 example.com/aPage.jsp
;首先,我希望 servlet 将您重定向到 example.com/fr/aPage.jsp
,然后将您转发到 resources
页面。
这是我的 servlet 中的内容:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
....
response.sendRedirect(REDIRECT_URL_BASED_ON_GEO);
// after redirect forward the resources page
RequestDispatcher view = request.getRequestDispatcher(RESOURCES_PAGE);
view.forward(request, response);
...
}
但是我得到:
java.lang.IllegalStateException: Cannot forward after response has been committed
我知道错误出现是因为我不能同时使用sendRedirect
和forward
,但我不知道如何没有这个就可以实现我想要的(如上所述)。
有什么帮助吗?
最佳答案
response.sendRedirect(REDIRECT_URL_BASED_ON_GEO);
// after redirect forward the resources page
在那行之后,您的回复开始写入 clinet。
并且您正在尝试向其中添加其他数据。
The server has already finished writing the response header and is writing the body of the content, and which point you are trying to write more to the header - of course it cant rewind.
所以,处理servlet时的拇指规则是
在 redirect
或 forward
添加 return 语句之前完成您的逻辑。因此执行到此结束。
关于java - 小服务程序 : Cannot forward after response has been committed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211497/