學(xué)習(xí)目標(biāo)
- 攔截器
- 文件上傳
- 異常處理器
- ssm整合
1.攔截器
1.1.什么是攔截器?
? Spring MVC中的攔截器(Interceptor)類似于Servlet中的過濾器(Filter),它主要用于攔截用戶請(qǐng)求并作相應(yīng)的處理。例如通過攔截器可以進(jìn)行權(quán)限驗(yàn)證、判斷用戶是否登錄等。文章來源:http://www.zghlxwxcb.cn/news/detail-816585.html
? 攔截器依賴于web框架,在實(shí)現(xiàn)上基于Java的反射機(jī)制,屬于面向切面編程(AOP)的一種運(yùn)用。文章來源地址http://www.zghlxwxcb.cn/news/detail-816585.html
1.2.自定義攔截器
1.2.1.創(chuàng)建攔截器
package com.by.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CustomHandlerInterceptor implements HandlerInterceptor {
/**
* 在控制器方法調(diào)用前執(zhí)行
* 返回值為是否中斷
* true:表示繼續(xù)執(zhí)行(下一個(gè)攔截器或處理器)
* false:則會(huì)中斷后續(xù)的所有操作,所以我們需要使用response來繼續(xù)響應(yīng)后續(xù)請(qǐng)求
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object object) throws Exception {
System.out.println("HandlerInterceptor preHandle ....");
return true;
}
/**
* 在控制器方法調(diào)用后,解析視圖前調(diào)用,我們可以對(duì)視圖和模型做進(jìn)一步渲染或修改
* 可在modelAndView中加入數(shù)據(jù),比如當(dāng)前時(shí)間
*/
@Override
public void postHandle(HttpServletRequest request,HttpServletResponse response,
Object object, ModelAndView modelAndView) throws Exception {
System.out.println("HandlerInterceptor postHandle ....");
}
/**
* 整個(gè)請(qǐng)求完成,即視圖渲染結(jié)束后調(diào)用,這個(gè)時(shí)候可以做些資源清理工作,或日志記錄
*/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,Object object, Exception e) throws Exception {
System.out.println("HandlerInterceptor afterCompletion ....");
}
}
1.2.2.配置攔截器
<!--配置攔截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 匹配的是url路徑 -->
<mvc:mapping path="/**"></mvc:mapping>
<bean class="com.by.interceptor.CustomHandlerInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
1.2.3.測(cè)試
- 編寫controller
@Controller
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/findAccount12")
public String findAccount12(Model model) {
model.addAttribute("msg", "歡迎你 springmvc");
System.out.println("controller的方法執(zhí)行了......");
return "success";
}
}
- 在index.jsp里面定義超鏈接
<a href="/account/findAccount12">攔截器</a>
1.3.登錄攔截器
1.3.1.創(chuàng)建攔截器
package com.by.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object object) throws Exception {
String user = (String) request.getSession().getAttribute("user_session");
if (user != null) {//已經(jīng)登錄,繼續(xù)執(zhí)行
System.out.println("獲得用戶信息:"+user);
return true;
} else {//未登錄,跳轉(zhuǎn)到登錄頁面
response.sendRedirect(request.getContextPath() +"/login.jsp");
return false;
}
}
}
1.3.2.配置攔截器
<mvc:interceptors>
<mvc:interceptor>
<!-- 匹配的是url路徑 -->
<mvc:mapping path="/**"></mvc:mapping>
<bean class="com.by.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
1.3.3.測(cè)試
- 編寫controller
@Controller
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/findAccount13")
public String findAccount13(Model model) {
model.addAttribute("msg", "歡迎你 springmvc");
System.out.println("controller的方法執(zhí)行了......");
return "success";
}
}
- 在index.jsp里面定義超鏈接
<%
session.setAttribute("user_session","User{name:張二狗,age:18}");
%>
<a href="/account/findAccount13">登錄攔截器</a>
到了這里,關(guān)于SpringMVC下半篇之?dāng)r截器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!