繁体   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