首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理servlets异常

处理servlets异常
EN

Stack Overflow用户
提问于 2015-05-31 19:36:01
回答 2查看 1.4K关注 0票数 0

我在处理web servlet应用程序中的异常时遇到了问题。我已经创建了ErrorHandler servlet,它处理所有传入的异常并在web.xml文件中添加条目:

代码语言:javascript
复制
<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只是在控制台中抛出异常,web浏览器刷新抛出异常的servlet (由于未处理的异常没有数据)。

代码语言:javascript
复制
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)
   .
   .
   .

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2016-03-18 21:42:44

我也有同样的问题。正如您所展示的,web上到处都是示例,当我尝试它时,似乎完全忽略了我的处理程序servlet。

是什么让我确保我的错误处理servlet同时实现了doGet和doPost:

代码语言:javascript
复制
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来处理错误为我解决了这个问题。

票数 1
EN

Stack Overflow用户

发布于 2015-05-31 19:53:51

如果异常是从您的web服务器抛出的,那么您在web.xml中声明的异常处理程序永远不会处理它。

web.xml中的异常处理程序用于处理进入web服务器的请求。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30556924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档