我在我的Web应用程序中使用Jetty Websockets.
当我试图重定向到注销jsp时,我收到此错误
oejs.ServletHandler:/test
java.lang.IllegalStateException: Committed
at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1069)
at javax.servlet.ServletResponseWrapper.resetBuffer(ServletResponseWrapper.java:232)
at org.eclipse.jetty.http.gzip.GzipResponseWrapper.resetBuffer(GzipResponseWrapper.java:273)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:199)
at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:98)
Run Code Online (Sandbox Code Playgroud)
这是我重定向的方式
RequestDispatcher rd = request.getRequestDispatcher("logoff.jsp");
rd.forward(request, response);
Run Code Online (Sandbox Code Playgroud)
这个错误不可重现,但你可以告诉我什么时候可能发生?
Gra*_*ray 13
java.lang.IllegalStateException:已提交
我以为我会对异常的含义提供更一般的解释.首先,Jetty应该以异常消息为耻.它对开发人员几乎没有帮助,除非他们已经知道它实际意味着什么.例外应该是这样的:
java.lang.IllegalStateException:响应头已经发送.您是否在发送内容后尝试返回结果?
通常,当您去电话时会发生此异常:
resp.getOutputStream(); // or getWriter()
Run Code Online (Sandbox Code Playgroud)
然后尝试重定向或其他东西:
resp.sendRedirect("/someOtherUrl");
// or
return new ModelAndView("redirect:/someOtherUrl");
Run Code Online (Sandbox Code Playgroud)
一旦你得到的OutputStream还是Writer这样你就可以写体字节的客户端,码头已提交响应和发送HTTP 200和相关的头,所以它可以开始返回主体的字节.一旦发生这种情况,您就无法进行重定向,也无法对状态代码或标头进行任何其他更改.
一旦返回body字节,正确的做法是null从处理程序返回而不是a ModelAndView(...)或只是更改处理程序返回void.
小智 1
发生这种情况是因为您的响应已经处理了重定向请求,您正在尝试修改已提交的响应。
有两种一般方法可以解决这个问题:
| 归档时间: |
|
| 查看次数: |
16463 次 |
| 最近记录: |