项目结构

1.pom.xml文件,web.xml文件,index.jsp,show.jsp
同上文
2.MyController类
- package com.it.controller;
-
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.servlet.ModelAndView;
-
- @Controller
- public class MyController {
-
- @RequestMapping(value = "/some.do")
- public ModelAndView doSome(String name,Integer age){
- System.out.println("=====执行了MyController中的doSome方法=========");
- ModelAndView mv=new ModelAndView();
- mv.addObject("myname",name);
- mv.addObject("myage",age);
- mv.setViewName("show");
- return mv;
- }
-
- }
2.MyInterceptor类
- package com.it.handler;
-
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.util.Date;
-
- public class MyInterceptor implements HandlerInterceptor {
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- System.out.println("11111-拦截器的MyInterceptor的preHandle()");
- return true;
- }
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler, ModelAndView mv) throws Exception {
- System.out.println("11111-拦截器的MyInterceptor的postHandle()");
- }
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
- Object handler, Exception ex) throws Exception {
- System.out.println("11111-拦截器的MyInterceptor的afterCompletion()");
- }
- }
3.MyInterceptor2类
- package com.it.handler;
-
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
-
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- public class MyInterceptor2 implements HandlerInterceptor {
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- System.out.println("22222-拦截器的MyInterceptor的preHandle()");
- return true;
- }
- @Override
- public void postHandle(HttpServletRequest request, HttpServletResponse response,
- Object handler, ModelAndView mv) throws Exception {
- System.out.println("22222-拦截器的MyInterceptor的postHandle()");
- }
- @Override
- public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
- Object handler, Exception ex) throws Exception {
- System.out.println("22222-拦截器的MyInterceptor的afterCompletion()");
- }
- }
4.springmvc.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
-
- <!-- 声明组件扫描器-->
- <context:component-scan base-package="com.it.controller"/>
-
-
- <!--声明springmvc框架中的视图解析器,帮助开发人员设置视图文件的路径-->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <!-- 前缀:视图文件的路径-->
- <property name="prefix" value="/WEB-INF/view/"/>
- <!-- 后缀:视图文件的扩展名-->
- <property name="suffix" value=".jsp"/>
- </bean>
-
- <!--声明拦截器,拦截器可以有0个或多个
- 拦截器先声明的先执行,在框架中保存多个拦截器是ArrayList,按照声明的先后顺序放入到ArrayList
- -->
- <mvc:interceptors>
- <!-- 声明第一个拦截器 -->
- <mvc:interceptor>
- <mvc:mapping path="/**"/>
- <bean class="com.it.handler.MyInterceptor"/>
- </mvc:interceptor>
- <!--声明第二个拦截器 -->
- <mvc:interceptor>
- <mvc:mapping path="/**"/>
- <bean class="com.it.handler.MyInterceptor2"/>
- </mvc:interceptor>
-
- </mvc:interceptors>
-
- </beans>
项目结果
==================================================
多个拦截器:
第一个拦截器preHandle=true , 第二个拦截器preHandle=true
执行时输出结果
111111-拦截器的MyInterceptor的preHandle()
22222-拦截器的MyInterceptor的preHandle()
=====执行MyController中的doSome方法=====
22222-拦截器的MyInterceptor的postHandle()
111111-拦截器的MyInterceptor的postHandle()
22222-拦截器的MyInterceptor的afterCompletion()
111111-拦截器的MyInterceptor的afterCompletion()

===============================================
第一个拦截器preHandle=true , 第二个拦截器preHandle=false
执行时输出结果
111111-拦截器的MyInterceptor的preHandle()
22222-拦截器的MyInterceptor的preHandle()
111111-拦截器的MyInterceptor的afterCompletion()
================================================
第一个拦截器preHandle=false , 第二个拦截器preHandle=true|false
111111-拦截器的MyInterceptor的preHandle()
==========================================
拦截器和过滤器的区别
1.过滤器是servlet中的对象, 拦截器是框架中的对象
2.过滤器实现Filter接口的对象, 拦截器是实现HandlerInterceptor
3.过滤器是用来设置request,response的参数,属性的,侧重对数据过滤的。
拦截器是用来验证请求的,能截断请求。
4.过滤器是在拦截器之前先执行的。
5.过滤器是tomcat服务器创建的对象
拦截器是springmvc容器中创建的对象
6.过滤器是一个执行时间点。
拦截器有三个执行时间点
7.过滤器可以处理jsp,js,html等等
拦截器是侧重拦截对Controller的对象。 如果你的请求不能被DispatcherServlet接收, 这个请求不会执行拦截器内容
8.拦截器拦截普通类方法执行,过滤器过滤servlet请求响应