Spring MVC增强型Controller-MultiActionContro

系统 1675 0
    如果为每个请求都设计一个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



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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论