SpringMVC框架
简介
-
p77 SpringMVC框架的概述,简单来说就是上图中的公用行为封装和特有行为调用的框架。具体请见视频
-
p78 SpringMVC的开发步骤,见上图6步
POJO:Plain Ordinary Java Object,即普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO。即一般开发中的domain包下的简单的实体类,是JavaBeans的子集,前面的笔记有过提及。特点就是支持业务逻辑的协助类。
到具体项目中来的步骤描述:
-
p79 基于上述开发步骤的小案例代码实现
组件解析
-
p80 基于上述小demo的项目部署启动流程及分析。步骤的再次强调
-
p81 基于SringMVC框架的底层组件解析SpringMVC的执行流程:
-
p82-85 SpringMVC组件解析:
-
82 注解解析:@RequstMapping()。包括:作用、位置、属性
-
83 组件扫描:
<context:component-scan>
属性:base-package,全限定包名子标签:
<context:include-filter>
只扫描的部分<context:exclude-filter>
排除扫描的部分
-
84 XML配置解析(资源解析器):源码查看解析,对Controller类代码进行增强
-
Controller类中return的视图返回方式:forward、redirect
-
xml中配置内部资源视图解析器(InternalResourceViewResolver):
重构源码中内部资源视图解析器中的前缀(prefix)和后缀(suffix)的默认构造方法,自定义添加需要的前后缀,使得return语句变得更简洁。
-
-
组件总结:红色框住部分为重点
-
数据响应
- p86 SpringMVC数据相应方式的预览和思维导向讲解:
重点注意回写数据中的返回对象或集合中提及的AJAX和Json的应用
-
p87-90 页面跳转
-
87 返回字符串的形式。对上述构建的小demo的web执行的流程解析
-
88-90 返回ModelAndView的形式,四种形式:
-
88 以ModelAndView方式建立ModelAndView类型的方法,重构实现上述返回字符串的形式的demo
-
89 另外两种形式:
ModelAndView对象解耦:SpringMVC自动注入;
自定义String方法,实现ModelAndView形式(String对象即为View,再自动注入一个Model对象)
-
90 自定义String方法,实现ModelAndView形式(String对象即为View,再自动注入一个HTTPServletRequest对象)
对比前面的Model对象的自定义方法,Model对象是SpringMVC框架封装好的一个对象,HTTPRequestServlet对象是原生的,Tomcat提供的对象(**不常用,使用框架就尽量使用框架提供的方法)
-
-
-
p91-94 回写数据
-
91 直接返回字符串:不进行视图跳转,直接返回字符串展示,两种方法:
- 方法类型为void,没有return返回,自动注入response对象调用getWriter().print()展示
- 通过return返回字符串,添加**@ResponsBody**注解告知SpringMVC直接通过响应体回写
-
92 返回Json格式字符串:使用Json转换工具将实体类对象转换为Json格式字符串返回:
使用ObjectMapper类的**writerValueAsString(domain)**方法
-
93 94 返回对象或集合:配置SpringMVC自动将对象转换成Json
-
93 xml中配置处理器适配器的RequestMappingHandlerAdapter类的类型转换器,实现SpringMVC的自动转换
-
94 简化上述配置,xml配置中添加一个MVC的注解驱动:
<mvc:annotation-driven>
即可,作用如下图:
-
-
-
p95 数据响应总结
SpringMVC的请求
获得请求参数 P96-108
-
P96-101 请求参数类型
-
96 参数类型总结和思维导图讲解:
- 基本类型
- POJO类型
- 数组类型
- 集合类型
-
97获取基本类型参数:
- 98获取POJO类型参数:
- 99获取数组类型参数:
-
100 101 获取集合类型参数:
- 自定义一个list类(VO对象)在Controller类中注入,并在视图页面(jsp)中提交数据,数据在Controller类中完成封装获取
- 注意ajax提交的代码编写方式,引出静态资源访问权限问题:
-
-
p102 静态资源访问开启
SpringMVC前端控制器DispatcherServlet内部会对web资源进行虚拟路径匹配(Controller类),而原案例web.xml配置为’/’(缺省),所以全部资源讲由SpringMVC来匹配。
在spring-mvc.xml中配置不由SpringMVC来匹配,开放静态资源访问:
-
<mvc:resources>
属性:mapping:映射地址,location:开放的目录- -
<mvc:default-servlet-handler/>
:当DispatcherServlet匹配不到时,交由原始容器(Tomcat)寻找
-
-
p103 请求数据乱码问题:配置全局乱码过滤器
<filter>
-
p104 参数绑定注解:@requestParam
属性:
-
p105 获得Restful风格的参数
@PathVariable 进行占位符匹配:
- p106 自定义类型转换器
步骤:
-
p107 获取Servlet相关API
视频丢失,看的这个:
https://www.bilibili.com/video/BV1mE411X7yp?p=174
在一个虚拟路径方法中,想获取Servlet任意API直接在形参中声明即可,SpringMVC自动注入。
-
p108 获取请求头信息:
@CookieValue:
文件上传 P109-113
- p109 上传客户端三要素,及前端表单实现:
- p110 文件上传原理:
- p111 单文件上传步骤:
①在pom.xml添加
②spring-mvc.xml配bean
③编写Controller类方法
-
p112单文件的上传下载案例实现
-
多文件上传:
- 数组形式:
- 前端不同名的name值,方法中多个对应形参形式
SpringMVC拦截器
- p114 拦截器(Interceptor)的概述和作用:
- p115 拦截器(Interceptor)和过滤器(Filter):
- p116 自定义拦截器快速入门步骤:
①三个方法都需要实现(可以缺省)
②spring-mvc.xml配置:<mvc:interceptors>
标签及其子标签 <mvc:interceptor>
具体某一个拦截器,
-
属性标签:
<mvc:mapping>
,属性值:path,(配置对那些资源进行拦截操作 p121) -
(属性标签:
<mvc:exclude-mapping>
,属性值:path,配置对那些资源不进行拦截操作 p121)括号内的为后面p121的内容
③build测试
- p117 自定义拦截器三个方法的逻辑实现,以及拦截器链的三个方法的执行顺序:
-
Boolean preHandle():
在目标方法执行前执行
最常用,类似于Filter中的doFilter()方法;
-
void postHandle()
在目标方法执行之后,视图对象返回之前执行
可用于修改返回的视图对象
-
void afterCompletion()
在流程都执行完毕后执行
不常用
执行顺序:
链中所有preHandle()方法执行完再执行所有postHandle()方法, 最后执行所有afterCompletion()方法。
链中拦截器的执行顺序是由xml文件中的配置顺序决定的。
- p118 三个方法说明总结及其他总结:
28.p119-122 拦截器案例demo实现用户登录权限控制
-
119 案例需求分析及preHandle()实现逻辑分析
-
120 在preHandle()方法代码实现上P的逻辑分析
-
121 实现登录功能保存至数据库,并引出拦截范围问题,引出新标签用于排除拦截:
<mvc:exclude-mapping>
-
122 JdbcTemplate的queryForObject()方法返回为空时的EmptyResultDataAccessException异常问题:
解决:Dao层抛出异常,业务层中抓取异常并解决。并引出后续的框架解决异常的方法。
异常处理机制
-
p123 不使用框架方法解决异常思路:
Dao层抛出异常,业务层中抓取异常并解决。每个方法都抓取解决。
引出抽取思想,进而引出SpringMVC框架解决思路:
以及后续对绿色框部分的学习
-
异常处理的两种方式:
-
简单异常处理器SimpleMappingException代码实现:
- 自定义异常处理器实现HandlerExceptionResolver接口步骤和案例实现:
①实现方法中,方法参数除servlet两大对象外,Exception参数即异常对象;返回值ModelAndView:跳转的错误视图信息
配置方法中,使用分支结构囊括所需要的异常类型,使用instanceof方法进行判断,最后设置ModelAndView对象信息并该对象返回即可。
②简单声明配bean即可
③④没什么可讲
-
异常处理总结
-
请求的两个额外注解:
-
@ModelAttribute
-
修饰方法有返回值:
-
修饰方法没有返回值
-
-
@SessionAttributes