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()方法)。

  1. 它的值必须是一个整数,表示servlet被加载的先后顺序。 如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
  2. 如果值为正整数或者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>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值