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 d1e24a4d3d..f53a07264d 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..6084943ddd 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,69 @@ 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");
+ }
- @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..ad37bbec5e 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,37 @@ 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";
+ 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 09e9cff917..bd2af0886e 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
@@ -4,6 +4,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
@@ -22,7 +23,19 @@ 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) {
@@ -56,4 +69,4 @@ public class WebConfig extends WebMvcConfigurerAdapter {
return bean;
}
-}
\ No newline at end of file
+}
diff --git a/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/WebConfig.java.orig b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/WebConfig.java.orig
new file mode 100644
index 0000000000..78307849b4
--- /dev/null
+++ b/spring-mvc-java/src/main/java/org/baeldung/spring/web/config/WebConfig.java.orig
@@ -0,0 +1,116 @@
+package org.baeldung.spring.web.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+import org.springframework.web.servlet.ViewResolver;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.view.InternalResourceViewResolver;
+import org.springframework.web.servlet.view.JstlView;
+import org.springframework.web.servlet.view.ResourceBundleViewResolver;
+import org.springframework.web.servlet.view.XmlViewResolver;
+
+@Configuration
+@EnableWebMvc
+@ComponentScan("org.baeldung.web")
+public class WebConfig extends WebMvcConfigurerAdapter {
+
+<<<<<<< HEAD
+ public WebConfig() {
+ super();
+ }
+
+ //
+
+ @Override
+ public void addViewControllers(final ViewControllerRegistry registry) {
+ super.addViewControllers(registry);
+ registry.addViewController("/sample.html");
+ }
+
+ @Bean
+ public ViewResolver internalResourceViewResolver() {
+ final InternalResourceViewResolver bean = new InternalResourceViewResolver();
+ bean.setViewClass(JstlView.class);
+ bean.setPrefix("/WEB-INF/view/");
+ bean.setSuffix(".jsp");
+ bean.setOrder(2);
+ return bean;
+ }
+
+ @Bean
+ public ViewResolver xmlViewResolver() {
+ final XmlViewResolver bean = new XmlViewResolver();
+ bean.setLocation(new ClassPathResource("views.xml"));
+ bean.setOrder(1);
+ return bean;
+ }
+
+ @Bean
+ public ViewResolver resourceBundleViewResolver() {
+ final ResourceBundleViewResolver bean = new ResourceBundleViewResolver();
+ bean.setBasename("views");
+ bean.setOrder(0);
+ return bean;
+ }
+
+=======
+ public WebConfig() {
+ 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) {
+
+ super.addViewControllers(registry);
+ registry.addViewController("/sample.html");
+ }
+
+ @Bean
+ public ViewResolver internalResourceViewResolver() {
+
+ final InternalResourceViewResolver bean = new InternalResourceViewResolver();
+ bean.setViewClass(JstlView.class);
+ bean.setPrefix("/WEB-INF/view/");
+ bean.setSuffix(".jsp");
+ bean.setOrder(2);
+ return bean;
+ }
+
+ @Bean
+ public ViewResolver xmlViewResolver() {
+
+ final XmlViewResolver bean = new XmlViewResolver();
+ bean.setLocation(new ClassPathResource("views.xml"));
+ bean.setOrder(1);
+ return bean;
+ }
+
+ @Bean
+ public ViewResolver resourceBundleViewResolver() {
+
+ final ResourceBundleViewResolver bean = new ResourceBundleViewResolver();
+ bean.setBasename("views");
+ bean.setOrder(0);
+ return bean;
+ }
+>>>>>>> 3061fc7c0f9b17bf517259154900e9a70a0c512b
+}
\ No newline at end of file
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..6f557adf0f
--- /dev/null
+++ b/spring-mvc-java/src/main/java/org/baeldung/web/controller/FileUploadController.java
@@ -0,0 +1,32 @@
+package org.baeldung.web.controller;
+
+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 = "/fileUpload", method = RequestMethod.GET)
+ public String displayForm() {
+
+ return "fileUploadForm";
+ }
+
+ @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
+ public String submit(@RequestParam("file") final MultipartFile file, final ModelMap modelMap) {
+
+ modelMap.addAttribute("file", file);
+ return "fileUploadView";
+ }
+
+ @RequestMapping(value = "/uploadMultiFile", method = RequestMethod.POST)
+ public String submit(@RequestParam("files") final MultipartFile[] files, final ModelMap modelMap) {
+
+ modelMap.addAttribute("files", files);
+ 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..1414b824ff
--- /dev/null
+++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/fileUploadForm.jsp
@@ -0,0 +1,55 @@
+<%@ 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 (Single file)
+
+
+
+
+
+
+
+
+
+ Enter The Files to Upload (Multiple files)
+
+
+
+
+
+
+
+
+
+
\ 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..d6f748c6af
--- /dev/null
+++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/fileUploadView.jsp
@@ -0,0 +1,36 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+
+
+
+ Spring MVC File Upload
+
+
+
+ Submitted File (Single)
+
+
+ | OriginalFileName : |
+ ${file.originalFilename} |
+
+
+ | Type : |
+ ${file.contentType} |
+
+
+
+
+ Submitted Files (Multiple)
+
+
+
+ | OriginalFileName : |
+ ${file.originalFilename} |
+
+
+ | Type : |
+ ${file.contentType} |
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java
index b5238b04d5..76351b96f7 100644
--- a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java
+++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java
@@ -8,10 +8,10 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
@Configuration
public class ClientWebConfig extends WebMvcConfigurerAdapter {
- public ClientWebConfig() {
- super();
- }
+ public ClientWebConfig() {
+ super();
+ }
- // API
+ // API
}
\ No newline at end of file
diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java
index 06b2c0e461..bee09b742a 100644
--- a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java
+++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java
@@ -1,6 +1,12 @@
package com.baeldung.spring;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.support.MessageSourceResourceBundle;
+import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@@ -11,27 +17,40 @@ import org.springframework.web.servlet.view.JstlView;
//@Configuration
public class ClientWebConfigJava extends WebMvcConfigurerAdapter {
- public ClientWebConfigJava() {
- super();
- }
+ public ClientWebConfigJava() {
+ super();
+ }
- // API
+ @Bean
+ public MessageSource messageSource() {
- @Override
- public void addViewControllers(final ViewControllerRegistry registry) {
- super.addViewControllers(registry);
+ final ResourceBundleMessageSource ms = new ResourceBundleMessageSource();
+ ms.setBasenames("messages");
+ return ms;
+ }
- registry.addViewController("/sample.html");
- }
+ @Bean
+ public ResourceBundle getBeanResourceBundle() {
- @Bean
- public ViewResolver viewResolver() {
- final InternalResourceViewResolver bean = new InternalResourceViewResolver();
+ final Locale locale = Locale.getDefault();
+ return new MessageSourceResourceBundle(messageSource(), locale);
+ }
- bean.setViewClass(JstlView.class);
- bean.setPrefix("/WEB-INF/view/");
- bean.setSuffix(".jsp");
+ @Override
+ public void addViewControllers(final ViewControllerRegistry registry) {
+ super.addViewControllers(registry);
- return bean;
- }
+ registry.addViewController("/sample.html");
+ }
+
+ @Bean
+ public ViewResolver viewResolver() {
+ final InternalResourceViewResolver bean = new InternalResourceViewResolver();
+
+ bean.setViewClass(JstlView.class);
+ bean.setPrefix("/WEB-INF/view/");
+ bean.setSuffix(".jsp");
+
+ return bean;
+ }
}
\ No newline at end of file
diff --git a/spring-mvc-xml/src/main/resources/webMvcConfig.xml b/spring-mvc-xml/src/main/resources/webMvcConfig.xml
index 0947eec368..4f2407d097 100644
--- a/spring-mvc-xml/src/main/resources/webMvcConfig.xml
+++ b/spring-mvc-xml/src/main/resources/webMvcConfig.xml
@@ -25,4 +25,4 @@
-
\ No newline at end of file
+
diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/view/personForm.jsp b/spring-mvc-xml/src/main/webapp/WEB-INF/view/personForm.jsp
index 1d14658f93..535348b7d2 100644
--- a/spring-mvc-xml/src/main/webapp/WEB-INF/view/personForm.jsp
+++ b/spring-mvc-xml/src/main/webapp/WEB-INF/view/personForm.jsp
@@ -24,7 +24,7 @@
Welcome, Enter the Person Details
-
+
@@ -117,4 +117,4 @@