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

About the Author

author image
mkyong
Founder of Mkyong.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

Leave a Reply

avatar
newest oldest most voted
trackback
Spring MVC Tutorial

[…] MultiActionController example Group related actions into a single controller class. […]

Kunal Rana
Guest
Kunal Rana

awesome man…

durai
Guest
durai

hello mkyong, please update your spring tutorial with latest jars

alain
Guest
alain

hello, thanks for the tutorial but i also get 404 error, which url should i use ? thanks

Vivek Bharadwaj
Guest
Vivek Bharadwaj
Hi Mr Yong, First I would like to appreciate your work which you are doing, It’s really very helpful for those whoever eager to learn desired technologies but they do not have a idea.almost topics are covered here with very clean practical examples and also you tried out to focus that when to use and where to use and when not, what are the pros and cons etc. I am following your tutorial to learn Spring MVC, it’s great and enjoying learning.. during going through with MultiActionController Example i encountered one question in my mind and i was tried and… Read more »
dd
Guest
dd

where is the prefix customer defined

ANANAD
Guest
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
Guest
AJ

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

AJ
Guest
AJ

MKYONG please help….

Atif Mehar
Guest
Atif Mehar

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

javax.servlet
servlet-api
2.5

NitinB
Guest
NitinB

Change your server port then try to run again..

java training in chennai
Guest
java training in chennai

Very good example.

kalyan
Guest
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
Guest
ivoHaSp

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

	  <dependency>
		  <groupId>commons-logging</groupId>
  		<artifactId>commons-logging</artifactId>
		  <version>1.1.1</version>
	  </dependency>
 
  	<dependency>
  		<groupId>com.lowagie</groupId>
  		<artifactId>itext</artifactId>
  		<version>1.4.8</version>
  	</dependency>
   
  	<dependency>
  		<groupId>net.sourceforge.jexcelapi</groupId>
  		<artifactId>jxl</artifactId>
  		<version>2.6.3</version>
  	</dependency> 
  
  	<dependency>
  		<groupId>org.apache.poi</groupId>
  		<artifactId>poi</artifactId>
  		<version>3.6</version>
  	</dependency>

   <dependency>
		  <groupId>org.apache.tomcat</groupId>
		  <artifactId>servlet-api</artifactId>
		  <version>6.0.35</version>
		  <scope>provided</scope>
  	</dependency>
amila
Guest
amila

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

dinesh
Guest
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
Guest
Anand

How to fetch the form data in this example

Nguyen Manh Thang
Guest
Nguyen Manh Thang

To fetch data in this example you configure blow:

Nguyen Manh Thang
Guest
Nguyen Manh Thang

To fetch data in this example you configure blow:

trackback
Spring MVC MultiActionController annotation example

[…] application. Note This annotation-based example is converted from the last Spring MVC MultiActionController XML-based example. So, please compare and spots the […]

trackback
Spring MVC ParameterMethodNameResolver example

[…] the “*” means any text. Note By default, MultiActionController is used the InternalPathMethodNameResolver to map URL to the corresponds method […]

trackback
Spring MVC PropertiesMethodNameResolver example

[…] –> add() method Note By default, MultiActionController is used the InternalPathMethodNameResolver to map URL to the corresponds method […]