Tomcat中404/500 错误,自定义错误页面

Tomcat中404/500 错误,自定义错误页面

 

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

 

Xml代码   收藏代码
  1.   
  2. <error-page>  
  3. <error-code>400error-code>  
  4. <location>/error.jsplocation>  
  5. error-page>  
  6.   
  7. <error-page>  
  8. <error-code>404error-code>  
  9. <location>/error.jsplocation>  
  10. error-page>  
  11.   
  12. <error-page>  
  13. <error-code>500error-code>  
  14. <location>/error.jsplocation>  
  15. error-page>  
  16.   
  17. <error-page>  
  18. <exception-type>java.lang.Exceptionexception-type>  
  19. <location>/error.jsplocation>  
  20. error-page>  
  21.   
  22. <error-page>  
  23. <exception-type>java.lang.NullPointerException exception-type>  
  24. <location>/error.jsplocation>  
  25. error-page>  
  26.   
  27. <error-page>  
  28. <exception-type>javax.servlet.ServletExceptionexception-type>  
  29. <location>/error.jsplocation>  
  30. error-page>  

 

 

具体的如下:

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

   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">

Welcome to Tomcat

     Welcome to Tomcat


404
/errorpages/404.jsp
  


  java.lang.Exception
  /errorpages/exception.jsp
 


注意错误页面必须以“/”开头,这样任何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.*" %>


404 page


<%
    Enumeration attributeNames = request.getAttributeNames();
    while (attributeNames.hasMoreElements())
    {
        String attributeName = attributeNames.nextElement();
        Object attribute = request.getAttribute(attributeName);
   out.println("request.attribute['" + attributeName + "'] = " + attribute); 
    }
%>

代码中输出了所有的 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

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


异常处理页面 exception.jsp:

<%@ page contentType="text/html; charset=UTF-8" isErrorPage="true" %>
<%@ page import="java.io.*" %>


exception page




<%
response.getWriter().println("Exception: " + exception); 

if(exception != null)
{
   response.getWriter().println("
"); 
   exception.printStackTrace(response.getWriter()); 
   response.getWriter().println("
"); 
}

response.getWriter().println("
"); 
%>

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

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


转载: http://liaojuncai.iteye.com/blog/2034992

你可能感兴趣的:(WEB)