2010-02-10 71 views
3

我想將所有的錯誤我Errorsevlet而不顯式指定所有代碼。有沒有辦法做到這一點?多個錯誤代碼配置的web.xml

<error-page> 
    <error-code>400</error-code> 
    <location>/servlet/com.abc.servlet.ErrorServlet</location> 
</error-page> 

**在到達ErrorServlet後,如何獲得servlet中錯誤的堆棧跟蹤。這樣我就可以在出現錯誤時通過電子郵件發送詳細信息**

回答

0
<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/servlet/com.ibm.eisa.servlet.ErrorServlet</location> 
</error-page> 

試試這個,所有的錯誤都會被捕獲(500的)不是404等

+0

謝謝..如果我想捕獲所有400的則是如何配置?我應該爲所有人編寫單獨的錯誤頁面條目嗎? – coder247 2010-02-10 14:31:21

+0

是的,你必須編寫單獨的條目。 – 2010-02-10 14:39:03

+0

有什麼辦法從servlet獲取堆棧跟蹤?發送郵件的詳細信息... – coder247 2010-02-10 14:40:33

2

您需要明確指定了所有需要的代碼,不支持通配符機制。沒有那麼多的代碼,這裏是一個完整的list

要打印出堆棧跟蹤(在評論例如,用於調試),你可以做這樣的事情:

<%@ page isErrorPage="true" import="java.io.*"%> 
<body> 
<p>Sorry, there was an error.</p> 
<!-- The full stacktrace follows:--> 
<!-- 
<% 
if (exception != null) { 
    exception.printStackTrace(new PrintWriter(out)); 
} 
%> 
--> 
</body> 
10

如果你可以升級,因爲Servlet的3.0有可能有一個通用的錯誤頁面爲所有錯誤,甚至是那些異常引起的(如404,401等)。只要省略<error-code><exception-type>乾脆讓你只有一個<location>

<error-page> 
    <location>/errorServlet</location> 
</error-page> 

注意,我更換了網址,以避免使用Tomcat的內置的和過時InvokerServlet

+0

即使最新的Tomcat 7.0.27也不支持這個「univeral」錯誤頁面... BalusC,您的Tomcat運行的是哪個版本? – 2012-04-13 10:26:18

+0

已確認,尚未受Tomcat支持(https://issues.apache.org/bugzilla/show_bug.cgi?id=52135)。 – 2012-04-13 10:45:23

+0

Working for Glassfish 4 – mboullouz 2015-07-26 21:56:56

0

我有同樣的擔憂,並經過一番研究,我發現,不幸的是,沒有明確的要求,支持默認的錯誤頁面的Servlet中的3.0規格。

誤導性的是,「錯誤代碼」或「異常類型」是XSD中的可選標記,因此我們傾向於認爲默認錯誤頁面將是沒有「錯誤代碼」且沒有「異常類型」標記的頁面。

某些應用程序服務器(如GlassFish的)表現如我們所願,採取默認的錯誤頁面,然後按照它們覆蓋默認的錯誤頁面,具體的錯誤頁面的順序。

我還測試了這款在WebLogic 12c和我無法得到它的工作是在GlassFish。下面的文章給出了關於Tomcat的更多線索。

請參見:bz.apache.org/bugzilla/show_bug.cgi?id=52135