目录,更新ing,学习Java的点滴记录
目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录
SpringMvc知识
第一篇---->SpringMvc初识|MVC|三层架构
第二篇---->IoC容器上下文和映射请求上下文
第三篇---->熟悉基本开发流程
第四篇---->接收各类请求参数的方式
第五篇---->获取请求中的Request,Session,Cookie等对象属性
第六篇---->拦截器开发
第七篇---->视图和视图解析器
第八篇---->数据校验
第九篇---->文件上传方式
第十篇---->数据转换和数据格式化
文件上传
1 介绍
- 在互联网应用中,上传头像,图片,证件是十分常见的,这涉及到文件上传功能.SpringMvc为上传文件提供了良好的支持.首先SpringMvc的文件上传时通过MultipartResolver(Multipart解析器)处理的,对于MultipartResolver而言它只是一个接口,它有两个实现类
1) CommonsMultipartResolver:依赖于Apache下的jakarta Common FileUpload 项目解析Multipart请求,可以在Spring各个版本中使用,只是它要依赖于第三方包才得以实现,后面的案例中使用这个
2) StandardServletMultipartResolver:是Spring3.1版本后的产物,它依赖于Servlet3.0或者更高版本的实现,它不用依赖于第三方包 - 实现类与接口继承关系
2 配置MultipartResolver---- CommonsMultipartResovler
-
导入依赖jar包
链接:https://pan.baidu.com/s/15O7ZtnOehh0cNn2j2jtPVQ 提取码:va3h -
SpringMvc上下文中默认是没有装配MultipartResolver的,因此默认情况下不能处理文件的上传工作,如果想要使用Spring文件上传功能,需要在上下文中配置MultipartResolver
-
在SpringMvc配置文件中配置MultipartResolver(配置项不一定全部配置,根据自己需要进行选择)
需要注意的是"multipartResolver"是Spring约定好的Bean name不可以修改. -
编写文件上传表单页面
注意,要把enctype定义为multipart/form-data
,否则SpringMvc会解析失败. -
编写处理器方法
MultipartFile是一个SpringMvc提供的类,它的好处是可以把代码从Servlet API中解放出来,体现了Spring的思维,高度的解耦性.此外,还简化了许多关于文件的操作,对于文件上传的开发就更简单了. -
测试效果
2 配置MultipartResolver---- StandardServletMultipartResolver
- StandardServletMultipartResolver不需要引入任何第三方jar包,适用于Spring3.1以上
- 修改SpringMvc配置文件,配置MultipartResolver
- 从上面的配置文件中,使用property标签只有一个可选项能够配置MultipartResolver的属性,那么如何配置文件上传大小,文件单个大小等配置呢?
- 在DispatcherServlet的地方进行配置文件上传相关配置项
- 复用CommonsMultipartResovler案例中的表单和处理器方法进行测试,测试结果符合预期
SpringMvc中MultipartResolver解析过程
- SpringMvc对于MultipartResolver解析的调度是通过DispatcherServlet进行的.首先判断请求是否是一种
enctype="multipart/*"的请求,如果是并且存在一个名称为multipartResolver的Bean定义
,那么它将会把HttpServletRequest请求转换为MultipartHttpServletRequest请求对象. - MultipartHttpServletRequest是一个SpringMvc自定义的接口,它扩展了HTTPServletRequest和关于文件的操作接口MultipartRequest.同样的,实现MultipartHttpServletRequest接口的是一个抽象类,它就是AbstractMultipartHttpServletRequest,它提供了一个公有的实现,在这个类的基础上,根据MultipartResolver的不同,派生出DefaultMultipartHttpServletRequest和StandardMultipartHttpServletRequest.
- MultipartHttpServletRequest具备原有HttpServletRequest对象的操作能力,也具备了文件操作的能力.对于文件的操作所持有的资源,到了最后DispatcherServlet会释放掉对应的资源.他还会把文件请求转换为一个MultipartFile对象,通过这个对象就可以进一步操作文件了.
- 继承结构图如下: