2016-03-15 37 views
2

有沒有辦法從jsp:include頁面的內部獲取其請求頁面以響應HTTP 500錯誤?我已經嘗試過使用response.sendError(418, "I'm a teapot.");,但只適用於包含jsp:include的JSP,並且只有在第一行時纔有效,因爲在響應提交後無法調用它。我所擁有的是這樣的:從JSP內部返回500錯誤包括

的index.jsp:

// other HTML 

<jsp:include page="Exapmle.jsp"> 
    <jsp:param name="aVariable" value="aValue" /> 
</jsp:include> 

// other HTML 

Example.jsp:

<% 
    String aVariable = request.getParameter("aVariable"); 
    if (aVariable != null && !aVariable.trim().isEmpty) { 
     // code to generate content 
     %><%=someContent%><% 
    } else { 
     response.sendError(418, "I'm a teapot"); 
    } 
%> 

那麼,有沒有辦法做到這一點?我懷疑JSP是如何工作的,但希望在某處能夠提供幫助。另外,servlet不是一個選項(至少現在是這樣)。

回答

1

如果你得到它的工作,你不應該依靠它來始終工作在所有平臺和未來的更新。正如您正確表述的那樣:一旦提交了響應(例如,所有HTTP標頭正在到客戶端),服務器就無法再添加任何其他HTTP標頭。別說改變狀態碼。

這就是爲什麼JSP被認爲是應用程序的VIEW層而不是CONTROLLER的原因。在JSP中編寫所有應用程序邏輯的時代早已結束,您應該在某處(如果僅在servlet中,但可能在更強大的抽象/框架中)處理正確的請求處理 - 決定結果並重定向到錯誤消息或該代碼中的適當可視化。

JSP很適合呈現您發送的內容以及正確的狀態碼。不決定要發送哪個狀態碼。

+0

哦,我知道。我不喜歡需要這樣做,但不幸的是我現在的任務。我們正在從Java servlet切換到.NET MVC的過程中,所以這應該是一個快速修復,在完成切換之前完成某些工作。它的原因是漫長而煩人的,但正如我的經理希望這樣做。 – Daevin

+0

然後,您仍然應該將檢測到的錯誤狀態向上移動。如果您無法將其推廣到適當的位置,請將其移至包含jsp的位置。這是醜陋的錯誤,但似乎是爲你走的路。 –

相關問題