springMVC的HandleMapping


http://blog.chinaunix.net/uid-20415521-id-1949916.html

SpingMVC中的HandlerMapping (2007-05-22 11:33) 

分類: Spring 

 

DispatcherServlet要將一個請求交給哪個特定的Controller,它需要咨詢一個Bean——這個Bean的名字為“HandlerMapping”。

HandlerMapping是把一個URL指定到一個Controller上,(就像應用系統的web.xml文件使用<servlet-mapping>將URL映射到servlet)。

Spring帶有三種HandlerMapping,(SpringMVC中的所有HandlerMapping都實現了接口org.springframework.web.servlet. HandlerMapping)。

1、BeanNameUrlHandlerMapping

這是Dispatcher Servlet的默認的HandlerMapping,所以在應用上下文配置文件中簡單地用“Url樣式”來定義一個控制器Bean的名字,就可以告訴Dispatcher Servlet什么樣式的請求應該由哪個控制器去處理,而不用顯式地定義一個HandlerMapping。(私下說一句,這樣做雖然簡單,但這樣用URL樣式定義出來的ControllerBean,其名字顯得古怪,因為這個名字同時也是Controller Bean的實例名)

例:若控制器ListCoursesController的URL樣式是“listCourses.go”,則

       <bean name="/listCourses.go" 

class="com.w3cs.vlar.ListCoursesController">

        <property name="couseService">

             <ref bean="courceService"/>

        </property>

    </bean>

當然,也可以在定義這個控制器Bean之前,顯式地聲明你所用的HandlerMapping,顯式定義如下:

<bean id="beanNameUrlMapping" 

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

 

2、SimpleUrlHandlerMapping

這種方式不同於BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping不需定義Controller Bean的名字,而是直接把URL映射到控制器。

由於SimpleUrlHandlerMapping不是Dispatcher Servlet默認的HandlerMapping,所以這個HandlerMapping必須得顯式定義。

下面定義了一個ID為“SimpleUrl”的HandlerMapping Bean:

<bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

<property name="mappings">

<props>

    <prop key="/listCourses.go">listCoursesController</prop>

    <prop key="/login.go">loginController</prop>

</props>

</property> 

</bean>

解釋:

1)、SimpleUrlHandlerMapping中,用<prop>裝配了一個名為mappings的java.util.Properties。

2)、<prop>元素的key屬性是URL樣式,而<prop>的值是處理這個URL的控制器Bean的名字。(而在BeanNameUrlMapping中的那個古怪的名字是控制器Bean的實例名)。

 

3、CommonsPathMapHandlerMapping 

這個處理器使用控制器代碼中的元數據將控制器映射到URL。但具體俺不會用。誰知道了可以告訴俺!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM