Spring MVC MultiActionController example

In Spring MVC application, MultiActionController is used to group related actions into a single controller, the method handler have to follow below signature :

	public (ModelAndView | Map | String | void) actionName(
		HttpServletRequest, HttpServletResponse [,HttpSession] [,CommandObject]);

1. MultiActionController

See a MultiActionController example.

package com.mkyong.common.controller;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
 
public class CustomerController extends MultiActionController{
 
	public ModelAndView add(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
 
		return new ModelAndView("CustomerPage", "msg","add() method");
 
	}
 
	public ModelAndView delete(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
 
		return new ModelAndView("CustomerPage", "msg","delete() method");
 
	}
 
	public ModelAndView update(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
 
		return new ModelAndView("CustomerPage", "msg","update() method");
 
	}
 
	public ModelAndView list(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
 
		return new ModelAndView("CustomerPage", "msg","list() method");
 
	}
 
}

With ControllerClassNameHandlerMapping configured.

<beans ...>
 
 <bean 
  class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
 
  <bean class="com.mkyong.common.controller.CustomerController" />
 
</beans>

2. Mapping Examples

Now, the reuqested URL will map to the method name in the following patterns :

  1. CustomerController –> /customer/*
  2. /customer/add.htm –> add()
  3. /customer/delete.htm –> delete()
  4. /customer/update.htm –> update()
  5. /customer/list.htm –> list()

3. InternalPathMethodNameResolver

The InternalPathMethodNameResolver is the default MultiActionController implementation to map URL to method name. But, you are still allow to add prefix or suffix to the method name :

<beans ...>
 <bean 
  class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
 
  <bean class="com.mkyong.common.controller.CustomerController">
     <property name="methodNameResolver">
	<bean class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver">
	   <property name="prefix" value="test" />
	   <property name="suffix" value="Customer" />
	</bean>
     </property>
   </bean>
</beans>

Now, the URL will map to the method name in the following pattern :

  1. CustomerController –> /customer/*
  2. /customer/add.htm –> testaddCustomer()
  3. /customer/delete.htm –> testdeleteCustomer()
  4. /customer/update.htm –> testupdateCustomer()
  5. /customer/list.htm –> testlistCustomer()
Note
With annotation, the MultiActionController is more easy to configure, visit this MultiActionController annotation example for detail.

Download Source Code

References

  1. MultiActionController Javadoc
  2. InternalPathMethodNameResolver Javadoc
Tags :

About the Author

mkyong
Founder of Mkyong.com and HostingCompass.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

  • Pingback: water ionizer pay plan loans()

  • Pingback: paypal loans()

  • Pingback: car parking()

  • Pingback: laan penge billigt()

  • Pingback: hurtigt laan penge nu()

  • Pingback: fue.mobi()

  • Pingback: lan penge nu uden sikkerhed()

  • Pingback: stop parking()

  • Pingback: stream movies()

  • Pingback: weight loss()

  • Pingback: Blue Coaster33()

  • http://dd dd

    where is the prefix customer defined

  • ANANAD

    I downloaded this code and while setting up this code in STS, I got these errors in my class,

    Multiple markers at this line
    – The type javax.servlet.http.HttpServletResponse cannot be resolved. It is indirectly
    referenced from required .class files
    – The type javax.servlet.http.HttpServletRequest cannot be resolved. It is indirectly
    referenced from required .class files
    – The type javax.servlet.ServletContext cannot be resolved. It is indirectly referenced
    from required .class files
    – The declared package “com.mkyong.common.controller” does not match the
    expected package “src.main.java.com.mkyong.common.controller”

    I was able to run the other projects but not sure what is the problem,

    Any inputs?

  • AJ

    Running this program gives a 404 requested resource not available error……….
    Can Anyone please help……….

    • AJ

      MKYONG please help….

    • Atif Mehar

      Please add the following dependency in pom.xml file. Error should be fixed.

      javax.servlet
      servlet-api
      2.5

  • http://www.maasmind.com/java-training.htm java training in chennai

    Very good example.

  • kalyan

    Hi Mkyong,
    First Thanks to u.This site is very useful for me,i had one query
    can u please share the how to upload the video file in spring,can u please give me one example on that one.i really need that one.

    Thanks,

  • ivoHaSp

    Hi, maybe this will be helpful for somebody who will need dependencies in pom.xml:
    Ivo.

    	  &lt;dependency&gt;
    		  &lt;groupId&gt;commons-logging&lt;/groupId&gt;
      		&lt;artifactId&gt;commons-logging&lt;/artifactId&gt;
    		  &lt;version&gt;1.1.1&lt;/version&gt;
    	  &lt;/dependency&gt;
     
      	&lt;dependency&gt;
      		&lt;groupId&gt;com.lowagie&lt;/groupId&gt;
      		&lt;artifactId&gt;itext&lt;/artifactId&gt;
      		&lt;version&gt;1.4.8&lt;/version&gt;
      	&lt;/dependency&gt;
     
      	&lt;dependency&gt;
      		&lt;groupId&gt;net.sourceforge.jexcelapi&lt;/groupId&gt;
      		&lt;artifactId&gt;jxl&lt;/artifactId&gt;
      		&lt;version&gt;2.6.3&lt;/version&gt;
      	&lt;/dependency&gt; 
     
      	&lt;dependency&gt;
      		&lt;groupId&gt;org.apache.poi&lt;/groupId&gt;
      		&lt;artifactId&gt;poi&lt;/artifactId&gt;
      		&lt;version&gt;3.6&lt;/version&gt;
      	&lt;/dependency&gt;
     
       &lt;dependency&gt;
    		  &lt;groupId&gt;org.apache.tomcat&lt;/groupId&gt;
    		  &lt;artifactId&gt;servlet-api&lt;/artifactId&gt;
    		  &lt;version&gt;6.0.35&lt;/version&gt;
    		  &lt;scope&gt;provided&lt;/scope&gt;
      	&lt;/dependency&gt;
  • amila

    thakzzzzz You very much, this was very useful to me …… thank u agein

  • dinesh

    I am getting 404 page not found error when trying to use the following URL,

    http://localhost:8080/SpringMultiActionEx/customer/add.htm

    Please advise.

  • Anand

    How to fetch the form data in this example

    • Nguyen Manh Thang

      To fetch data in this example you configure blow:

      • Nguyen Manh Thang

        To fetch data in this example you configure blow:

  • Pingback: Spring MVC MultiActionController annotation example()

  • Pingback: Spring MVC ParameterMethodNameResolver example()

  • Pingback: Spring MVC PropertiesMethodNameResolver example()