代碼比解釋更被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