Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)

简介: Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)

概述


Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)


上篇博文我们说了基于Apache Commons FileUpload的文件上传,这里我们了解下基于Servlet3.0及其以上版本内置的上传功能。


在Servlet3.0及其以上的版本容器中进行服务端文件上传的编程,是围绕着标注类型MultipartConfig和javax.servlet.http.Part接口进行的。 处理已上传文件的Servlet必须标注@MultipartFile


属性如下


maxFileSize ,上传文件的最大容量,默认-1,表示不限制

maxRequestSize,HTTP请求允许的最大容量,默认-1,表示不限制

location 表示Part调用write方法时,上传的文件保存的位置

fileSizeThreshold 上传文件超出这个容量界限时,会被写入磁盘

20180305221216875.png

Spring MVC 的DispatcherServlet处理大部分或者部分请求,但是如果不修改源码,将无法对Servle进行标注,值得庆幸的是,Servlet3中有一种比较容易的方法,能够使Servlet变成一个MultipartConfig Servlet,即给部署描述文件(web.xml)中的Servlet声明赋值。


下面的代码与用@MultipartConfig给DispatcherServlet进行标注的效果是一样的

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config/springmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>    
        <multipart-config>
            <max-file-size>20848820</max-file-size>
            <max-request-size>418018841</max-request-size>
            <file-size-threshold>1048576</file-size-threshold>
        </multipart-config> 
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
     <!-- 避免中文乱码 -->
    <filter>  
        <filter-name>characterEncodingFilter</filter-name>  
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
        <init-param>  
            <param-name>encoding</param-name>  
            <param-value>UTF-8</param-value>  
        </init-param>  
        <init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
    </filter>  
    <filter-mapping>  
        <filter-name>characterEncodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping> 
</web-app>


此外,还需要再Spring MVC配置文件中使用一个不同的解析器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd     
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 扫描控制层的注解,使其成为Spring管理的Bean -->
    <context:component-scan base-package="com.artisan.controller" />
    <!-- 静态资源文件 -->
    <mvc:annotation-driven />
    <mvc:resources mapping="/css/**" location="/css/" />
    <mvc:resources mapping="/*.jsp" location="/" />
    <!-- 视图解析器 -->
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
    <!--2 注册上传 StandardServletMultipartResolver 第二个不需要第三方 jar 包支持,它使用 servlet 
        内置的上传功能, 但是只能在 Servlet 3 以上的版本使用。 -->
    <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
    </bean>
</beans>


其余代码同

Spring MVC-09循序渐进之文件上传(基于Apache Commons FileUpload)


测试


20180305221404868.png


2018030522142030.png



20180305221449187.png



源码


代码已提交到github

https://github.com/yangshangwei/SpringMvcTutorialArtisan

相关文章
|
9月前
|
Java 应用服务中间件 数据库
Servlet实现注册登录列表页面及其相互跳转功能
Servlet实现注册登录列表页面及其相互跳转功能
95 1
|
9月前
|
前端开发 Java Maven
Eclipse里使用Servlet实现简单的登录功能
Maven是一款非常方便的Java开发插件,它可以自动管理好开发过程中需要的jar包,提升开发者们的开发效率。在这里,我手把手教给大家如何新建一个Maven项目,并实现简单的用户登录功能。
214 0
|
9月前
|
前端开发 Java Apache
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
115 0
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
|
8月前
|
Web App开发 前端开发 Java
基于Spring3 MVC实现基于HTML form表单文件上传
基于Spring3 MVC实现基于HTML form表单文件上传
54 7
基于Spring3 MVC实现基于HTML form表单文件上传
|
9月前
|
存储 Java 应用服务中间件
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解(2)
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解
91 2
|
9月前
|
Web App开发 XML Java
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解(1)
Servlet执行流程&生命周期&方法介绍&体系结构、Request和Response的功能详解
159 2
|
8月前
|
Java Spring
Spring实现文件上传,文件上传
Spring实现文件上传,文件上传
|
8月前
|
XML 前端开发 Java
SpringMVC的架构有什么优势?——异常处理与文件上传(五)
SpringMVC的架构有什么优势?——异常处理与文件上传(五)
|
8月前
|
Java 应用服务中间件 开发工具
基于Servlet的3.1以上注解方式完成上传功能。
基于Servlet的3.1以上注解方式完成上传功能。
37 0
|
8月前
|
Java Apache
基于servlet完成文件上传功能
基于servlet完成文件上传功能
56 0