国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務(wù)器 > Web服務(wù)器 > 正文

在Tomcat中配置404自定義錯誤頁面詳解

2024-09-01 13:51:12
字體:
供稿:網(wǎng)友

一直使用tomcat,今天想到一個問題,自定義404錯誤頁面, 為了獲得很好的用戶感受,是不應(yīng)當(dāng)向用戶暴露404這樣的頁面的, 問題的出發(fā)點(diǎn)是我在Struts2中定義錯誤頁面, 在Struts2中是這樣定義的:

 <default-action-ref name="pagenotfound"></default-action-ref>    <action name="pagenotfound">        <result>/pagenotfound.html</result>  </action> 

這就是說在訪問action是.如果沒有找到action就訪問這個頁面,但是我如果我不用.do或者.action的樣式,而直接使用.jsp或者.html的方式來訪問頁面的請,struts就不會處理了.結(jié)果是404錯誤依然出現(xiàn).
現(xiàn)在已經(jīng)不是struts的處理范圍了,那么這應(yīng)當(dāng)是應(yīng)用的處理范圍,經(jīng)查證,在工程的web.xml中可以設(shè)置自定義錯誤頁面,設(shè)置如下:

<error-page>     <error-code>404</error-code>     <location>/pagenotfound.html</location> </error-page> 

現(xiàn)在再訪問該該工程下面一個不存在的頁面,將跳轉(zhuǎn)到自定義的pagenotfound頁面,這樣,struts中的那個default-action-ref 配置是可以去掉的了.因為404交給tomcat處理了.

然后,然后我輸入http://localhost/asdfasdfafd一個不存在的地址,結(jié)果404依然出現(xiàn),
回頭想一下,剛才我們的web.xml是在某一個應(yīng)用下面的,他處理的應(yīng)當(dāng)是本應(yīng)用的404,而http://localhost/訪問的是tomcat自已的應(yīng)用,那么這個web.xml配置就應(yīng)當(dāng)在webapp/Root/下面的應(yīng)用來配了,

Root目錄下面放著Tomcat的應(yīng)用,把里面換成自已的就行了.
于是現(xiàn)在再進(jìn)行輸入不存在的地址,成功跳向自定義的錯誤頁面.

Tomcat中404/500 錯誤,自定義錯誤頁面

當(dāng)服務(wù)器出現(xiàn)404、500錯誤時候希望能夠給用戶友好的現(xiàn)實(shí)界面
只需要在項目的web.xml中添加一些配置

<error-page><error-code>404</error-code><location>/NotFound404.jsp</location></error-page> <error-page><error-code>500</error-code><location>/NotFound500.jsp</location></error-page>

這樣當(dāng)你在訪問不存在的頁面出錯的頁面時就自動顯示剛才指定的頁面了

<!-- 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 服務(wù)器內(nèi)部錯誤 --><error-page><error-code>500</error-code><location>/error.jsp</location></error-page><!-- java.lang.Exception異常錯誤,依據(jù)這個標(biāo)記可定義多個類似錯誤提示 --><error-page><exception-type>java.lang.Exception</exception-type><location>/error.jsp</location></error-page><!-- java.lang.NullPointerException異常錯誤,依據(jù)這個標(biāo)記可定義多個類似錯誤提示 --><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 規(guī)范聲明了相關(guān)的API,只需要在每個 web 應(yīng)用的 web.xml 里定義??砂凑斟e誤類型、錯誤代碼配置。例如:

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

注意錯誤頁面必須以“/”開頭,這樣任何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 中的變量。從中也可以看到訪問哪個文件出錯,跳到哪個錯誤頁面了,從而進(jìn)行更詳細(xì)、更人性化的錯誤處理。例如,提示可能的正確網(wǎng)址等等。
例如:訪問一個不存在的頁面 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字節(jié),否則IE將不予顯示。因為IE默認(rèn)只顯示大于512字節(jié)的錯誤頁面。Firefox中正常顯示??梢蕴砑右恍┢渌畔?,將頁面大小擴(kuò)充到512字節(jié)以上。如果仍不能顯示,請檢查IE設(shè)置,將該選項選中。

異常處理頁面 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進(jìn)行處理,比如記錄日志、重定向等等。這里把exception trace打印出來了。
500、505 等錯誤頁面的處理類似于404。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昭通市| 焉耆| 沧州市| 宝丰县| 屯昌县| 荥经县| 长宁区| 峨眉山市| 德阳市| 台州市| 仁布县| 郎溪县| 荥阳市| 高密市| 商水县| 昭通市| 胶州市| 灵石县| 朝阳区| 织金县| 绥棱县| 安新县| 城步| 紫金县| 明水县| 易门县| 泰州市| 红桥区| 美姑县| 柏乡县| 灌阳县| 呼伦贝尔市| 南汇区| 金坛市| 左权县| 浪卡子县| 绵竹市| 左云县| 邢台市| 什邡市| 东城区|