当客户端发出Request的时候DispatcherServlet会将Request提交给HandlerMapping, 然后HanlerMapping根据Web Application Context的配置来回传给DispatcherServlet相应的Controller.
HandlerMapping
1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
默认的HanlerMapping 会根据Controller的Bean Name来进行匹配 例如:
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name="/welcome.html" class="me.iace.spring.controller.WelcomeController"/>
当客户端发出http://xxxx/ctx/welcome.html的时候 BeanNameUrlHandlerMapping指向该Controller回传给DispatcherServlet
2. org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
ControllerClassNameHandlerMapping会根据Controller Bean的Class Name来做匹配 例如:
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean name="/hello" class="me.iace.spring.controller.WelcomeController"/>
例如WelcomeController 会去掉后面的Controller 客户端发出 /welcome的request
会匹配到该Controller, 需要注意的是 如果welcome的第一个字母'w'为大写的话是错误的,
而且后welcome后面不管有什么都会匹配该WelcomeController 例如 ‘/welcome224sscc’也是可以匹配到该Controller的。
ControllerClassNameHandlerMapping的相关属性 如下
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="caseSensitive" value="true" />
<property name="pathPrefix" value="/haha" />
<property name="basePackage" value="me.iace.spring.controller" />
</bean>
caseSensitive: 是否识别大小写
pathPrefix: url的前缀,在这里的前缀是 '/haha'
basePackage: 指定匹配哪个package的Controller
再就是可以同时使用 BeanNameUrlHandlerMapping 和 ControllerClassNameHandlerMapping 例如
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean name="/hello" class="me.iace.spring.controller.WelcomeController"/>
当客户端发出 '/hello' 和 '/welcome'的时候都会匹配到该WelcomeController
3. org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
SimpleUrlHandlerMapping会将在自身Properies里设置的Url映射到相关的Controller, 如下:
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/welcome">welcomeController</prop>
<prop key="/hello">helloController</prop>
</props>
</property>
</bean>
<bean id="welcomeController" class="me.iace.spring.controller.WelcomeController" />
<bean id="helloController" class="me.iace.spring.controller.WelcomeController" />