【问题标题】:Handling ServletExceptions that occur处理发生的 Servlet 异常
【发布时间】:2013-08-13 02:24:06
【问题描述】:

我正在构建一个简单的 Web 应用程序。在我的 doPost() 方法中,当我转发到 JSP 时,如果发生 ServletException,我会抛出 ServletException。在我的 web.xml 文件中,我声明了一个错误页面来捕获 500 错误。该应用程序在我的 GlassFish 服务器上运行良好,但是当我部署到 Tomcat 服务器时,我被定向到了我的问题.jsp 页面。如何获取有关错误原因的一些详细信息?

这是我的错误页面在 web.xml 中的配置方式:

<error-page>
    <error-code>500</error-code>
    <location>/problem.jsp</location>
</error-page>

【问题讨论】:

    标签: jsp servlets


    【解决方案1】:

    您的问题.jsp 可以访问此请求属性,为您提供有关异常性质的提要:

    • javax.servlet.error.exception

    您可以按如下方式使用它们:

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

    之后您可以通过以下方式窥探异常的类型:

    PrintWriter out = response.getWriter();
    out.println("Exception Type : " +  throwable.getClass( ).getName( ));
    

    资源

    您可以在此web page 上了解更多信息。您会发现一些其他属性,您需要检查有关错误的详细信息。

    【讨论】:

    • 我必须在请求中设置 throwable 吗?像 request.setAttribute("throwable" throwable);
    • 例如在你的 doPost 方法中。您可以通过尝试顺利开始,为此在 doPost 方法中使用简单的System.out.println(throwable.getClass().getName());,您会注意到控制台显示一条信息消息,指示异常类型。
    • 就是这样,服务器不在我的机器上,所以我无法访问控制台。有没有办法可以在抛出 ServletException 之前将 throwable 作为属性传递给 jsp?
    • 发现错误:org.apache.jasper.JasperException:绝对 uri:java.sun.com/jsp/jstl/core 无法在 web.xml 或随此应用程序部署的 jar 文件中解析
    • 你配置 web.xml 的方式会让你得到任何异常(服务器远程无关紧要),给出错误代码 500 的结果。然后你的 question.jsp 可以访问它请求属性并在其上创建一个可抛出对象。你应该在这个problem.jsp中包含所有的异常处理。
    猜你喜欢
    • 2015-08-13
    • 2010-12-24
    • 2014-05-23
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    相关资源
    最近更新 更多