spring mvc3中几个Handler Mapping的

15 篇文章 0 订阅
6 篇文章 0 订阅
在spring mvc3中,有几个处理handler mapping的bean,现在小结一下:

1)BeanNameUrlHandlerMapping。它是默认的bean name映射器了,将url映射到
特定的控制器中去,也支持正则表达式,比如:
<beans ...>

   <bean
     class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

   <bean name="/welcome.htm"
            class="com.mkyong.common.controller.WelcomeController" />

   <bean name="/streetName.htm"
            class="com.mkyong.common.controller.StreetNameController" />

   <bean name="/process*.htm"
            class="com.mkyong.common.controller.ProcessController" />

</beans>
上面的是一一映射对应的关系,比如/process***.htm的请求,也会被派发到
com.mkyong.common.controller.ProcessController中,支持通配符。


2)ControllerClassNameHandlerMapping
这个实际上是去掉控制器中的Controller后,将剩余的部分跟URL匹配,比如,如果不用这个MAPPING的话,要这样搞:
<beans ...>

  <bean name="/welcome.htm"
           class="com.mkyong.common.controller.WelcomeController" />

  <bean name="/helloGuest.htm"
           class="com.mkyong.common.controller.HelloGuestController" />

</beans>

用了这个mapping的话可以这样了:
<beans ...>

  <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />

  <bean class="com.mkyong.common.controller.WelcomeController" />

  <bean class="com.mkyong.common.controller.HelloGuestController" />

</beans>
上面的匹配对下面的例子适用,如:
/welcome.htm –> WelcomeController.
/welcomeHome.htm –> WelcomeController.
/helloguest.htm –> HelloGuestController.
/helloguest12345.htm –> HelloGuestController.

可以看到实际上是去掉Controller这个单词进行匹配,并把去掉后的剩余部分全部变成小写,
/helloGuest.htm,这个就不能匹配了,因为G是大写.

如果要加上<property name="caseSensitive" value="true" />
则可以不严格区分大小写了,比如:
<beans ...>

  <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
       <property name="caseSensitive" value="true" />
  </bean>

  <bean class="com.mkyong.common.controller.WelcomeController" />

  <bean class="com.mkyong.common.controller.HelloGuestController" />

</beans>
这个时候:
去掉Controller几个字母后,只不过把第一个字母改成小写就行了,则:
WelcomeController -> /welcome*
HelloGuestController -> /helloGuest*

helloguest.htm反而不匹配了,因为/helloguest.htm匹配helloGuestController.

还可以再指定层次目录,比如:
<beans ...>

  <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
<property name="caseSensitive" value="true" />
<property name="pathPrefix" value="/customer" />
  </bean>

  <bean class="com.mkyong.common.controller.WelcomeController" />

  <bean class="com.mkyong.common.controller.HelloGuestController" />

</beans>
则:
/customer/welcome.htm –> WelcomeController.
/customer/helloGuest.htm –> HelloGuestController.


3 SimpleUrlHandlerMapping
  这个是给程序员很大的发挥空间的了,
有两种方式指定:
1)prop key
  <beans ...>

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="mappings">
<props>
   <prop key="/welcome.htm">welcomeController</prop>
   <prop key="/*/welcome.htm">welcomeController</prop>
   <prop key="/helloGuest.htm">helloGuestController</prop>
</props>
   </property>
</bean>

<bean id="welcomeController"
class="com.mkyong.common.controller.WelcomeController" />

<bean id="helloGuestController"
class="com.mkyong.common.controller.HelloGuestController" />

</beans>
2)用值的方式指定:
  <beans ...>

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="mappings">
<value>
   /welcome.htm=welcomeController
   /*/welcome.htm=welcomeController
   /helloGuest.htm=helloGuestController
</value>
   </property>
</bean>

<bean id="welcomeController"
class="com.mkyong.common.controller.WelcomeController" />

<bean id="helloGuestController"
class="com.mkyong.common.controller.HelloGuestController" />

</beans>


4) 设置mapping的优先级
  <beans ...>

   <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <property name="mappings">
<value>
     /index.htm=welcomeController
  /welcome.htm=welcomeController
  /main.htm=welcomeController
  /home.htm=welcomeController
</value>
      </property>
      <property name="order" value="0" />
   </bean>

   <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
      <property name="caseSensitive" value="true" />
      <property name="order" value="1" />
   </bean>

   <bean id="welcomeController"
      class="com.mkyong.common.controller.WelcomeController" />

   <bean class="com.mkyong.common.controller.HelloGuestController" />

</beans>
这里,设置了优先级别,其中用order来设置,值小的优先匹配的哦。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值