Spring MVC — Base Command Controller | Code Factory
Donate : Link
WordPress Blog : Link
Applications… : Link
Spring Tutorial Index Page: Link
- Command Controllers are used for validations, for execute interceptors, for applying I18N.
- The ControllerClassNameHandlerMapping class is the convention-based handler mapping class, which maps the URL request(s) to the name of the controllers mentioned in the configuration.
- For example, using below configuration, If URI
- /empSave.code or /emp{any letter}.code is requested, DispatcherServlet will forward the request to the EmpController.
- /emp.code is requested, DispatcherServlet will forward the request to the EmpController.
- /Emp.code is requested where E is capital cased, DispatcherServlet will not find any controller and the server will throw 404 status error.
Create Java Web Project
- Open Eclipse
- Go to File -> New -> Dynamic Web Project
- Create MVC-Controller5 project
- Right click on project -> Build Path -> Configure Build Path -> Libraries tab -> Add External JARs (Used 2.X jars)
- commons-logging-X.X.jar
- spring-beans-X.X.X.jar
- spring-context-X.X.X.jar
- spring-core-X.X.X.jar
- spring-web-X.X.X.jar
- spring-webmvc-X.X.X.jar - Also, add these jars in WEB-INF/lib folder for runtime.
- * You can find dtd information from spring-beans-X.X.X.jar -> org -> springframework -> beans -> factory -> xml -> spring-beans.dtd (line no 36 & 37)
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<display-name>MVC-Controller4</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- default -->
<servlet>
<servlet-name>helloWorld</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloWorld</servlet-name>
<url-pattern>*.code</url-pattern>
</servlet-mapping></web-app>
helloWorld-servlet.xml
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans> <!-- handler mapping -->
<!-- first we have to request /emp.code because here we use ControllerClassNameHandlerMapping
and it will code EmpController -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" /> <!-- controller -->
<bean class="com.codeFactory.controller.EmpController"></bean> <!-- view resolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
EmpBean.java
package com.codeFactory.controller;/**
* @author code.factory
*
*/
public class EmpBean { private String name;
private String email; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
}
}
EmpController.java
package com.codeFactory.controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;/**
* @author code.factory
*
*/
public class EmpController extends SimpleFormController { public EmpController() {
setCommandName("form");
setCommandClass(EmpBean.class);
setValidator(new EmpValidator());
setFormView("index");
} @Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command,
BindException errors) throws Exception {
EmpBean empBean = (EmpBean) command;
System.out.println(empBean.getName());
System.out.println(empBean.getEmail());
return new ModelAndView("success");
}
}
EmpValidator.java
package com.codeFactory.controller;import org.springframework.validation.Errors;
import org.springframework.validation.Validator;/**
* @author code.factory
*
*/
public class EmpValidator implements Validator { @Override
public boolean supports(Class arg0) {
return true;
} @Override
public void validate(Object form, Errors errors) {
EmpBean empBean = (EmpBean) form;
if(empBean.getName().equals("")) {
errors.reject("name", "Name is required.");
}
if(empBean.getEmail().equals("")) {
errors.reject("email", "Email is required.");
}
}
}
index.jsp
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sform" %><h2>Employee page</h2>
<sform:form commandName="form">
<pre>
<sform:errors />
Name: <sform:input path="name" />
Email: <sform:input path="email" />
<input type="submit" value="Save" />
</pre>
</sform:form>
success.jsp
<h3>Success page.</h3>
- Right click on MVC-Controller5 -> Run As -> Run on Server
- Hit http://localhost:8080/MVC-Controller5/emp.code