作者在 2007-12-25 14:16:21 发布以下内容
Spring的映射方式有三种,分别是BeanNameUrlHandlerMapping, SimpleUrlHandlerMapping和CommonsPathMapHandlerMapping。
第一种BeanNameUrlHandlerMapping,就是我在上一个例子中用到的。它是Spring默认的映射方式。通过一个具体的url将控制器联系在一起。简单的应用推荐使用这种映射方式。不过一般都不用它,因为如果要映射的请求很多,这样就不太方便了。
第二种SimpleUrlHandlerMapping,这个应该说是Spring中最常用的映射方式了。看下面的一个例子:
<bean id="simpleUrlMapping" class= "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/listCourses.htm">listCoursesController</prop> <prop key="/register.htm">registerStudentController</prop> <prop key="/displayCourse.htm">displayCourseController</prop> <prop key="/login.htm">loginController</prop> <prop key="/enroll.htm">enrollController</prop> </props> </property> </bean>这个映射方式将需要处理的url列出来了。例如,如果url是listCourses.htm,那么listCoursesController控制器就会来处理这个请求。依此类推。
至于第三种映射方式CommonsPathMapHandlerMapping,书上介绍说是在控制器里面编写对应的url,这种映射方式暂时没有用到过,就不多说了。
如果想同时使用一种以上的映射方式该怎么办?Spring的所有映射类都继承了Order接口。我们可以通过设置<property name="order"><value>来控制映射方式的优先权。例如:
<bean id="beanNameUrlMapping" class="org.springframework.web. servlet.handler.BeanNameUrlHandlerMapping"> <property name="order"><value>1</value></property> </bean> <bean id="simpleUrlMapping" class="org.springframework.web. servlet.handler.SimpleUrlHandlerMapping"> <property name="order"><value>0</value></property> <property name="mappings"> … </property> </bean> 注意,order的值越低,优先权越高。因此,在这里SimpleUrlHandlerMapping的优先权要高于BeanNameUrlHandlerMapping的优先权,所以,先会在SimpleUrlHandlerMapping中寻找控制器,如果没有合适的结果再在BeanNameUrlHandlerMapping中寻找。