(转)web.xml 配置404和500异常的自定义页面

(转)web.xml 配置404和500错误的自定义页面
web.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <web-app version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     
<error-page>
     <error-code>404</error-code>
    <location>/building.jsp</location>
</error-page>

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>
    
</web-app>



JSP页面的关键在于

1 isErrorPage="true"

2 response.setStatus(HttpServletResponse.SC_OK);

building.jsp
<%@ page language="java" contentType="text/html; charset=GBK" isErrorPage="true" pageEncoding="GBK"%>
<%response.setStatus(HttpServletResponse.SC_OK);

      %>
<%
/**
* 本页面是在客户查找的页面无法找到的情况下调用的
*/
response.setStatus(HttpServletResponse.SC_OK);
 %>
<body>
正在制作... <a href="javascript:history.go(-1)">返回</a>
<br/>
也可能页面连接更改了,请按 F5 键刷新整个页面看看,特别是菜单!

</body>


error.jsp
<%@ page language="java" contentType="text/html; charset=GBK" isErrorPage="true" pageEncoding="GBK"%>
<%@ page import="java.io.*,java.util.*"%>
<%response.setStatus(HttpServletResponse.SC_OK);

      %>
<body>
程序发生了错误,有可能该页面正在调试或者是设计上的缺陷.<br/>
你可以选择<br/> <a href=<%=request.getContextPath()+"/forum/new.jsp" %>>反馈</a>
提醒我... 或者<br/><a href="javascript:history.go(-1)">返回上一页</a>
<hr width=80%>
<h2><font color=#DB1260>JSP Error Page</font></h2>

<p>An exception was thrown: <b> <%=exception.getClass()%>:<%=exception.getMessage()%></b></p>
<%
System.out.println("Header....");
Enumeration<String> e = request.getHeaderNames();
String key;
while(e.hasMoreElements()){
  key = e.nextElement();
  System.out.println(key+"="+request.getHeader(key));
}
System.out.println("Attribute....");
e = request.getAttributeNames();
while(e.hasMoreElements()){
  key = e.nextElement();
  System.out.println(key+"="+request.getAttribute(key));
}

System.out.println("Parameter....");
e = request.getParameterNames();
while(e.hasMoreElements()){
  key = e.nextElement();
  System.out.println(key+"="+request.getParameter(key));
}
%>
111<%=request.getAttribute("javax.servlet.forward.request_uri") %><br>
<%=request.getAttribute("javax.servlet.forward.servlet_path") %>

<p>With the following stack trace:</p>
<pre>
<%exception.printStackTrace();
      ByteArrayOutputStream ostr = new ByteArrayOutputStream();
      exception.printStackTrace(new PrintStream(ostr));
      out.print(ostr);
    %>
</pre>
<hr width=80%>
</body>


转自:http://blog.csdn.net/java2000_net/archive/2007/12/29/2000965.aspx