基于能不用xml配置就不用的原则,这次写一下如何零xml配置Spring MVC的文件上传功能
首先配置DispatchServlet
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[]{WebConfig.class};
}
//将DispatchServlet映射到“/”
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/*
设置Multipart具体细节(必须)
指定文件存放的临时路径
上传文件最大容量
整个请求的最大容量
0表示将所有上传的文件写入到磁盘中
*/
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(new MultipartConfigElement("/home/eros/temp",20971520,41943040,0));
}
}
配置DispatchServlet负责加载的bean
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = "controller")
public class WebConfig extends WebMvcConfigurerAdapter{
//配置视图解析器
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver=new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
//配置静态资源处理
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
//配置Multipart解析器
@Bean
public MultipartResolver multipartResolver(){
StandardServletMultipartResolver resolver=new StandardServletMultipartResolver();
resolver.setResolveLazily(true);
return resolver;
}
}
配置ContextLoaderListener负责加载的bean
@Configuration
@ComponentScan(basePackages = "config",excludeFilters =
{@ComponentScan.Filter(type = FilterType.ANNOTATION,value = EnableWebMvc.class)})
public class RootConfig {
}
设置Controller
@Controller
@RequestMapping(value = "/home")
public class HomeController {
//上传功能
@RequestMapping(value = "/upload",method = RequestMethod.GET)
public String showUploadPage(){
return "file";
}
//处理文件上传
@RequestMapping(value = "/doUpload",method = RequestMethod.POST)
//通过@RequestPart指定请求中对应part的数据
public String doUpload(@RequestPart("file") MultipartFile file) throws IOException {
if (!file.isEmpty()){
FileUtils.copyInputStreamToFile(file.getInputStream()
,new File("/home/eros/"+file.getOriginalFilename()));
}
return "success";
}
}
file.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Upload</title>
</head>
<body>
<h1>上传附件</h1>
<!--交由映射到“/home/doUpload的Controller处理请求”-->
<form method="post" action="/home/doUpload" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
</body>
</html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>success</title>
</head>
<body>
<h1>Success</h1>
</body>
</html>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.eros.dgeek</groupId>
<artifactId>SpringMVC</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpringMVC Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>8.5.13</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<finalName>SpringMVCLearning</finalName>
</build>
</project>