SpringMVC拦截器
1.拦截器和过滤器的区别
过滤器 | 拦截器 |
---|---|
servlet规范中(java ee)规范中的一部分,任何java web工程都可以使用 | 拦截器是框架提供的,如只有在SpringMVC框架下的工程才能使用其提供的拦截器 |
在url-pattern中配置了/*之后,可以拦截任何一切资源 | 拦截器只会拦截控制器方法,像jsp页面、css资源都是不会拦截的 |
2 拦截器执行流程
2.1 准备工作
2.1.1 导入spring-api依赖
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>servlet-api</artifactId>
<version>6.0.53</version>
</dependency>
2.1.2 在SpringMvc2.xml配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/emps/**"/>
<mvc:exclude-mapping path="/emps/find*"/>
<!--拦截器对象的地址-->
<bean class="com.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
2.1.3 创建EmpController类
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("emps")
public class EmpController {
}
2.1.4 创建HandlerInterceptor接口的实现子类
package com.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/*这个是需要导入servlet-api依赖才可以使用的*/
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle 1");
return true;
}
@Override
public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle 1");
}
@Override
public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion 1");
}
}
2.2 查询员工流程测试
2.2.1 示例代码
@RequestMapping("find")
public String find(){
System.out.println("查询员工");
return "index";
}
2.2.2 运行截图
a 前台访问部分
b 控制台部分
2.3 删除员工流程测试
2.3.1 示例代码
@RequestMapping("delete")
public String delete(){
System.out.println("删除员工");
return "index";
}
2.3.2 运行截图
a 前台访问部分
b 控制台部分
2.4 添加员工流程测试
2.4.1 示例代码
@RequestMapping("add")
public String add(){
System.out.println("添加员工");
return "index";
}
2.4.2 运行截图
a 前台访问部分
b 控制台部分
3 多个拦截器之间的执行流程
3.1 准备工作
3.1.1 导入spring-api依赖
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>servlet-api</artifactId>
<version>6.0.53</version>
</dependency>
3.1.2 在SpringMvc2.xml配置拦截器
<!--拦截器配置 一个mvc:interceptor就是一个拦截器
mvc:mapping 要拦截的地址 支持Ant的格式
mvc:exclude-mapping 不需要拦截的地址
拦截器里头如何配置: 要配置先拦的,再配置后拦截的
bean就是拦截器对象是谁
多个拦截器之间的拦截顺序: 按照书写顺序从上往下依次执行
-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/emps/**"/>
<mvc:exclude-mapping path="/emps/find*"/>
<!--拦截器对象的地址-->
<bean class="com.interceptor.MyInterceptor"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/emps/**"/>
<mvc:exclude-mapping path="/emps/find*"/>
<!--拦截器对象的地址-->
<bean class="com.interceptor.MyInterceptor02"></bean>
</mvc:interceptor>
</mvc:interceptors>
3.1.3 创建EmpController类
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("emps")
public class EmpController {
}
3.1.4 创建HandlerInterceptor接口的实现子类MyInterceptor
package com.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/*这个是需要导入servlet-api依赖才可以使用的*/
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle 1");
return true;
}
@Override
public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle 1");
}
@Override
public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion 1");
}
}
3.1.5 创建HandlerInterceptor接口的实现子类MyInterceptor02
package com.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/*这个是需要导入servlet-api依赖才可以使用的*/
public class MyInterceptor02 implements HandlerInterceptor {
@Override
public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle 2");
return true;
}
@Override
public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle2");
}
@Override
public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion 2");
}
}
3.2 查询员工流程测试
3.2.1 示例代码
@RequestMapping("find")
public String find(){
System.out.println("查询员工");
return "index";
}
3.2.2 运行截图
a 前台访问部分
b 控制台部分
3.3 删除员工流程测试
3.3.1 示例代码
@RequestMapping("delete")
public String delete(){
System.out.println("删除员工");
return "index";
}
3.3.2 运行截图
a 前台访问部分
b 控制台部分
2.4 添加员工流程测试
2.4.1 示例代码
@RequestMapping("add")
public String add(){
System.out.println("添加员工");
return "index";
}