2011-05-25 89 views
3

我有一個這樣的問題:我已經在web.xml中設置了java.lang.Exception類型的dafault錯誤頁面,因此它必須顯示在servlet和jsp中的所有異常中。但是當我想測試這個頁面時(我關閉了連接),它不會在瀏覽器中顯示。在測試過的servlet中我使用了數據庫,所以如果沒有連接,它會拋出異常。在servlet中,我發現了這個例外,並且throw new ServletException()。首先我也會在catch塊中記錄消息,然後拋出一個異常。那麼爲什麼我的tomcat不顯示這個錯誤頁面?取而代之的是它是空白頁,並在服務器輸出,我可以看到這些錯誤消息web.xml中的錯誤頁面

編輯

<error-page> 
     <exception-type>java.lang.Exception</exception-type> 
     <location>/errorPages/InternalError.jsp</location> 
    </error-page> 

我保存在/ errorPages 錯誤頁面,並且必須顯示稱爲InternalError該頁面。 JSP

這頁有移動到其使用E1至顯示來自數據庫的數據的jsp頁面後顯示其在該JSP秋天擲對象,它是在會話

+0

向我們展示'web.xml'片段。 – 2011-05-25 19:32:56

回答

2

當響應已由servlet或導致異常的JSP提交時,您將收到一個空白頁面。換句話說,當HTTP響應頭已經被髮送到網頁瀏覽器。這是不歸的一點

爲了防止這種情況,你需要確保你開始寫,只有當所有業務代碼已經完成它的工作響應(更好的,只是不這樣做,在servlet,但是可以轉發到JSP)並且您的JSP不包含任何單行業務代碼(通常由scriptlets<% %>)代表的而不是

所以,如果你在一個servlet

response.getWriter().write("blah"); 
throw new ServletException("epic fail"); 

,或者例如做到這一點,當異常被「半路」甩JSP

<p>Some HTML</p> 
<% throw new ServletException("epic fail"); %> 
<p>Some more HTML</p> 

那麼風險是很大的,你得到一個空白頁。

+0

但如何以這種方式捕捉jsp中的錯誤? – maks 2011-05-25 19:50:10

+0

通過在servlet而不是JSP中執行業務工作。 JSP只能用於演示。另請參閱http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files – BalusC 2011-05-25 19:52:32

+0

我沒有jsp中的業務邏輯。 Jsp只包含可訪問數據庫的對象的格式化輸出,如下所示: 其中Obj是具有訪問數據庫的方法getInfo的類 – maks 2011-05-25 20:01:29