代码比解释更被COMMITED以下错误:强制响应在servlet
“无法响应一直致力于向前后”
因为(1)设置jsp使用,(3)尝试设置另一个jsp。 (注意:我知道这是一个不好的例子,但这是提供一个最小的代码)。
我要的是 “停止” 的servlet来处理之后的任何进一步的说明(1):
- (1)为
- (2)写的东西说我想要的(1)使用
- (3)不应理解
我怎么能这样做?
代码比解释更被COMMITED以下错误:强制响应在servlet
“无法响应一直致力于向前后”
因为(1)设置jsp使用,(3)尝试设置另一个jsp。 (注意:我知道这是一个不好的例子,但这是提供一个最小的代码)。
我要的是 “停止” 的servlet来处理之后的任何进一步的说明(1):
我怎么能这样做?
一个简单的解决办法是有这样的事情:
this.getServletContext.getRequestDispatcher("..../foo.jsp")
.forward(request, response);
if(!response.isCommitted()) {
this.getServletContext.getRequestDispatcher("..../bar.jsp")
.forward(request, response);
}
布尔
isCommited()
:返回boolean值,指示反应一直承诺。一个 承诺的响应已经有其状态代码和标题 书面。
或者,如果你上面说,代码的第一个块是依赖于用户具有有限权限:
if (isUserRestricted()) {
this.getServletContext.getRequestDispatcher("..../foo.jsp")
.forward(request, response);
} else {
this.getServletContext.getRequestDispatcher("..../bar.jsp")
.forward(request, response);
}
好的,第一的例外是当你将请求转发引起例如关闭PrintWriter或刷新ServletOutputStream,然后转发。您可以在Request Dispatcher中使用include而不是forward来调用资源,但返回给调用者。所以我建议你有一个if条件来检查是否要转发请求,或刷新响应。
我对你的例子有点困惑 - 如果你总是想要1)被使用,为什么不删除3?如果有条件检查,为什么不把它们都包装在'if/else'块中? – anotherdave
@anotherdave(1)从类的静态方法中调用,以便在用户不打算访问页面时重定向,这样我只需告诉我的团队在他们编码的每个servlet的开始处复制粘贴功能,避免在这里和那里阻塞所有的代码。 – user544262772