回顾
1. 数据相应与页面跳转
2. 请求参数 :@RequestParm,@PathVariable,@RequestBody,@ResponseBody
3. 静态资源映射 : <mvc:resources location=”/js/” mapping=”/js/**” />
4. 异常处理: a)自定义异常处理器 b)将异常处理器交给spring容器
5. 文件上传(前端,后端)
- Springmvc中的拦截器
拦截器(interceptor) : 是springmvc提供的对请求进行拦截,放行,过滤的功能
过滤器(filter) :完成对请求进行拦截,放行,过滤
1.1 自定义拦截器 (实现HandlerIntercepor接口)
1.1.1 自定义拦截器 ( 拦截浏览器发送的请求 即方法 )
/**
* 自定义拦截器
* 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的配置文件中
1.2 登录检查拦截器
对于多个拦截器,拦截器的执行顺序和配置顺序相关
拦截器的执行顺序如下图:
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
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 控制器端
2 拦截器端
1.2.2 配置拦截器
2. SSM整合
2.1 整合的意义
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容器
2.6.2 SSM整合的方式二:各司其职
Spring容器:存放所有非web层对象
:service,dao,事务,datasource
SpringMVC容器:存放所有的web层对象
:controller ,视图解析器,异常处理器
<!--
通过监听器的形式配置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 搭建环境
3.3 用户登录
用户的基本CRUD
作业:
再ssm整合的基础上完成用户的增删改查(必须登录之后再访问)