SpringMVC配置上传文件标签详解
前言
提示:DispatcherServlet,本文主要对SpringMVC前置控制器DispatcherServlet做文件上传配置的详细说明。
提示:以下是本篇文章正文内容,下面案例可供参考
一、DispatcherServlet在Web.xml文件的配置?
代码如下:
<!-- 添加前置控制器Servlet配置代码 -->
<servlet>
<servlet-name>CmsAdmin</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/cms-servlet-admin.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<!-- 将文件写入磁盘的阈值。值可以使用后缀“MB”或“KB”表示兆字节或千字节大小。 -->
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>CmsAdmin</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
二、DispatcherServlet
1、DispatcherServlet是什么?
SpringMVC的核心就是DispatcherServlet,DispatcherServlet实质也是一个HttpServlet。DispatcherSevlet负责将请求分发,所有的请求都有经过它来统一分发。
DispatcherServlet类主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
从以上我们可以看出DispatcherServlet主要负责流程的控制(而且在流程中的每个关键点都是很容易扩展的)。
2、DispatcherServlet配置上传文件标签详解
(1)Servlet标签
首先这几句是正常的Servlet配置,不多做解释:
<!-- 配置一个servlet -->
<!-- servlet的配置 -->
<servlet>
<!-- servlet的内部名称,自定义。尽量有意义 -->
<servlet-name>CmsAdmin</servlet-name>
<!-- servlet的类全名: 包名+简单类名 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<!-- servlet的映射配置 -->
<servlet-mapping>
<!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
<servlet-name>CmsAdmin</servlet-name>
<!-- servlet的映射路径(访问servlet的名称) -->
<url-pattern>/</url-pattern>
</servlet-mapping>
注意:是映射信息,它也有一个,里面的名字是对应的Servlet名,也就是我们上面配置的Servlet名字,这里是ServletDemo,下面的是映射路径,也就是访问Servlet的名称,这里也是以方便和有意义为前提的,是我们在访问Servlet在浏览器地址栏后面输入的那个信息,例如我的映射路径命名为/servlet,在地址栏中输入http://localhost/端口号/servlet
这里的映射路径一定不是丢掉/,否则就会出错了,一定要写成/servlet,不能是servlet
(2)init-param标签
接下来看里面配置的init-param标签
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/cms-servlet-admin.xml</param-value>
</init-param>
init-param 的param-name 就是参数名 param-value就是参数值, 支持多个参数
每一个 filter 都有一个 init 方法 ,可以再这个 方法中通过 getInitParamter(“key”); key 就是 param-name的值,来获取对应的参数值
常用的还有设置编码过滤器 , 例如 : <init-param><param-name>encoding</param-name><parma-value>UTF-8</param-vaue></init-param>
(3)load-on-startup标签
然后再说说下一句load-on-startup标签:
<load-on-startup>1</load-on-startup>
load-on-startup 元素标记容器是否应该在web应用程序启动的时候就加载这个servlet,(实例化并调用其init()方法)。
- 它的值必须是一个整数,表示servlet被加载的先后顺序。 如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
- 如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载
(4)multipart-config标签
最后还有一个是multipart-config标签:
<multipart-config>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<!-- 将文件写入磁盘的阈值。值可以使用后缀“MB”或“KB”表示兆字节或千字节大小。 -->
<file-size-threshold>0</file-size-threshold>
</multipart-config>
multipart-config是spring mvc +servlet3.0上传文件的整合配置,文件上传插件uploadify的应用,对于里面的属性配置,官方文档是这样写的:
# MULTIPART (MultipartProperties)
spring.http.multipart.enabled=true # Enable support of multi-part uploads.
spring.http.multipart.file-size-threshold=0 # Threshold after which files will be written to disk. Values can use the suffixed "MB" or "KB" to indicate a Megabyte or Kilobyte size.
spring.http.multipart.location= # Intermediate location of uploaded files.
spring.http.multipart.max-file-size=1MB # Max file size. Values can use the suffixed "MB" or "KB" to indicate a Megabyte or Kilobyte size.
spring.http.multipart.max-request-size=10MB # Max request size. Values can use the suffixed "MB" or "KB" to indicate a Megabyte or Kilobyte size.
spring.http.multipart.resolve-lazily=false # Whether to resolve the multipart request lazily at the time of file or parameter access.
翻译过来就是:
# MULTIPART (MultipartProperties)
spring.http.multipart.enabled=true # 支持多部分上传.
spring.http.multipart.file-size-threshold=0 # 将文件写入磁盘的阈值。值可以使用后缀“MB”或“KB”来表示兆字节或千字节大小。
spring.http.multipart.location= # 上传文件的中间位置.
spring.http.multipart.max-file-size=1MB # 最大文件大小。值可以使用后缀“MB”或“KB”来表示兆字节或千字节大小。
spring.http.multipart.max-request-size=10MB # 最大请求大小。值可以使用后缀“MB”或“KB”来表示兆字节或千字节大小。
spring.http.multipart.resolve-lazily=false # 是否在访问文件或参数时延迟解析多部分请求
3、总结
至此,我们把DispatcherServlet中用到的标签都一个个进行了分析,最终标签代表的意思详细解析如下:
<!-- 配置一个servlet -->
<!-- servlet的配置 -->
<servlet>
<!-- servlet的内部名称,自定义。尽量有意义 -->
<servlet-name>CmsAdmin</servlet-name>
<!-- servlet的类全名: 包名+简单类名 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- init-param 的param-name 就是参数名 param-value就是参数值, 支持多个参数 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/cms-servlet-admin.xml</param-value>
</init-param>
<!-- 容器在应用启动时就加载并初始化这个servlet -->
<load-on-startup>1</load-on-startup>
<multipart-config>
<!-- 最大文件大小 -->
<max-file-size>52428800</max-file-size>
<!-- 最大请求大小 -->
<max-request-size>52428800</max-request-size>
<!-- 将文件写入磁盘的阈值。值可以使用后缀“MB”或“KB”表示兆字节或千字节大小。 -->
<file-size-threshold>0</file-size-threshold>
</multipart-config>
</servlet>
<!-- servlet的映射配置 -->
<servlet-mapping>
<servlet-name>CmsAdmin</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>