diff --git a/spring-mvc-java/.classpath b/spring-mvc-java/.classpath
index 6b533711d3..a642d37ceb 100644
--- a/spring-mvc-java/.classpath
+++ b/spring-mvc-java/.classpath
@@ -1,37 +1,37 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml
index d9a578cb8c..4358e7939f 100644
--- a/spring-mvc-java/pom.xml
+++ b/spring-mvc-java/pom.xml
@@ -57,6 +57,13 @@
slf4j-log4j12
${org.slf4j.version}
+
+
+ commons-fileupload
+ commons-fileupload
+ 1.3.1
+
+
junit
diff --git a/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/ClientWebConfig.java b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/ClientWebConfig.java
index db57b4716b..3f451f4259 100644
--- a/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/ClientWebConfig.java
+++ b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/ClientWebConfig.java
@@ -25,69 +25,71 @@ import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
@Configuration
public class ClientWebConfig extends WebMvcConfigurerAdapter {
- public ClientWebConfig() {
- super();
- }
+ public ClientWebConfig() {
+ super();
+ }
- // API
+ // API
- @Override
- public void addViewControllers(final ViewControllerRegistry registry) {
- super.addViewControllers(registry);
+ @Override
+ public void addViewControllers(final ViewControllerRegistry registry) {
+ super.addViewControllers(registry);
- registry.addViewController("/sample.html");
- }
+ registry.addViewController("/sample.html");
+ registry.addViewController("/fileUpload.html");
+ registry.addViewController("/fileUploadForm.html");
+ }
- @Bean
- public ViewResolver thymeleafViewResolver() {
- final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
- viewResolver.setTemplateEngine(templateEngine());
- viewResolver.setOrder(1);
- return viewResolver;
- }
+ @Bean
+ public ViewResolver thymeleafViewResolver() {
+ final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
+ viewResolver.setTemplateEngine(templateEngine());
+ viewResolver.setOrder(1);
+ return viewResolver;
+ }
- @Bean
- public ViewResolver viewResolver() {
- final InternalResourceViewResolver bean = new InternalResourceViewResolver();
- bean.setViewClass(JstlView.class);
- bean.setPrefix("/WEB-INF/view/");
- bean.setSuffix(".jsp");
- bean.setOrder(0);
- return bean;
- }
+ @Bean
+ public ViewResolver viewResolver() {
+ final InternalResourceViewResolver bean = new InternalResourceViewResolver();
+ bean.setViewClass(JstlView.class);
+ bean.setPrefix("/WEB-INF/view/");
+ bean.setSuffix(".jsp");
+ bean.setOrder(0);
+ return bean;
+ }
- @Bean
- @Description("Thymeleaf template resolver serving HTML 5")
- public ServletContextTemplateResolver templateResolver() {
- final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
- templateResolver.setPrefix("/WEB-INF/templates/");
- templateResolver.setSuffix(".html");
- templateResolver.setTemplateMode("HTML5");
- return templateResolver;
- }
+ @Bean
+ @Description("Thymeleaf template resolver serving HTML 5")
+ public ServletContextTemplateResolver templateResolver() {
+ final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
+ templateResolver.setPrefix("/WEB-INF/templates/");
+ templateResolver.setSuffix(".html");
+ templateResolver.setTemplateMode("HTML5");
+ return templateResolver;
+ }
- @Bean
- @Description("Thymeleaf template engine with Spring integration")
- public SpringTemplateEngine templateEngine() {
- final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
- templateEngine.setTemplateResolver(templateResolver());
- final Set dialects = new HashSet<>();
- dialects.add(new CustomDialect());
- templateEngine.setAdditionalDialects(dialects);
- return templateEngine;
- }
+ @Bean
+ @Description("Thymeleaf template engine with Spring integration")
+ public SpringTemplateEngine templateEngine() {
+ final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
+ templateEngine.setTemplateResolver(templateResolver());
+ final Set dialects = new HashSet<>();
+ dialects.add(new CustomDialect());
+ templateEngine.setAdditionalDialects(dialects);
+ return templateEngine;
+ }
- @Bean
- @Description("Spring message resolver")
- public MessageSource messageSource() {
- final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
- messageSource.setBasename("messages");
- return messageSource;
- }
+ @Bean
+ @Description("Spring message resolver")
+ public MessageSource messageSource() {
+ final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
+ messageSource.setBasename("messages");
+ return messageSource;
+ }
- @Override
- public void addResourceHandlers(final ResourceHandlerRegistry registry) {
- registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
- }
+ @Override
+ public void addResourceHandlers(final ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
+ }
}
\ No newline at end of file
diff --git a/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/MainWebAppInitializer.java b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/MainWebAppInitializer.java
index 87502e2088..9dd9ae98b0 100644
--- a/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/MainWebAppInitializer.java
+++ b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/MainWebAppInitializer.java
@@ -14,28 +14,38 @@ import org.springframework.web.servlet.DispatcherServlet;
public class MainWebAppInitializer implements WebApplicationInitializer {
- /**
- * Register and configure all Servlet container components necessary to power the web application.
- */
- @Override
- public void onStartup(final ServletContext sc) throws ServletException {
- System.out.println("MainWebAppInitializer.onStartup()");
+ private static final String TMP_FOLDER = "C:/Users/ivan/Desktop/tmp"; // 5
+ // MB
+ private static final int MAX_UPLOAD_SIZE = 5 * 1024 * 1024; // 5 MB
- // Create the 'root' Spring application context
- final AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
- root.scan("org.baeldung.spring.web.config");
- // root.getEnvironment().setDefaultProfiles("embedded");
+ /**
+ * Register and configure all Servlet container components necessary to power the web application.
+ */
+ @Override
+ public void onStartup(final ServletContext sc) throws ServletException {
- // Manages the lifecycle of the root application context
- sc.addListener(new ContextLoaderListener(root));
+ // Create the 'root' Spring application context
+ final AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
+ root.scan("org.baeldung.spring.web.config");
+ // root.getEnvironment().setDefaultProfiles("embedded");
- // Handles requests into the application
- final ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext()));
- appServlet.setLoadOnStartup(1);
- final Set mappingConflicts = appServlet.addMapping("/");
- if (!mappingConflicts.isEmpty()) {
- throw new IllegalStateException("'appServlet' could not be mapped to '/' due " + "to an existing mapping. This is a known issue under Tomcat versions " + "<= 7.0.14; see https://issues.apache.org/bugzilla/show_bug.cgi?id=51278");
- }
- }
+ // Manages the lifecycle of the root application context
+ sc.addListener(new ContextLoaderListener(root));
+
+ // Handles requests into the application
+ final ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext()));
+ appServlet.setLoadOnStartup(1);
+
+ // final MultipartConfigElement multipartConfigElement = new
+ // MultipartConfigElement(TMP_FOLDER, MAX_UPLOAD_SIZE,
+ // MAX_UPLOAD_SIZE * 2, MAX_UPLOAD_SIZE / 2);
+ //
+ // appServlet.setMultipartConfig(multipartConfigElement);
+
+ final Set mappingConflicts = appServlet.addMapping("/");
+ if (!mappingConflicts.isEmpty()) {
+ throw new IllegalStateException("'appServlet' could not be mapped to '/' due " + "to an existing mapping. This is a known issue under Tomcat versions " + "<= 7.0.14; see https://issues.apache.org/bugzilla/show_bug.cgi?id=51278");
+ }
+ }
}
diff --git a/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/WebConfig.java b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/WebConfig.java
index 58438d2976..b7d87dffbc 100644
--- a/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/WebConfig.java
+++ b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/WebConfig.java
@@ -22,6 +22,21 @@ public class WebConfig extends WebMvcConfigurerAdapter {
super();
}
+ // @Bean
+ // public StandardServletMultipartResolver multipartResolver() {
+ // return new StandardServletMultipartResolver();
+ // }
+
+ // @Bean(name = "multipartResolver")
+ // public CommonsMultipartResolver multipartResolver() {
+ //
+ // final CommonsMultipartResolver multipartResolver = new
+ // CommonsMultipartResolver();
+ // multipartResolver.setMaxUploadSize(100000);
+ //
+ // return multipartResolver;
+ // }
+
@Override
public void addViewControllers(final ViewControllerRegistry registry) {
diff --git a/spring-mvc-java/src/main/java/org/baeldung/web/controller/FileUploadController.java b/spring-mvc-java/src/main/java/org/baeldung/web/controller/FileUploadController.java
new file mode 100644
index 0000000000..5c9d3cbef3
--- /dev/null
+++ b/spring-mvc-java/src/main/java/org/baeldung/web/controller/FileUploadController.java
@@ -0,0 +1,80 @@
+package org.baeldung.web.controller;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.apache.commons.io.FileUtils;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+
+@Controller
+public class FileUploadController {
+
+ @RequestMapping(value = "/addFile1", method = RequestMethod.POST)
+ public String submit(@RequestParam("file") final MultipartFile file, final ModelMap modelMap) {
+
+ modelMap.addAttribute("fileName", file.getOriginalFilename());
+ modelMap.addAttribute("fileType", file.getContentType());
+
+ return "fileUploadView";
+ }
+
+ @RequestMapping(value = "/addFile2", method = RequestMethod.POST)
+ public String submit(final HttpServletRequest request, final HttpServletResponse response,
+ final ModelMap modelMap) {
+
+ final String TEMP_PATH = "C:\\Users\\ivan\\Desktop\\tmp\\";
+
+ try {
+
+ final DiskFileItemFactory factory = new DiskFileItemFactory();
+
+ // Configure a repository (to ensure a secure temp location is used)
+ final File repository = new File(TEMP_PATH);
+ factory.setRepository(repository);
+
+ // Create a new file upload handler
+ final ServletFileUpload upload = new ServletFileUpload(factory);
+
+ // Parse the request
+ final List items = upload.parseRequest(request);
+
+ final Iterator iter = items.iterator();
+
+ while (iter.hasNext()) {
+
+ final FileItem item = iter.next();
+
+ if (!item.isFormField()) {
+
+ final File targetFile = new File(TEMP_PATH + item.getName());
+ FileUtils.copyInputStreamToFile(item.getInputStream(), targetFile);
+
+ modelMap.addAttribute("fileName", item.getName());
+ modelMap.addAttribute("fileType", item.getContentType());
+ }
+ }
+
+ } catch (final FileUploadException e) {
+ e.printStackTrace();
+
+ } catch (final IOException e) {
+ e.printStackTrace();
+ }
+
+ return "fileUploadView";
+ }
+}
diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/fileUploadForm.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/fileUploadForm.jsp
new file mode 100644
index 0000000000..05a7e25a02
--- /dev/null
+++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/fileUploadForm.jsp
@@ -0,0 +1,47 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+
+
+
+ File Upload Example
+
+
+
+
+ Enter The File to Upload (MultipartFile handling)
+
+
+
+
+
+
+
+
+
+ Enter The File to Upload (HttpServletRequest handling)
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/fileUploadView.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/fileUploadView.jsp
new file mode 100644
index 0000000000..779c26a597
--- /dev/null
+++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/fileUploadView.jsp
@@ -0,0 +1,20 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+
+
+ Spring MVC File Upload
+
+
+ Submitted File
+
+
+ | OriginalFileName : |
+ ${fileName} |
+
+
+ | Type : |
+ ${fileType} |
+
+
+
+
\ No newline at end of file