Spring MVC SimpleUrlHandlerMapping Example

Earlier  we have learnt about Spring MVC BeanNameUrlHandlerMapping and Spring MVC ControllerClassNameHandlerMapping Example . Now lets look into SimpleUrlHandlerMapping, this type of HandlerMapping is the simplest of all handler mappings which allows you specify URL pattern and handler explicity
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 :

  1. Create a Dynamic Web Project “SpringMVCHandlerMappingTutorial” and create a package for our src files com.javainterviewpoint
  2. 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

  3. Create the Java classes HelloWorldController.java and WelcomeController.java under  com.javainterviewpoint folder.
  4. Place the SpringConfig-servlet.xml and web.xml  under the WEB-INF directory
  5. 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

Your email address will not be published. Required fields are marked *