Spring mvc: step by step 4-MultiActionController

在实际开发中,我们希望一个controller能够处理多个请求,比如:我们常常把一个用户的增加,删除,修改放在一个controller中。在Spring MVC中,我们就会用到MultiActionController。如何让controller知道一个request url想访问哪个方法呢?在Spring MVC中,提供了三种机制可以直接使用。

      a. ParameterMethodNameResolver:通过参数定义方法名称

      b. InternalPathMethodNameResolver:Request url定义方法名称

      c. PropertiesMethodNameResolver: 通过url和方法映射

 

1. 参数定义方法(ParameterMethodNameResolver)

 

<bean id="paraResolver " class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
        <property name="paramName">
            <value>method </value>
        </property>
        <property name="defaultMethodName">
            <value>getDefaultView</value>
        </property>
    </bean>
    <bean id="helloParaController " class="multimvc.HelloParaMutiController"  >
        <property name="methodNameResolver" ref="paraResolver " />
   </bean>

 

<bean id="myHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="helloPara.form ">helloParaController </prop>                        
            </props>
        </property>
</bean>

 

myHandlerMapping定了url: helloPara.form的请求会发给helloParaController来处理。

在helloParaController中定义个了一个paraResolver, paraResolver解析传进来的请求并找到参数method,method的值即是该请求要调用的方法。例如:

<form name="hello"  id="hello" action="helloPara.form?method=goFirst" method="post">

则HelloParaMutiController.goFirst方法会被调用。

 

2.Request url定义方法名(InternalPathMethodNameResolver):

 

<bean id="pathResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver">
 </bean>

<bean id="helloMethodController" class="multimvc.MyMethodMutiController"  >
        <property name="methodNameResolver" ref="pathResolver" />
</bean>

<bean id="myHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/*.xform">helloMethodController</prop>
            </props>
        </property>
</bean>

 

myHandlerMapping定义了符合url pattern: /*.xform的请求会发给helloMethodController来处理。pathResolver会分析请求的url,url中最后一个/的字符串被视为这次请求需要调用的方法。如:

<form name="hello"  id="hello" action="/ServletTest/goFirst.xform" method="post">

 

MyMethodMutiController.goFirst方法会被调用

 

3. url和方法映射(PropertiesMethodNameResolver)

 

<bean id="propsResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
        <property name="mappings">
            <!--<props>  
               <prop key="/helloFirst.xxform">goFirst</prop>  
                <prop key="/helloSecond.xxform">goSecond</prop>                          
            </props>-->
            <value>
                /helloFirst.xxform=goFirst
                /helloSecond.xxform=goSecond
        </value>
        </property>
    </bean>

    <bean id="helloPropsController" class="multimvc.MyPropsMutiController"  >
        <property name="methodNameResolver" ref="propsResolver" />
     </bean>

    <bean id="myHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/*.xxform">helloPropsController</prop>               
            </props>
        </property>
    </bean>

myHandlerMapping定了url: helloPara.xxform的请求会发给helloPropsController来处理。propsResolver会分析请求的url,然后通过映射表找到这次请求调用的方法。如:

  <form name="hello"  id="hello" action="/ServletTest/helloFirst.xxform" method="post">
MyPropsMutiController.goFirst方法被调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值