簡體   English   中英

處理servlet異常

[英]Handling servlets exceptions

我在處理Web Servlet應用程序中的異常時遇到麻煩。 我創建了ErrorHandler servlet,它處理所有傳入的異常並在web.xml文件中添加了條目:

<servlet>
    <servlet-name>ErrorHandler</servlet-name>
    <servlet-class>ServletPackage.ErrorHandler</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ErrorHandler</servlet-name>
    <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/ErrorHandler</location>
</error-page>

問題是服務器根本不調用ErrorHandler servlet。 Glassfish只是在控制台中引發Exception,並且Web瀏覽器刷新了引發異常的servlet(由於未處理的異常而沒有數據)。

Warning:   StandardWrapperValve[SessionChecker]: Servlet.service() for servlet SessionChecker threw exception
javax.servlet.ServletException: Forced exception thrown
    at ServletPackage.SessionChecker.processRequest(SessionChecker.java:158)
    at ServletPackage.SessionChecker.doPost(SessionChecker.java:174)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
   .
   .
   .

有什么建議么?

我有同樣的問題。 您在網上看到的所有示例都是示例,當我嘗試使用它時,似乎似乎完全忽略了我的處理程序servlet。

確保我的錯誤處理servlet同時實現了doGet和doPost的工作是什么:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    processError(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    processError(request, response);
}

private void processError(HttpServletRequest request, HttpServletResponse response) throws IOException
{
    Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception");
    ...
}

我基於servlet的示例僅實現了doGet。 因此,當我的servlet被加載並調用錯誤時,這些錯誤什么也沒有發生。 實現doPost以相同的方式處理錯誤對我來說解決了這個問題。

如果從Web服務器拋出異常,則在web.xml中聲明的異常處理程序將永遠不會處理該異常處理程序。

web.xml中的異常處理程序用於處理進入Web服務器的請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM