diff --git a/spring-mvc-simple/pom.xml b/spring-mvc-simple/pom.xml
index 0cfb3e6dee..14590f3de4 100644
--- a/spring-mvc-simple/pom.xml
+++ b/spring-mvc-simple/pom.xml
@@ -15,14 +15,18 @@
- 4.3.4.RELEASE
- 2.6
+ 4.3.10.RELEASE
+ 3.1.0
1.2
2.3.1
3.1.0
- 5.3.3.Final
+ 5.4.1.Final
enter-location-of-server
1.3.2
+ 1.8
+ 3.0.7.RELEASE
+ 2.4.12
+ 2.3.23
@@ -79,6 +83,38 @@
commons-fileupload
${fileupload.version}
+
+
+
+ org.thymeleaf
+ thymeleaf
+ ${org.thymeleaf-version}
+
+
+ org.thymeleaf
+ thymeleaf-spring4
+ ${org.thymeleaf-version}
+
+
+
+
+ org.freemarker
+ freemarker
+ ${freemarker.version}
+
+
+ org.springframework
+ spring-context-support
+ ${springframework.version}
+
+
+
+
+ org.codehaus.groovy
+ groovy-templates
+ ${groovy.version}
+
+
@@ -94,6 +130,14 @@
${deploy-path}
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+
+
springMvcSimple
diff --git a/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/ApplicationConfiguration.java b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/ApplicationConfiguration.java
index 9ace968bbe..b62ccae465 100644
--- a/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/ApplicationConfiguration.java
+++ b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/ApplicationConfiguration.java
@@ -12,7 +12,7 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
-@ComponentScan(basePackages = "com.baeldung.springmvcforms")
+@ComponentScan(basePackages = { "com.baeldung.springmvcforms", "com.baeldung.spring.controller", "com.baeldung.spring.validator" })
class ApplicationConfiguration extends WebMvcConfigurerAdapter {
@Override
diff --git a/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/FreemarkerConfiguration.java b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/FreemarkerConfiguration.java
new file mode 100644
index 0000000000..e43238f8a6
--- /dev/null
+++ b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/FreemarkerConfiguration.java
@@ -0,0 +1,29 @@
+package com.baeldung.spring.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
+import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
+
+@Configuration
+@EnableWebMvc
+@ComponentScan(basePackages = { "com.baeldung.springmvcforms", "com.baeldung.spring.controller", "com.baeldung.spring.validator" })
+public class FreemarkerConfiguration {
+ @Bean
+ public FreeMarkerConfigurer freemarkerConfig() {
+ FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
+ freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/");
+ return freeMarkerConfigurer;
+ }
+
+ @Bean
+ public FreeMarkerViewResolver freemarkerViewResolver() {
+ FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
+ resolver.setCache(true);
+ resolver.setPrefix("");
+ resolver.setSuffix(".ftl");
+ return resolver;
+ }
+}
diff --git a/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/GroovyConfiguration.java b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/GroovyConfiguration.java
new file mode 100644
index 0000000000..b7a9256fc0
--- /dev/null
+++ b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/GroovyConfiguration.java
@@ -0,0 +1,29 @@
+package com.baeldung.spring.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer;
+import org.springframework.web.servlet.view.groovy.GroovyMarkupViewResolver;
+
+@Configuration
+@EnableWebMvc
+@ComponentScan(basePackages = { "com.baeldung.springmvcforms", "com.baeldung.spring.controller", "com.baeldung.spring.validator" })
+public class GroovyConfiguration {
+
+ @Bean
+ public GroovyMarkupConfigurer groovyMarkupConfigurer() {
+ GroovyMarkupConfigurer configurer = new GroovyMarkupConfigurer();
+ configurer.setResourceLoaderPath("/WEB-INF/views/");
+ return configurer;
+ }
+
+ @Bean
+ public GroovyMarkupViewResolver thymeleafViewResolver() {
+ GroovyMarkupViewResolver viewResolver = new GroovyMarkupViewResolver();
+ viewResolver.setSuffix(".tpl");
+ return viewResolver;
+ }
+
+}
diff --git a/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/ThymeleafConfiguration.java b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/ThymeleafConfiguration.java
new file mode 100644
index 0000000000..257dbc718a
--- /dev/null
+++ b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/ThymeleafConfiguration.java
@@ -0,0 +1,38 @@
+package com.baeldung.spring.configuration;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.thymeleaf.spring4.SpringTemplateEngine;
+import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
+import org.thymeleaf.spring4.view.ThymeleafViewResolver;
+
+@Configuration
+@EnableWebMvc
+@ComponentScan(basePackages = { "com.baeldung.springmvcforms", "com.baeldung.spring.controller", "com.baeldung.spring.validator" })
+public class ThymeleafConfiguration {
+ @Bean
+ public SpringTemplateEngine templateEngine() {
+ SpringTemplateEngine templateEngine = new SpringTemplateEngine();
+ templateEngine.setTemplateResolver(thymeleafTemplateResolver());
+ return templateEngine;
+ }
+
+ @Bean
+ public SpringResourceTemplateResolver thymeleafTemplateResolver() {
+ SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
+ templateResolver.setPrefix("/WEB-INF/views/");
+ templateResolver.setSuffix(".html");
+ templateResolver.setTemplateMode("HTML5");
+ return templateResolver;
+ }
+
+ @Bean
+ public ThymeleafViewResolver thymeleafViewResolver() {
+ ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
+ viewResolver.setTemplateEngine(templateEngine());
+ return viewResolver;
+ }
+
+}
diff --git a/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/WebInitializer.java b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/WebInitializer.java
index d6bbf5eabd..3e5b416191 100644
--- a/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/WebInitializer.java
+++ b/spring-mvc-simple/src/main/java/com/baeldung/spring/configuration/WebInitializer.java
@@ -15,6 +15,9 @@ public class WebInitializer implements WebApplicationInitializer {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(ApplicationConfiguration.class);
+ //ctx.register(ThymeleafConfiguration.class);
+ //ctx.register(FreemarkerConfiguration.class);
+ //ctx.register(GroovyConfiguration.class);
ctx.setServletContext(container);
// Manage the lifecycle of the root application context
diff --git a/spring-mvc-simple/src/main/java/com/baeldung/spring/controller/UserController.java b/spring-mvc-simple/src/main/java/com/baeldung/spring/controller/UserController.java
new file mode 100644
index 0000000000..55179938fc
--- /dev/null
+++ b/spring-mvc-simple/src/main/java/com/baeldung/spring/controller/UserController.java
@@ -0,0 +1,44 @@
+package com.baeldung.spring.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.baeldung.spring.domain.User;
+
+@Controller
+public class UserController {
+
+ @GetMapping("/registration")
+ public String getRegistration(Model model) {
+ model.addAttribute("user", new User());
+ return "registration";
+ }
+
+ @GetMapping("/registration-thymeleaf")
+ public String getRegistrationThymeleaf(Model model) {
+ model.addAttribute("user", new User());
+ return "registration-thymeleaf";
+ }
+
+ @GetMapping("/registration-freemarker")
+ public String getRegistrationFreemarker(Model model) {
+ model.addAttribute("user", new User());
+ return "registration-freemarker";
+ }
+
+ @GetMapping("/registration-groovy")
+ public String getRegistrationGroovy(Model model) {
+ model.addAttribute("user", new User());
+ return "registration-groovy";
+ }
+
+ @PostMapping("/register")
+ @ResponseBody
+ public void register(User user){
+ System.out.println(user.getEmail());
+ }
+
+}
diff --git a/spring-mvc-simple/src/main/java/com/baeldung/spring/domain/User.java b/spring-mvc-simple/src/main/java/com/baeldung/spring/domain/User.java
new file mode 100644
index 0000000000..8016f98d85
--- /dev/null
+++ b/spring-mvc-simple/src/main/java/com/baeldung/spring/domain/User.java
@@ -0,0 +1,23 @@
+package com.baeldung.spring.domain;
+
+public class User {
+ private String email;
+ private String password;
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+}
diff --git a/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-freemarker.ftl b/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-freemarker.ftl
new file mode 100644
index 0000000000..8dce9a88c9
--- /dev/null
+++ b/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-freemarker.ftl
@@ -0,0 +1,15 @@
+<#import "/spring.ftl" as spring/>
+
+
+
+User Registration
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-groovy.tpl b/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-groovy.tpl
new file mode 100644
index 0000000000..291077fc2e
--- /dev/null
+++ b/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-groovy.tpl
@@ -0,0 +1,18 @@
+yieldUnescaped ''
+html(lang:'en') {
+ head {
+ meta('http-equiv':'"Content-Type" content="text/html; charset=utf-8"')
+ title('User Registration')
+ }
+ body {
+ form (id:'userForm', action:'register', method:'post') {
+ label (for:'email', 'Email')
+ input (name:'email', type:'text', value:user.email?:'')
+ label (for:'password', 'Password')
+ input (name:'password', type:'password', value:user.password?:'')
+ div (class:'form-actions') {
+ input (type:'submit', value:'Submit')
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-thymeleaf.html b/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-thymeleaf.html
new file mode 100644
index 0000000000..c98f3283c0
--- /dev/null
+++ b/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration-thymeleaf.html
@@ -0,0 +1,13 @@
+
+
+
+User Registration
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration.jsp b/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration.jsp
new file mode 100644
index 0000000000..7c2d9c73b1
--- /dev/null
+++ b/spring-mvc-simple/src/main/webapp/WEB-INF/views/registration.jsp
@@ -0,0 +1,18 @@
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+
+
+
+User Registration
+
+
+
+ Email:
+
+
+ Password:
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-simple/src/main/webapp/WEB-INF/web.xml b/spring-mvc-simple/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index b6f1065cad..0000000000
--- a/spring-mvc-simple/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- spring
- org.springframework.web.servlet.DispatcherServlet
-
- contextConfigLocation
- classpath*:spring-servlet_RequestMappingHandlerAdapter.xml
-
- 1
-
-
- spring
- /
-
-
\ No newline at end of file