diff --git a/spring-mvc-forms/pom.xml b/spring-mvc-forms/pom.xml
new file mode 100644
index 0000000000..370fd7feb2
--- /dev/null
+++ b/spring-mvc-forms/pom.xml
@@ -0,0 +1,99 @@
+
+
+
+ 4.0.0
+ com.baeldung
+ 0.1-SNAPSHOT
+ spring-mvc-forms
+
+ spring-mvc-forms
+ war
+
+
+
+ org.springframework
+ spring-webmvc
+ ${springframework.version}
+
+
+
+ javax.servlet
+ javax.servlet-api
+ ${javax.servlet-api.version}
+
+
+
+ javax.servlet.jsp
+ javax.servlet.jsp-api
+ ${javax.servlet.jsp-api.version}
+
+
+
+ javax.servlet
+ jstl
+ ${jstl.version}
+
+
+
+ org.hibernate
+ hibernate-validator
+ ${hibernate-validator.version}
+
+
+
+
+
+
+
+ spring-mvc-forms
+
+ true
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+
+ ${maven-compiler-plugin.source}
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ ${maven-war-plugin.version}
+
+ src/main/webapp
+ spring-mvc-forms
+ false
+ ${deploy-path}
+
+
+
+
+
+ spring-mvc-forms
+
+
+
+
+
+ 4.0.6.RELEASE
+ 2.4
+ 1.2
+ 2.3.1
+ 3.1.0
+ 3.5.1
+ 1.8
+ 5.1.1.Final
+ enter-location-of-server
+
+
+
+
diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java
new file mode 100644
index 0000000000..998f070c02
--- /dev/null
+++ b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/ApplicationConfiguration.java
@@ -0,0 +1,29 @@
+package com.baeldung.springmvcforms.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.DefaultServletHandlerConfigurer;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import org.springframework.web.servlet.view.InternalResourceViewResolver;
+
+@Configuration
+@EnableWebMvc
+@ComponentScan(basePackages = "com.baeldung.springmvcforms")
+class ApplicationConfiguration extends WebMvcConfigurerAdapter {
+
+ @Override
+ public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
+ configurer.enable();
+ }
+
+ @Bean
+ public InternalResourceViewResolver jspViewResolver() {
+ InternalResourceViewResolver bean = new InternalResourceViewResolver();
+ bean.setPrefix("/WEB-INF/views/");
+ bean.setSuffix(".jsp");
+ return bean;
+ }
+
+}
diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/WebInitializer.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/WebInitializer.java
new file mode 100644
index 0000000000..c602ea6454
--- /dev/null
+++ b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/WebInitializer.java
@@ -0,0 +1,47 @@
+package com.baeldung.springmvcforms.configuration;
+
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.ContextLoaderListener;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.servlet.DispatcherServlet;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
+public class WebInitializer implements WebApplicationInitializer {
+
+ public void onStartup(ServletContext container) throws ServletException {
+
+ AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
+ ctx.register(ApplicationConfiguration.class);
+ ctx.setServletContext(container);
+
+ // Manage the lifecycle of the root application context
+ container.addListener(new ContextLoaderListener(ctx));
+
+ ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx));
+
+ servlet.setLoadOnStartup(1);
+ servlet.addMapping("/");
+ }
+// @Override
+// public void onStartup(ServletContext container) {
+// // Create the 'root' Spring application context
+// AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
+// rootContext.register(ServiceConfig.class, JPAConfig.class, SecurityConfig.class);
+//
+// // Manage the lifecycle of the root application context
+// container.addListener(new ContextLoaderListener(rootContext));
+//
+// // Create the dispatcher servlet's Spring application context
+// AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext();
+// dispatcherServlet.register(MvcConfig.class);
+//
+// // Register and map the dispatcher servlet
+// ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherServlet));
+// dispatcher.setLoadOnStartup(1);
+// dispatcher.addMapping("/");
+//
+// }
+}
diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/EmployeeController.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/EmployeeController.java
new file mode 100644
index 0000000000..3ece77bb18
--- /dev/null
+++ b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/EmployeeController.java
@@ -0,0 +1,41 @@
+package com.baeldung.springmvcforms.controller;
+
+import com.baeldung.springmvcforms.domain.Employee;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.validation.Valid;
+import java.util.HashMap;
+import java.util.Map;
+
+@Controller
+public class EmployeeController {
+
+ Map employeeMap = new HashMap<>();
+
+ @RequestMapping(value = "/employee", method = RequestMethod.GET)
+ public ModelAndView showForm() {
+ return new ModelAndView("employeeHome", "employee", new Employee());
+ }
+
+ @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET)
+ public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) {
+ return employeeMap.get(Id);
+ }
+
+ @RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
+ public String submit(@Valid @ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) {
+ if (result.hasErrors()) {
+ return "error";
+ }
+ model.addAttribute("name", employee.getName());
+ model.addAttribute("contactNumber", employee.getContactNumber());
+ model.addAttribute("id", employee.getId());
+ employeeMap.put(employee.getId(), employee);
+ return "employeeView";
+ }
+
+}
diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/domain/Employee.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/domain/Employee.java
new file mode 100644
index 0000000000..23cb72b3dc
--- /dev/null
+++ b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/domain/Employee.java
@@ -0,0 +1,46 @@
+package com.baeldung.springmvcforms.domain;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+
+public class Employee {
+
+ private long id;
+
+ @NotNull
+ @Size(min = 5)
+ private String name;
+
+ @NotNull
+ @Size(min = 7)
+ private String contactNumber;
+
+ public Employee() {
+ super();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(final String name) {
+ this.name = name;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(final long id) {
+ this.id = id;
+ }
+
+ public String getContactNumber() {
+ return contactNumber;
+ }
+
+ public void setContactNumber(final String contactNumber) {
+ this.contactNumber = contactNumber;
+ }
+
+}
diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/employeeHome.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/employeeHome.jsp
new file mode 100644
index 0000000000..5ed572000a
--- /dev/null
+++ b/spring-mvc-forms/src/main/webapp/WEB-INF/views/employeeHome.jsp
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
+
+
+
+Form Example - Register an Employee
+
+
+ Welcome, Enter The Employee Details
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/employeeView.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/employeeView.jsp
new file mode 100644
index 0000000000..1457bc5fc8
--- /dev/null
+++ b/spring-mvc-forms/src/main/webapp/WEB-INF/views/employeeView.jsp
@@ -0,0 +1,24 @@
+<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
+
+
+Spring MVC Form Handling
+
+
+
+ Submitted Employee Information
+
+
+ Name : |
+ ${name} |
+
+
+ ID : |
+ ${id} |
+
+
+ Contact Number : |
+ ${contactNumber} |
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/error.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/error.jsp
new file mode 100644
index 0000000000..8f3d83af17
--- /dev/null
+++ b/spring-mvc-forms/src/main/webapp/WEB-INF/views/error.jsp
@@ -0,0 +1,20 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+SpringMVCExample
+
+
+
+ Pleas enter the correct details
+
+
+
+
+
\ No newline at end of file