SpringMVC 02
3.SSM整合
SpringMVC + Spring + MyBatis当前最为流行的 JavaEE 开发技术架构
SSM 整合的实质------把对象交给容器管理
-
Spring容器是管理service 和 dao等对象------业务层
-
SpringMVC容器管理控制器对象------视图层
-
将 MyBatis 整合入 Spring------持久层
3.1 容器创建
Spring容器
-
web.xml声明监听器ContextLoaderListener----创建spring容器对象WebApplicationContext
-
WebApplicationContext对象读取spring配置文件---根据标签/注解,创建对象放到容器
SpringMVC容器
-
web.xml声明中央调度器DispatcherServlet---init方法---创建容器对象WebApplicationContext
-
读取springmvc配置文件---@Controller注解---创建控制器controller对象放到容器中
SpringMVC容器和Spring容器的关系
-
SpringMVC对象相当于继承自Spring对象
-
controller对象 ----- dao、service对象
3.2 开发步骤
0.创建maven工程
1.pom.xml-----加入依赖
2.配置web.xml
-
声明spring的监听器ContextLoaderListener: 创建spring的容器对象---service ,dao对象
-
声明springmvc的中央调度器DispatherServlet : 创建springmvc容器对象---controller对象
-
声明字符集过滤器 CharacterEncodingFilter----- 解决post请求乱码的问题
3.创建程序的包---- dao ,service, controller, entity
4.配置中央调度器----组件扫描---视图解析器
5.jdbc与MyBatis配置
6.Spring配置----读取配置文件----注解扫描----配置dao,service,工具类,事务
7.dao与mapper文件、service、controller------注解声明对象和赋值
8.视图文件-----jsp
3.3 相对路径
地址的区别
-
协议开头为绝对地址----地址是唯一的,能够直接访问
-
相对地址必须有参考地址才能访问
参考地址+相对地址
-
没有斜杠开头:当前资源的访问路径+相对地址
-
有斜杠开头:服务器地址+相对地址
-
${pageContext.request.contextPath}----表示访问项目的路径
-
固定当前页面中的没有“/”开头地址的参考地址
<%String basePath = request.getScheme() + "://" + request.getServerName()
+":"+request.getServerPort()+request.getContextPath()+"/";%>
<base href="<%=basePath%>">
4.SpringMVC核心技术
4.1 请求重定向与转发
处理器对请求处理完毕后,向其它资源进行跳转时,有两种跳转方式:请求转发与重定向
-
跳转到页面/跳转到其它处理器
-
请求转发的页面,可以是 WEB-INF 中页面
-
重定向的页面,不能为 WEB-INF 中页面-----用户不能直接访问 WEB-INF 中资源
请求转发 ------ mv.setViewName("forward:/hello.jsp");
-
方法返回 ModelAndView 时
-
必须写出相对于项目根的路径 ---- 指定不同位置的视图
-
forward 操作不需要视图解析器
-
-
方法返回 String ----- forward: 视图完整路径
请求重定向 ----- mv.setViewName("redirect:/other.jsp");
4.2 异常处理
异常处理器 ----- 集中的异常处理------各个Controller中抛出的异常集中到一个地方处理
使用注解:
-
@ExceptionHandler : 指定异常处理方法,处理某个类型的异常。 异常发生时,执行此方法。
-
可选属性 value,为一个 Class<?>数组 ----- 指定要处理的异常类
-
被注解的方法
-
-
@ControllerAdvice: 放在类的上面, 表示这个类中有异常的处理方法。 相当于aop中的@Aspect。看做是控制器增强, 给Controller类增加异常(切面)的处理功能。
处理异常
-
创建异常类
-
控制器抛出异常
-
异常的处理类加入@ControllerAdvice
-
定义方法处理对应的异常。方法上加@ExceptionHandler注解
-
返回处理异常的页面
-
springmvc配置文件 --- 组件扫描器、视图解析器 --- 组件扫描@ControllerAdivce --- 注解驱动
4.3 拦截器
拦截指定的用户请求,到controller的请求,并进行相应的预处理与后处理
在处理器适配器执行处理器之前
根据处理结果, 决定是否执行controller
定义
-
实现接口HandlerInterceptor中的方法(3个)
-
springmvc配置声明拦截器对象指定拦截的url
实现
preHandle: 预先处理请求的方法
-
参数Object handler : 被拦截的控制器对象(MyController)
-
返回值: boolean --- 请求能否处理
-
在控制器方法之前先执行,决定请求是否执行
-
登录的检查, 权限的判断, 统计数据等等
postHandle: 后处理方法
-
参数Object handler : 被拦截的控制器对象(MyController)
-
ModelAndView mv: 控制器方法的返回值
-
在控制器方法之后执行
-
获取到控制器方法的执行结果。 可以修改原来的执行结果
-
对请求的二次处理
afterCompletion: 最后执行的方法
-
参数Object handler : 被拦截的控制器对象(MyController)
-
Exception ex: 异常对象
-
请求处理完成后执行 --- 执行forward操作后
-
释放内存, 清理临时变量
配置 -----spring mvc .xml
<!--声明拦截器-->
<mvc:interceptors>
<!--声明第一个拦截器-->
<mvc:interceptor>
<!--指定拦截器的拦截地址
path:拦截的url地址,使用 ** 通配符。
例如: path="/user/**"
http://localhost:8080/user/listUser.do
http://localhost:8080/user/query/queryUser.do
-->
<mvc:mapping path="/**"/>
<!--指定使用的拦截器-->
<bean class="com.fremont.handler.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
多拦截器
-
每个拦截器做单一的验证处理
-
-
多个拦截器和一个控制器对象在一个链上
-
框架中使用HandlerExecutionChain(处理器执行链),表示这个执行链
拦截器和过滤器
-
拦截器是springmvc框架中的对象。 过滤器是servlet中的对象
-
拦截器对象是框架容器创建的, 过滤器对象是tomcat创建的对象
-
拦截器侧重对请求做判断处理, 可以截断请求。 过滤器侧重对request,response对象设置参数
-
拦截器的执行时间有三个,过滤器只在请求之前
-
拦截器拦截对controller,动态资源的请求;过滤器可以过滤所有请求
-
先执行的过滤器,后面是 中央调度器 , 后面才是拦截器, 再后面是控制器方法
-

浙公网安备 33010602011771号