Servlet JSP异常/错误处理

时间:2014-03-31 17:48:54

标签: java jsp servlets

我正在尝试使用JSP errorpage配置来处理异常。然而它失败了。请指出我做错的地方。 这不是任何实时应用程序,我正在尝试一个场景。

最初的jsp页面:

的Page1.jsp

<body>
    <form action="process.do" method="post">
        <input type="Submit" />
    </form>
</body>

的web.xml

<servlet>
    <servlet-name>servlet1</servlet-name>
    <servlet-class>com.examples.example.Servlet1</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>servlet1</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<error-page>
    <exception-type>javax.servlet.ServletException</exception-type>
    <location>/errorpage.jsp</location>
</error-page>
<error-page>
    <exception-type>java.sql.SQLException</exception-type>
    <location>/errorpage.jsp</location>
</error-page>
<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/errorpage.jsp</location>
</error-page>

Servlet1.java

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            String s = null;
            if (s.equals("")) {

            }
        } catch (Exception ex) {
            throw new ServletException("my custom exception message");
        }
    }

的errorPage.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isErrorPage='true'%>
<html>
<head>
<title>Error Page</title>
</head>
<body>
    <%
        out.print("Error Message : ");
        out.print(exception.getMessage());
    %>
</body>
</html>

问题 - 我希望显示此错误页面。但相反,我得到一个HTTP 500错误,这是我在控制台日志中看到的:

SEVERE: Servlet.service() for servlet [servlet1] in context with path [/simpleServlet] threw exception [my custom exception message] with root cause
javax.servlet.ServletException: my custom exception message
    at com.examples.example.Servlet1.doPost(Servlet1.java:48)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)

1 个答案:

答案 0 :(得分:2)

这是我在下面的博客链接上的一条评论中找到的

使用&#34; errorpage&#34;存在严重问题。 &#34; isErrorpage&#34;并且在web.xml文件中声明错误页面,它在Internet Explorer至少版本6和7中没有正确显示,而是显示它自己的页面404的IE错误页面和内部服务器错误500.更好的方法是使用Spring异常处理和为Spring的异常处理程序定义默认错误视图。通过这种方式,您将在所有浏览器上获得一致的行为,因为错误页面不会被视为错误页面而是被视为另一个jsp页面。我花了很多时间用IE6来弄清楚这个bug,你可以节省宝贵的时间。还有另一种理论认为,如果错误页面的大小小于512字节,IE和chrome将显示自己的错误页面。我测试了这个,但在我的情况下,即使大小超过512字节,它仍然显示&#34;内部服务器错误-500&#34;唯一有效的解决方案是使用Spring异常处理

了解详情:http://javarevisited.blogspot.com/2012/01/error-page-in-java-web-application.html#ixzz2xZ35ziPQ