在做Java Web程序時候,如果出錯了,常常會在頁面上打印出錯誤的堆棧內 存信息,在開發階段對調試程序很有幫助,但是在運營環境下,這樣的處理很不 友好,非開發人員看了都會傻眼。
這裡給出一個簡單的處理方式,使用錯誤頁面來處理。
一、創建兩個常見的HTML錯誤信息頁面:
404.html
<body>
所訪問的資源不存在:對不起,所請求的資源不存在 ! <br>
</body>
500.html
<body>
服務器內部錯誤:對不起,服務器忙! <br>
</body>
二、配置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">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ErrServlet</servlet-name>
<servlet-class>lavasoft.errtest.ErrServlet</servlet- class>
</servlet>
<servlet-mapping>
<servlet-name>ErrServlet</servlet-name>
<url-pattern>/servlet/ErrServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.html</location>
</error-page>
</web-app>
三、創建一個測試的Servlet,用來拋500錯誤的用的,呵呵。
package lavasoft.errtest;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ErrServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
throw new RuntimeException("------");
}
}
四、測試
1、當訪問不存在的資源時候,服務器會返回404錯誤狀態,這樣會自動轉向 404對應的錯誤頁面404.html,將其發送給客戶端。
2、當服務器處理錯誤時候,會返回500錯誤狀態碼,這樣自動轉向500對應的 錯誤頁面500.html,將其發送給客戶端。
這樣,不費多大勁,就把異常的不友好問題解決了!
當然,這僅僅是最簡單的最懶惰的一種處理方式,還有一種方式值得推薦: 那就是在有好提示的頁面不直接顯示錯誤堆棧信息,只有當請求查看錯誤詳細信 息時候才點擊才顯示出來,這個效果是通過js實現的。
本文配套源碼