A. spring mvc 通過<error-page>處理404,怎麼記錄造成404的請求
如何定義404
404,說白了就是找不到頁面,那麼如何定義「找不到」呢?
我們可以通過源代碼來看看Spring MVC如何定義「404」的:
// Determine handler for the current request.
mappedHandler = getHandler(processedRequest, false);
if (mappedHandler == null || mappedHandler.getHandler() == null) {
noHandlerFound(processedRequest, response);
return;
}
getHandler是根據請求的url,通過handlerMapping來匹配到Controller的過程。
如果匹配不到,那麼就執行noHandlerFound方法。這個方法很簡單,返回一個404的錯誤代碼。
我們的Web容器,比如tomcat,會根據這個錯誤代碼來生成一個錯誤界面給用戶。
那麼,我們如何自定義這個界面呢?
重寫noHandlerFound方法
最先想到的肯定是重寫noHandlerFound方法,這個方法是protected,可以重寫。
我們需要將頁面重定向到我們自定義的404界面,那麼只需要
@Override
protected void noHandlerFound(HttpServletRequest request,
HttpServletResponse response) throws Exception {
response.sendRedirect(request.getContextPath() + "/notFound");
}
這里我們的Controller里需要定義一個@requestMapping("/notFound")的這么一個方法,用來返回一個404頁面
或者,這里應該可以採用直接訪問靜態文件的方法。
另外,也可以通過拋出一個異常
這樣我們就實現了自定義的404頁面。那麼,還有別的方法嗎?
利用Spring MVC的最精確匹配
Spring MVC對於url的匹配採用的是一種叫做「最精確匹配的方式」,舉個例子
比如我們同時定義了「/test/a」, "/test/*",那麼若請求的url結尾為/test/a,那麼則會匹配精確的那個,也就是"/test/a"
我們是不是可以利用這個特點來找到那些找不到的頁面?
1、首先我們定義一個攔截所有url的規則@requestMapping("*"),那麼實際上不存在找不到的頁面了,也就是永遠不會進入noHandlerFound方法體內
2、後面的步驟和平時一樣,為別的請求都配置上@requestMapping
那麼請求過來,要麼進入我們精確匹配的method(也就是找的到的),要麼進入@requestMapping("*)攔截的方法體內(也就是找不到的)
那麼我們只要讓@requestMapping("*)攔截的這個方法返回一個自定義的404界面就OK了~
利用web容器提供的error-page
還記得之前提到的web容器會提供一個404的默認界面嗎?
其實我們完全可以替換成我們自己的界面,那麼看起來這種方法應該是最簡單的了。
只需要在web.xml文件中寫上如下代碼就可以了:
<error-page>
<error-code>404</error-code>
<location>/resource/view/404.htm</location>
</error-page>
不過值得注意的是,這里配置的的location其實會被當成一個請求來訪問。
那麼我們的DispatcherServlet會攔截這個請求而造成無法訪問,此時的結果是用戶界面一片空白。
所以這里的404.htm其實是一個靜態資源,我們需要用訪問靜態資源的方式去訪問。
而在我的Spring MVC里,resource目錄下的文件都是不會被攔截的
比較三種方式的區別
1、最方便:那肯定是第三種了,我們只需要提供一個靜態頁面即可
2、最快捷:第一種肯定最慢,因為它會發起2個請求。第二種和第三種應該差不多
3、最靈活:從靈活性上來看,第三種肯定是最缺乏的,但是其實對於404來說並不是需要經常變化的,不過也保不準可能可以允許用戶自定義404界面等,這里一、二兩種方式則提供了靈活性。
4、通用性:第三種應該是最通用了,而一、二 兩種則要依賴Spring MVC
B. 在開發JSP過程中 設置顯示錯誤信息頁面問題(web.xml配置error page)。具體看問題補充
你用的是什麼框架,用的是struts還是spring,他們都有錯誤視圖配置,具體你自己查資料;如果你用的是純的servlet,那麼實現異常過濾器,在這里指定錯誤視圖~!用web.xml配置不管用的
C. java web無web.xml怎樣配置error-page
你使用spring mvc肯定會有web.xml不然不可能運行,下面的方法能夠滿足你的需求
<error-page>
<error-code>404</error-code>
<location>/jsp/error/notFound.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/jsp/error/codeError.jsp</location>
</error-page>
<error-page>
<location>/jsp/error/xxxxxxError.jsp</location>
<exception-type>java.lang.xxxxx</exception-type>
</error-page>
其中每一種錯誤都可以通過<exception-type>指定具體的類型
D. javaweb怎麼實現根據錯誤碼調轉到指定頁面
<!-- 異常配置 -->
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/error.jsp</location>
</error-page>
<!-- 找不到頁面配置 -->
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
如果是多個,可以用逗號隔開。如:404,500
E. web.xml的error-page標簽,不起作用~~
在page_not_found.jsp頁面上有用isErrorPage="true"?
F. 在Web.xml中如何配置錯誤頁面的攔截
javaWeb項目,錯誤攔截,需要在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>
等吧,只要能出現的異常,捕捉後,可以統一寫一個頁面進行相關的處理。
希望能夠幫助到你。
G. javaweb項目的web.xml配置的錯誤頁面起不到作用訪問報錯後頁面並沒有跳轉到配置的錯誤頁面中
<!--錯誤跳轉頁面-->
<error-page>
<!--路徑不正確-->
<error-code>404</error-code>
<location>/WEB-INF/errorpage/404.jsp</location>
</error-page>
<error-page>
<!--沒有訪問許可權,訪問被禁止-->
<error-code>405</error-code>
<location>/WEB-INF/errorpage/405.jsp</location>
</error-page>
<error-page>
<!--內部錯誤-->
<error-code>500</error-code>
<location>/WEB-INF/errorpage/500.jsp</location>
</error-page>
只有程序發生錯誤或不能處理該請求時,才會觸發相應的錯誤,跳轉到相應的頁面。
如404,只能當請求的頁面不存在時,就會跳轉到那個頁面,並不是說所有情況都會跳到404的頁面。
H. JSP跳轉error頁面
對於無法跳轉的解決:
1.確保location屬性中填寫的錯誤頁面是絕對路徑
2.確保error.jsp的大小>1024位元組
3.確保在error.jsp頁面中添加<%@ page
isErrorPage="true"%>
注2:對於伺服器端程序我們無法要求客戶端去修改IE配置,因此流行的「在IE【工具】->【Internet選項】->【高級】中勾掉【顯示友好http錯誤提示】」這種解決辦法一般不予考慮;不管在哪個配置文件中配置,如果不起作用,通常是由於錯誤文件太小引起的,error.jsp的大小要大於1024位元組。
試試吧,你也可以試試if語句自己判斷get的值自己加語句跳轉頁面
I. 在IE中,當JS代碼運行錯誤時怎麼設置會彈出WebpageError
根據提示框,可以看到錯誤信息:
getComputedStyle is null or undefined
意思是 getComputedStyle 這個對象不存在或者是空對象。
J. import org.springframework.boot.web.servlet.ErrorPage; 依賴哪個包,導入的時候會報錯
<!--應該是這個-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.web.servlet</artifactId>
<version>3.2.2.RELEASE</version>
<type>pom</type>
</dependency>