當客戶的請求來到時,DispatcherServlet根據一個Handler mapping的實例了解到,如何將請求轉發至對應的Controller,對於Web應用程式來說,通常就是以URL路徑對應至Controller。
DispatcherServlet預設的Handler mapping是 org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,所以即使您在 Bean定義檔中沒有明確的宣告BeanNameUrlHandlerMapping,也會使用BeanNameUrlHandlerMapping依每 個Bean定義的 "name"屬性上之URL來決定該使用哪一個Controller,例如:
...
<bean id="viewResolver"
class="org.springframework.web.servlet.
→ view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean name="/hello.do"
class="onlyfun.caterpillar.HelloController">
<property name="viewPage">
<value>hello</value>
</property>
</bean>
...
<bean id="viewResolver"
class="org.springframework.web.servlet.
→ view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean name="/hello.do"
class="onlyfun.caterpillar.HelloController">
<property name="viewPage">
<value>hello</value>
</property>
</bean>
...
在上面的設定中,使用者對/hello.do路徑的請求,DispatchServlet都會交由HelloController的實例來處理。
BeanNameUrlHandlerMapping是個簡單的Handler mapping,方便但僅適用於小型的應用程式,因為這讓您的URL與Controller的類別名稱直接建立關係,在Spring的Handler mapping中最常使用的是 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping,一個使用的例子如 下所示:
...
<bean id="urlHandlerMapping"
class="org.springframework.web.servlet.
→ handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.do">
helloController
</prop>
<prop key="/welcome.do">
welcomeController
</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.
→ view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="helloController"
class="onlyfun.caterpillar.HelloController">
<property name="viewPage">
<value>hello</value>
</property>
</bean>
<bean id="welcomeController"
class="onlyfun.caterpillar.WelcomeController">
...
</bean>
...
<bean id="urlHandlerMapping"
class="org.springframework.web.servlet.
→ handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello.do">
helloController
</prop>
<prop key="/welcome.do">
welcomeController
</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.
→ view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<bean id="helloController"
class="onlyfun.caterpillar.HelloController">
<property name="viewPage">
<value>hello</value>
</property>
</bean>
<bean id="welcomeController"
class="onlyfun.caterpillar.WelcomeController">
...
</bean>
...
在"mappings"屬性的設置中,<prop>的"key"設置的是請求的URL,而<prop>與< /prop>間設定的值是實際上要處理請求的Controller之Bean名稱,<prop>的"key"設置還可以使用 Wildcard,例如:
...
<bean id="urlHandlerMapping"
class="org.springframework.web.servlet.
→ handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello*.do">
helloController
</prop>
<prop key="/welcome.do">
welcomeController
</prop>
</props>
</property>
</bean>
....
<bean id="urlHandlerMapping"
class="org.springframework.web.servlet.
→ handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/hello*.do">
helloController
</prop>
<prop key="/welcome.do">
welcomeController
</prop>
</props>
</property>
</bean>
....
在上面的設置中,以hello開頭及.do結尾的URL請求,都會交給Bean定義檔中的helloController來處理。