导图社区 SpringMVC
当控制器方法中所设置的视图名称以"redirect:"为前缀时,创建RedirectView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"redirect:"去掉,剩余部分作为最终路径通过重定向的方式实现跳转。
编辑于2022-06-29 00:14:25SpringMVC
1.配置方式与依赖注入
依赖注入
打包方式与其他依赖(jar包)
配置方式
完全注解方式
web.xml配置
springMVC.xml配置
配置文件方式
初始化类代替web.xml配置
SpringConfig配置类,代替spring的配置文件
创建WebConfig配置类,代替SpringMVC的配置文件
web.xml里面:1.前端控制器2.过滤器
springmvc:1.扫描组件 2.视图解析器 3.view--controller(不一定要用)0 4.静态资源处理器 5.MVC注解驱动 6.文件上传解析器 7.异常处理器 8.拦截器
以配置文件的方式时: SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效
2.@RequestMapping注解
位置
value属性
method属性
支持占位符
params属性
headers属性
@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。从而达到跳转页面的效果
3.SpringMVC获取请求参数
通过POJO获取请求参数(重点)
可以在控制器方法的形参位置设置一个实体类类型的形参(包括get,set,有参构造,无参构造,tostring),此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值
通过控制器方法的形参获取请求参数(常用)
在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参
若请求所传输的请求参数中有多个同名的请求参数,此时可以在控制器方法的形参中设置字符串数组或者字符串类型的形参接收此请求参数----------即表单形式让你勾选兴趣爱好,都为hobby名称的请求参数
若使用字符串数组类型的形参,此参数的数组中包含了每一个数据
若使用字符串类型的形参,此参数的值为每个数据中间使用逗号拼接的结果
解决获取请求参数的乱码问题(重点)
get请求出现乱码是Tomcat的问题,Tomcat8.0以上不会出现,以下则在这该
解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册
@RequestParam
@RequestParam是将请求参数和控制器方法的形参创建映射关系
@RequestParam注解一共有三个属性:
value:指定为形参赋值的请求参数的参数名
required:设置是否必须传输此请求参数,默认值为true
若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required String parameter 'xxx' is not present;若设置为false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为null
defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值
@RequestHeader
@CookieValue
通过ServletAPI获取(少用)
获取请求参数
4.域对象共享数据
page
request域
ModelAndView(MVC建议)
Model(本人倾向)
map
ModelMap
ServletAPI
Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的
session域
ServletAPI
application域
ServletAPI
1.在index页面设置超标签
2.在@RequestMapping注解方法中跳转到相应的页面 3.在相应的页面html中写出共享数据的方法
5.SpringMVC的视图
重定向视图
重定向不能访问web-INF下的页面,web-inf下的页面只能服务器内部访问
SpringMVC中默认的重定向视图是RedirectView
当控制器方法中所设置的视图名称以"redirect:"为前缀时,创建RedirectView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"redirect:"去掉,剩余部分作为最终路径通过重定向的方式实现跳转
子主题2
视图控制器view-controller与注解驱动
当控制器方法中,仅仅用来实现页面跳转,即只需要设置视图名称时,可以将处理器方法使用view-controller标签进行表示
6.RESTful
GET 用来获取资源
POST 用来新建资源
HiddenHttpMethodFilter
PUT 用来更新资源
DELETE 用来删除资源
简而言之就是增删改查操作,可以配合Vue使用
7.HttpMessageConverter
@RequestBody
RequestEntity
@ResponseBody(重要)
@RestController注解
@RestController注解是springMVC提供的一个复合注解,标识在控制器的类上,就相当于为类添加了@Controller注解,并且为其中的每个方法添加了@ResponseBody注解
SpringMVC处理json
SpringMVC处理ajax
ResponseEntity
ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文
获取请求体和请求实体
获取响应体与响应实体
8.文件上传和下载
文件下载
使用ResponseEntity实现下载文件的功能
文件上传
文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data" 。SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息
9.拦截器
拦截器的三种配置方法
拦截器的三个抽象方法
preHandle
postHandle
afterComplation
多个拦截器的执行顺序
a>若每个拦截器的preHandle()都返回true
此时多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关:
preHandle()会按照配置的顺序执行,而postHandle()和afterComplation()会按照配置的反序执行
b>若某个拦截器的preHandle()返回了false
preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterComplation()会执行
10.异常处理器
基于配置的异常处理
基于注解的异常处理
@ControllerAdvice
@ExceptionHandler
使出现异常后跳转到我们已经设置好的页面