SpringMVC multipart文件上传详细教程之一:项目概述及基本配置

来源:互联网 发布:中国国家顶级域名 编辑:程序博客网 时间:2024/06/05 18:01

项目概述

该demo是关于SpringMVC mutipart文件上传的实例。程序基于Java配置,注解驱动。视图解析器为InternalResourceViewResolver,multipart解析器为StandardServletMultipartResolver,视图为JSP,版本管理工具为Maven,开发工具为IntelliJ IDEA。完整源码已经上传至Github,项目Repository地址为:https://github.com/Dodozhou/SpringMVC_FileUpload,可前往克隆完整项目。
下图是项目结构图:
这里写图片描述

容器初始化及基本配置

首先创建initializer包,并在该包下创建WebAppinitializer类:
WebAppInitializer.java

package com.star.initializer;import com.star.config.RootConfig;import com.star.config.WebConfig;import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;import javax.servlet.MultipartConfigElement;import javax.servlet.ServletRegistration;import javax.servlet.http.HttpServletRequest;/** * Created by hp on 2017/2/24. * 通过abstractAnnotationConfigDispatcherServletInitializer来配置DispatcherServlet是传统 * web.xml方式的替代方案。如果愿意,可以同时包含web.xml和该类,但这没有必要。 * 该方式来配置servlet,只支持Servlet3.0的服务器,如Tomcat7或更高版本。 */public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {    //配置servlet映射路径,它会将一个或多个路径映射到DispatcherServlet上。    @Override    protected String[] getServletMappings() {        return new String[]{"/"};    }    //指定Spring中的另一个上下文(ContextLoderListener创建的上下文)加载配置的文件    //该配置类配置驱动应用后端的中间层和数据层组件的bean    @Override    protected Class<?>[] getRootConfigClasses() {        return new Class<?>[]{RootConfig.class};    }    //该方法指定了DispatcherServlet加载配置的文件    @Override    protected Class<?>[] getServletConfigClasses() {        return new Class<?>[] {WebConfig.class};    }    //配置文件上传的具体参数,如保存路径、文件大小等等    @Override    protected void customizeRegistration(ServletRegistration.Dynamic registration) {        registration.setMultipartConfig(                new MultipartConfigElement("",2000000,10000000,0));    }}

该类继承了abstractAnnotationConfigDispatcherServletInitializer类并重写了4个方法:

  • getServletMappings():设置Servlet映射路径
  • getRootConfigClasses():指定ContextLoderListener创建的上下文的配置类
  • getServletConfigClasses():指定DispatcherServlet创建的上下文加载配置的类
  • customizeRegistration():配置multipart上传的详细参数(临时存放文件夹,单个文件最大大小,整个请求最大大小)


    接着创建RootConfig,该类用来配置ContextLoderListener创建的应用上下文中的bean,通常是后端中间层组件的声明文件。在本项目中不做配置,但需要加上@Configuration注解。
    RootConfig.java
package com.star.config;import org.springframework.context.annotation.Configuration;/** * Created by hp on 2017/2/24. * 该类用来配置ContextLoderListener创建的应用上下文中的bean */@Configurationpublic class RootConfig {}



重点是WebConfig,在该配置文件中,配置了视图解析器、multipart解析器、静态资源转发器、web组件的bean等。
WebConfig.java

package com.star.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.multipart.MultipartResolver;import org.springframework.web.multipart.support.StandardServletMultipartResolver;import org.springframework.web.servlet.ViewResolver;import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.servlet.view.InternalResourceViewResolver;import java.io.IOException;/** * Created by hp on 2017/2/24. */@Configuration@EnableWebMvc  //启用注解驱动的SpringMVC,等同于<mvc:annotation-driver>@ComponentScan("com.star")public class WebConfig extends WebMvcConfigurerAdapter{    //配置视图解析器、静态资源转发器、web组件的bean等    //继承WebMvcConfigurerAdapter可以使用其静态资源处理方法    @Bean    public ViewResolver viewResolver(){        InternalResourceViewResolver resolver=new InternalResourceViewResolver();        resolver.setPrefix("/WEB-INF/views/");        resolver.setSuffix(".jsp");        return resolver;    }    //将静态资源的请求转发到Servlet容器处理,而不是DispatcherServlet处理    @Override    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {        configurer.enable();    }    //配置multipart解析器    //具体参数的配置在AbstractAnnotationConfigDispatcherServletInitializer的方法    //customizeRegistration(Dynamic registration)方法或web.xml中设置    @Bean    public MultipartResolver multipartResolver() throws IOException{        return new StandardServletMultipartResolver();    }}

到此,项目的配置已经完成。为了篇幅的简洁,对代码中的具体方法没有讲解,若对配置文件中的方法存在疑问,可参照这篇讲解理论的博客: SpringMVC入门之九:multipart文件上传
下一篇: SpringMVC multipart文件上传详细教程之二:控制器的编写及异常处理

1 0
原创粉丝点击