zoukankan      html  css  js  c++  java
  • Tomcat中404/500 错误,自定义错误页面

    当服务器出现404、500错误时候希望能够给用户友好的现实界面 
    只需要在项目的web.xml中添加一些配置

    <!-- 400错误 -->
    <error-page>
    <error-code>400</error-code>
    <location>/error.jsp</location>
    </error-page>
    <!-- 404 页面不存在错误 -->
    <error-page>
    <error-code>404</error-code>
    <location>/error.jsp</location>
    </error-page>
    <!-- 500 服务器内部错误 -->
    <error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
    </error-page>
    <!-- java.lang.Exception异常错误,依据这个标记可定义多个类似错误提示 -->
    <error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
    </error-page>
    <!-- java.lang.NullPointerException异常错误,依据这个标记可定义多个类似错误提示 -->
    <error-page>
    <exception-type>java.lang.NullPointerException </exception-type>
    <location>/error.jsp</location>
    </error-page>
    
    <error-page>
    <exception-type>javax.servlet.ServletException</exception-type>
    <location>/error.jsp</location>
    </error-page>

    具体的如下:

    Tomcat 的错误页面是由 org.apache.catalina.valves.ErrorReportValve 类输出来的。如果想自定义错误页面,不需要修改该类。Servlet 规范声明了相关的API,只需要在每个 web 应用的 web.xml 里定义。可按照错误类型、错误代码配置。例如:

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
       version="2.5">
    <display-name>Welcome to Tomcat</display-name>
    <description>
         Welcome to Tomcat
    </description>
    <error-page>
    <error-code>404</error-code>
    <location>/errorpages/404.jsp</location>
    </error-page>  
    
    <error-page>
      <exception-type>java.lang.Exception</exception-type>
      <location>/errorpages/exception.jsp</location>
     </error-page>
    
    </web-app>

    </web-app>

    注意错误页面必须以“/”开头,这样任何path的404错误页面及exception错误都会映射到这两个文件。然后在本web引用的errorpages下面放置404.jsp, exception.jsp两个文件。

    错误页面 404.jsp:

    <%@ page contentType="text/html; charset=UTF-8" %>
    <%@ page import="java.io.*" %>
    <%@ page import="java.util.*" %>
    <html>
    <header>
    <title>404 page</title>
    <body>
    <pre>
    <%
        Enumeration<String> attributeNames = request.getAttributeNames();
        while (attributeNames.hasMoreElements())
        {
            String attributeName = attributeNames.nextElement();
            Object attribute = request.getAttribute(attributeName);
       out.println("request.attribute['" + attributeName + "'] = " + attribute); 
        }
    %>
    </pre>

    代码中输出了所有的 request 中的变量。从中也可以看到访问哪个文件出错,跳到哪个错误页面了,从而进行更详细、更人性化的错误处理。例如,提示可能的正确网址等等。

    例如:访问一个不存在的页面 page_not_exist.html,显示的信息为:

    request.attribute['javax.servlet.forward.request_uri'] = /page_not_exists.html
    request.attribute['javax.servlet.forward.context_path'] = 
    request.attribute['javax.servlet.forward.servlet_path'] = /page_not_exists.html
    request.attribute['javax.servlet.forward.path_info'] = /errorpages/404.jsp
    request.attribute['javax.servlet.error.message'] = /page_not_exists.html
    request.attribute['javax.servlet.error.status_code'] = 404
    request.attribute['javax.servlet.error.servlet_name'] = default
    request.attribute['javax.servlet.error.request_uri'] = /page_not_exists.html

    异常处理页面 exception.jsp:

    <%@ page contentType="text/html; charset=UTF-8" isErrorPage="true" %>
    <%@ page import="java.io.*" %>
    <html>
    <header>
    <title>exception page</title>
    <body>
    <hr/>
    <pre>
    <%
    response.getWriter().println("Exception: " + exception); 
    
    if(exception != null)
    {
       response.getWriter().println("<pre>"); 
       exception.printStackTrace(response.getWriter()); 
       response.getWriter().println("</pre>"); 
    }
    
    response.getWriter().println("<hr/>"); 
    %>

    注意isErrorPage熟悉必须为true,才能使用exception对象。exception即捕捉到的异常。此处可以对exception进行处理,比如记录日志、重定向等等。这里把exception trace打印出来了。

    500、505 等错误页面的处理类似于404。

    注意,该错误页面必须大于512字节,否则IE将不予显示。因为IE默认只显示大于512字节的错误页面。Firefox中正常显示。可以添加一些其他信息,将页面大小扩充到512字节以上。如果仍不能显示,请检查IE设置,将该选项选中。

  • 相关阅读:
    JDBC事务
    JDBC连接池和DBUtils
    原生JDBC
    基本的查询语句
    多表查询
    mysql单表
    基础加强_XML
    基础加强_注解_类加载器_动态代理
    页面加载loading动画
    移动端手动控制页面高度
  • 原文地址:https://www.cnblogs.com/alloevil/p/6208385.html
Copyright © 2011-2022 走看看