Earlier we have learnt about Spring MVC BeanNameUrlHandlerMapping and Spring MVC ControllerClassNameHandlerMapping Example . Now let’s look into SimpleUrlHandlerMapping, this type of HandlerMapping is the simplest of all handler mappings which allows you specify URL pattern and handler explicitly
There are two ways of defining SimpleUrlHandlerMapping, using <value> tag and <props> tag. SimpleUrlHandlerMapping has a property called mappings we will be passing the URL pattern to it.
Using <value> tag
Left Side of “=” is URL Pattern and right side is the id or name of the bean
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <value> /welcome.htm=welcomeController /welcome*=welcomeController /hell*=helloWorldController /helloWorld.htm=helloWorldController </value> </property> </bean>
Using <props> tag
The property key is the URL Pattern and property value is the id or name of the bean
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/welcome.htm">welcomeController</prop> <prop key="/welcome*">welcomeController</prop> <prop key="/helloworld">helloWorldController</prop> <prop key="/hello*">helloWorldController</prop> <prop key="/HELLOworld">helloWorldController</prop> </props> </property> </bean>
Folder Structure :
- Create a Dynamic Web Project “SpringMVCHandlerMappingTutorial” and create a package for our src files “com.javainterviewpoint“
- Place the Spring 3 jar files under WEB-INF/Lib
commons-logging-1.1.1.jar
log4j-1.2.16.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
spring-aspects-3.2.4.RELEASE.jar
spring-beans-3.2.4.RELEASE.jar
spring-context-3.2.4.RELEASE.jar
spring-core-3.2.4.RELEASE.jar
spring-expression-3.2.4.RELEASE.jar
spring-web-3.2.4.RELEASE.jar
spring-webmvc-3.2.4.RELEASE.jar - Create the Java classes HelloWorldController.java and WelcomeController.java under com.javainterviewpoint folder.
- Place the SpringConfig-servlet.xml and web.xml under the WEB-INF directory
- View files helloWorld.jsp and welcome.jsp are put under the sub directory under WEB-INF/Jsp
HelloWorldController.java
Our HelloWorldController class extends AbstractController class and overrides “handleRequestInternal()” method.
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class HelloWorldController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("Inside HelloWorldController"); ModelAndView model = new ModelAndView("helloWorld"); model.addObject("msg", "JavaInterviewPoint"); return model; } }
WelcomeController.java
WelcomeController is almost the same as HelloWorldController except the redirecting page and the String passed.
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class WelcomeController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("Inside WelcomeController"); ModelAndView model = new ModelAndView("welcome"); model.addObject("msg", "JavaInterviewPoint"); return model; } }
helloWorld.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h2>Hello World ${msg}</h2> </body> </html>
welcome.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h2> Welcome to ${msg}</h2> </body> </html>
web.xml
The web.xml has everything about the application that a server needs to know, which is placed under the WEB-INF directory. <servlet-name> contains the name of the SpringConfiguration, when the DispatcherServlet is initialized the framework will try to load a configuration file “[servlet-name]-servlet.xml” under the WEB-INF directory.
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>SpringMVCFormHandling</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>SpringConfig</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SpringConfig</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
SpringConfig-servlet.xml
- The SpringConfig-servlet.xml is also placed under the WEB-INF directory.
- Here we have configured SimpleUrlHandlerMapping as the HandlerMapping
- Each request is mapped to a Controller as well
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/Jsp/"/> <property name="suffix" value=".jsp"/> </bean> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/welcome.htm">welcomeController</prop> <prop key="/welcome*">welcomeController</prop> <prop key="/helloworld">helloWorldController</prop> <prop key="/hello*">helloWorldController</prop> <prop key="/HELLOworld">helloWorldController</prop> </props> </property> </bean> <bean id="helloWorldController" class="com.javainterviewpoint.HelloWorldController"></bean> <bean id="welcomeController" class="com.javainterviewpoint.WelcomeController"></bean> </beans>
In the above example where ever
- helloworld is requested, the DispatcherServlet redirects it to the HelloWorldController.
- hello123 is requested, the DispatcherServlet redirects it to the HelloWorldController.
- HELLOworld is requested, the DispatcherServlet redirects it to the HelloWorldController.
- welcome.htm is requested, the DispatcherServlet redirects it to the WelcomeController.
- welcome123 is requested, the DispatcherServlet redirects it to the WelcomeController.
- hELLOWorld is requested, you will get 404 error as we have add mapping for it.
Output
when HelloWorldController called
Hello World JavaInterviewPoint
when WelcomeController called
Welcome to JavaInterviewPoint
Leave a Reply