回顾
1.	数据相应与页面跳转
2.	请求参数 :@RequestParm,@PathVariable,@RequestBody,@ResponseBody
3.	静态资源映射 : <mvc:resources location=”/js/” mapping=”/js/**” />
4.	异常处理: a)自定义异常处理器 b)将异常处理器交给spring容器
5.	文件上传(前端,后端)
  1. Springmvc中的拦截器
    拦截器(interceptor) : 是springmvc提供的对请求进行拦截,放行,过滤的功能
    过滤器(filter) :完成对请求进行拦截,放行,过滤

java filter拦截返回_java filter拦截返回

1.1 自定义拦截器 (实现HandlerIntercepor接口)

1.1.1 自定义拦截器 ( 拦截浏览器发送的请求 即方法 )

java filter拦截返回_Springmvc3_02

/**
 * 自定义拦截器
 *      1.实现HandlerInterceptor
 *      2.继承抽象父类 :HandlerInterceptorAdapter
 */
public class MyIntercetpor01 implements HandlerInterceptor {


   /**
    *  handler :处理器(控制器) = controller对象
    *      preHandle :处理请求的(再调用controller对象方法之前执行)
    *                :对请求进行放行(继续执行进入到方法)
    *                :对请求过滤
    *      返回值:true = 放行
    *             false = 过滤
    *
    */
   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      System.out.println("执行MyIntercetpor1111111的preHandle方法");
      return true; //放行
   }


   /**
    *  postHandle  调用控制器方法之后执行的方法
    *            :处理响应的
    */
   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
      System.out.println("执行MyIntercetpor1111111的postHandle方法");
   }


   /**
    *  afterCompletion :
    *      整个请求处理完毕,在视图渲染完毕时回调,一般用于资源的清理或性能的统计
    * 			在多个拦截器调用的过程中,
    * 				afterCompletion是否取决于preHandler是否=true
    *
    */
   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
      System.out.println("执行MyIntercetpor1111111的afterCompletion方法");
   }
}

1.1.2 配置拦截器的拦截范围

配置到springmvc的配置文件中

java filter拦截返回_mvc_03


java filter拦截返回_mvc_04

1.2 登录检查拦截器

java filter拦截返回_spring_05


对于多个拦截器,拦截器的执行顺序和配置顺序相关

java filter拦截返回_spring_06


拦截器的执行顺序如下图:

java filter拦截返回_拦截器_07

springmvc.xml内拦截器相关代码 : 如下

<mvc:interceptors>
        <!--配置拦截器-->
        <!--
            对于多个拦截器 : 拦截器链
                执行顺序和配置顺序相关
        -->
        <mvc:interceptor>
            <!--配置拦截的请求路径-->
            <mvc:mapping path="/**"/>
            <bean class="cn.itcast.interceptor.MyIntercetpor01"></bean>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="cn.itcast.interceptor.MyIntercetpor02"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

1.3 配置web.xml

java filter拦截返回_java filter拦截返回_08


web.xml内相关代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	version="2.5">

    <!--1.处理中文乱码的过滤器-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--2.springmvc中的核心控制器-->
    <servlet>
        <servlet-name>mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>mvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

1.2.1 自定义登录检查拦截器 (当用户登录时,才能查询数据库信息)

1 控制器端

java filter拦截返回_spring_09


2 拦截器端

java filter拦截返回_拦截器_10


java filter拦截返回_java filter拦截返回_11


1.2.2 配置拦截器

java filter拦截返回_mvc_12

2. SSM整合

2.1 整合的意义

java filter拦截返回_mvc_13


2.2 整合的步骤

 Mybatis : 使用基于dao动态代理的方式

 Spring : xml结合注解

1.	保证mybatis可以独立运行(搭建mybatis运行环境)
2.	保证spring可以独立运行(搭建spring的IOC环境)
3.	整合mybatis和spring
4.	保证springmvc可以独立运行(搭建springmvc的运行环境)
5.	整合SSM

2.3 搭建mybatis的运行环境

工程和坐标
创建实体类和dao接口
Mybatis的核心配置
Mybaits的SQL映射文件
测试mybatis

2.4 搭建SpringIOC的运行环境

自定义工程结构(UserService和UserSerivceImpl)
Spring的配置文件
测试类

2.5 整合mybatis和spring

整合依赖坐标 : mybatis-spring
1	SqlSessionFactory交给spring容器管理
2	MapperScannerConfigurer对象交给spring容器
	加载sql映射文件
	创建dao接口的动态代理对象
	将对象存入spring容器
3	事务处理

2.6 SSM整合

2.6.1 SSM整合的方式一:将所有对象存入springmvc容器

java filter拦截返回_java filter拦截返回_14


2.6.2 SSM整合的方式二:各司其职

Spring容器:存放所有非web层对象

:service,dao,事务,datasource

SpringMVC容器:存放所有的web层对象

:controller ,视图解析器,异常处理器

java filter拦截返回_Springmvc3_15

<!--
    通过监听器的形式配置spring容器
        监听器监听 tomcat启动 , 创建spring容器并且创建非web层的对象
-->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--配置spring的配置文件-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>

3. 案例

3.1 SQL语句

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `password` varchar(32) NOT NULL COMMENT '密码',
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.2 搭建环境

java filter拦截返回_spring_16


3.3 用户登录

java filter拦截返回_java filter拦截返回_17

用户的基本CRUD

作业:
再ssm整合的基础上完成用户的增删改查(必须登录之后再访问)

java filter拦截返回_拦截器_18