1. 程式人生 > >SpringMVC Controller設定400/404/500自定義錯誤頁面

SpringMVC Controller設定400/404/500自定義錯誤頁面

一、說明
1、web系統開發過程中經常遇見400/404/500型別的錯誤頁面,對於開發人員而言見到這種頁面多了可能覺得問題不大,但是實際運用當中是面向客戶的,需要配置一個合理的自定義錯誤頁面。
2、本文只提通過springmvc controller配置自定義錯誤頁Tomcat設定400/404/500自定義錯誤頁面(推薦)請參考博文:點選開啟連結

3、spring-mvcl.xml配置檢視解析器

<!--檢視解析器--> 
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	 <property name="suffix" value=".jsp"></property>
	 <property name="prefix" value="/WEB-INF/views/"></property> 
</bean>

二、實現

1、ErrorController.java
package com.mvc.pab.internet.controller;


import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("error")
public class ErrorController {
	private static final String BASE_DIR = "error/";
	@RequestMapping("400")
	public String handle1(HttpServletRequest request){
		return BASE_DIR + "400";
	}
	@RequestMapping("404")
	public String handle2(HttpServletRequest request){
		return BASE_DIR + "404";
	}
	@RequestMapping("500")
	public String handle3(HttpServletRequest request){
		return BASE_DIR + "500";
	}
}
2、web.xml
<error-page>
		<error-code>400</error-code>
		<location>/error/400</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/error/404</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/error/500</location>
</error-page>

3、spring-mvc.xml

(專案當中有設定全域性攔截器的,一定要在這裡新增攔截器配置,不然會被攔截配置方法是往自己的配置中節點程式碼<mvc:exclude-mapping path="/error/*" />,/error/*為我的錯誤頁的檢視層,意為都不攔截/error/)

<!--配置攔截器, 多個攔截器,順序執行 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- 匹配的是url路徑, 如果不配置或/**,將攔截所有的Controller -->
			<mvc:mapping path="/**" />
			<mvc:exclude-mapping path="/error/*" />
			<mvc:exclude-mapping path="/test/*" />
			<mvc:exclude-mapping path="/manager/*" />
			<mvc:exclude-mapping path="/wxmanager/*" />
			<bean class="com.mvc.filter.CommonInterceptor"></bean>
		</mvc:interceptor>
		<mvc:interceptor>
			<!-- 匹配的是url路徑, 如果不配置或/**,將攔截所有的Controller -->
			<mvc:mapping path="/manager/*" />
			<mvc:mapping path="/wxmanage/*" />
			<mvc:exclude-mapping path="/manager/login" />
			<mvc:exclude-mapping path="/manager/doLogin" />
			<bean class="com.mvc.filter.ManagerInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
重啟伺服器生效!!!!