您的位置:首页 > 编程语言 > Java开发

Spring MVC增强型Controller-MultiActionController 使用方法

2014-08-20 13:16 507 查看
如果为每个请求都设计一个controller的话,随着开发的进行,工程也一定会日渐庞大。当然,Spring框架提供了避免这种情况出现的方法,那就是使你的controller继承自org.springframework.web.servlet.mvc.multiaction.MultiActionController。就像Struts里的DispatchAction一样,MultiActionController可以处理多个类似的请求。
在Struts里,要使用DispatchAction只需要在其action的定义中加入parameter="method"即可。在Spring中,MultiActionController要配合一个org.springframework.web.servlet.mvc.multiaction.MethodNameResolver的实例使用(MethodNameResolver也是一个接口),但我个人认为这并不说明Spring比struts繁琐,在使用中自会体会到它的好处。
MultiActionController的默认MethodNameResolver是org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver。这个实现类是依据请求的路径来决定执行MultiActionController的那个方法的。例如路径为:getlist.htm,则执行相应controller的getlist方法。在实际开发中,不提倡使用这个MethodNameResolver。
一般情况下,MultiActionController搭配的MethodNameResolver是ParameterMethodNameResolver或PropertiesMethodNameResolver,它们都是根据请求的参数来决定使用那个方法。例如,如果定义这个请求参数为method,则路径为xxx.htm?method=getlist时,就会执行指定controller的getlist方法。

首先定义我们的Controller
其中有两个不同的业务方法courseSortByList和courseSortByName


package Action;




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 DispathActionController extends MultiActionController {


private String listView;


private String nameView;


public String getListView() {


return listView;


}


public void setListView(String listView) {


this.listView = listView;


}


public String getNameView() {


return nameView;


}


public void setNameView(String nameView) {


this.nameView = nameView;


}


public DispathActionController(){




}


public ModelAndView courseSortByList(HttpServletRequest request,HttpServletResponse response){




return new ModelAndView(this.getListView());


}


public ModelAndView courseSortByName(HttpServletRequest request,HttpServletResponse response){


return new ModelAndView(this.getNameView());


}


}



同时建立sortByList和sortByName两个jsp文件

我们有三种使用方式
(1)使用URL
配置文件如下:


<bean id="simpleUrlMapping"




class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">


<property name="mappings">


<props>


<prop key="/home.mvc">HomeController</prop>


<prop key="/register.mvc">RegisterStudentController</prop>


<prop key="/feedback.mvc">FeedbackController</prop>


<prop key="/course*.mvc">multiactionController</prop> <!---用*代表所有course开头的url path->


</props>


</property>


</bean>






<bean id="viewResolver"




class="org.springframework.web.servlet.view.InternalResourceViewResolver">


<property name="prefix">


<value>/</value>


</property>


<property name="suffix">


<value>.jsp</value>


</property>


</bean>




<!-- 使用MuitlActionController控制器及URL方式访问-->


<bean id="multiactionController" class="Action.DispathActionController">


<property name="listView"><value>dispatch/sortByList</value></property>


<property name="nameView"><value>dispatch/sortByName</value></property>


</bean>

使用这种方式,我们访问两个方法的url分别为 方法名.mvc

http://localhost:81/SpringMVCStudy/courseSortByList.mvc

http://localhost:81/SpringMVCStudy/courseSortByName.mvc

(2)解析方法名的方式

有两种细分,第一是用一个参数(类似struts的dispathAction),第二种是直接配置url mapping

第一种方式配置文件


<bean id="simpleUrlMapping"




class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">


<property name="mappings">


<props>


<prop key="/home.mvc">HomeController</prop>


<prop key="/register.mvc">RegisterStudentController</prop>


<prop key="/feedback.mvc">FeedbackController</prop>


<prop key="/course.mvc">multiactionController</prop>


</props>


</property>


</bean>




<bean id="viewResolver"




class="org.springframework.web.servlet.view.InternalResourceViewResolver">


<property name="prefix">


<value>/</value>


</property>


<property name="suffix">


<value>.jsp</value>


</property>


</bean>




<bean id="multiactionController" class="Action.DispathActionController">


<property name="listView"><value>dispatch/sortByList</value></property>


<property name="nameView"><value>dispatch/sortByName</value></property>


<property name="methodNameResolver">


<ref bean="methodNameResolver"/>


</property>


</bean>




<bean id="methodNameResolver"




class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">


<property name="paramName">


<value>action</value>


</property>


</bean>



使用这种方式,我们访问两个方法的url分别为 action=方法
http://localhost:81/SpringMVCStudy/course.mvc?action=courseSortByList

http://localhost:81/SpringMVCStudy/course.mvc?action=courseSortByName

第二种方式配置文件


<bean id="simpleUrlMapping"




class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">


<property name="mappings">


<props>


<prop key="/home.mvc">HomeController</prop>


<prop key="/register.mvc">RegisterStudentController</prop>


<prop key="/feedback.mvc">FeedbackController</prop>


<prop key="/course.mvc">multiactionController</prop>


</props>


</property>


<property name="defaultHandler" ref="multiactionController"/> <!---这个很重要,把multiactionController配置到


SimpleUrlHandlerMapping-,否则无法识别mapping>


</bean>




<bean id="viewResolver"




class="org.springframework.web.servlet.view.InternalResourceViewResolver">


<property name="prefix">


<value>/</value>


</property>


<property name="suffix">


<value>.jsp</value>


</property>


</bean>




<!-- 使用MuitlActionController控制器及mapping参数方式访问-->






<bean id="multiactionController" class="Action.DispathActionController">


<property name="listView"><value>dispatch/sortByList</value></property>


<property name="nameView"><value>dispatch/sortByName</value></property>


<property name="methodNameResolver">


<ref bean="methodNameResolver"/>


</property>


</bean>




<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">


<property name="mappings">


<props>


<prop key="/courseList.mvc">courseSortByList</prop>


<prop key="/courseName.mvc">courseSortByName</prop>


</props>


</property>


</bean>

使用这种方式,我们访问两个方法的url分别为 自定义的url mapp
http://localhost:81/SpringMVCStudy/courseList.mvc

http://localhost:81/SpringMVCStudy/courseName.mvc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: