1 攔截器
- Spring MVC 的處理器攔截器類似於Servlet開發中的過濾器Filter,用於對處理器進行預處理和後處理。
- 攔截器鏈(Interceptor Chain)。攔截器鏈就是將攔截器按一定的順序聯結成一條鏈。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。
- 自定義攔截器, 要求必須實現:
HandlerInterceptor
接口。
1.1 攔截器和過濾器
- 過濾器是servlet規範中的一部分,任何java web工程都可以使用。
- 攔截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用。
- 過濾器在
url-pattern
中配置了/*
之後,可以對所有要訪問的資源攔截。 - 攔截器它是隻會攔截訪問的控制器方法,如果訪問的是jsp,html,css,image或者js是不會進行攔截的。
2 異常處理
2.1 自定義攔截器
- 自定義異常類
package com.tzb.exception;
public class SysException extends Exception {
private String message;
public SysException(String message) {
this.message = message;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
- Controller
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testException")
public String testException() throws SysException {
System.out.println("testException 執行了。。。。");
try {
int i = 1 / 0;
} catch (Exception e) {
e.printStackTrace();
// 拋出自定義異常信息
throw new SysException("查詢用戶錯誤。。。。");
}
return "success";
}
}
- 異常處理器
package com.tzb.exception;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 異常處理器
*/
public class SysExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object o, Exception ex) {
// 獲取異常對象
SysException e = null;
if(ex instanceof SysException){
e = (SysException) ex;
}else{
e = new SysException("系統正在維護。。。");
}
ModelAndView mv = new ModelAndView();
mv.addObject("errMsg", e.getMessage());
mv.setViewName("error");
return mv;
}
}
- 配置異常處理器
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>發生了異常</title>
</head>
<body>
${errMsg}
</body>
</html>