从上图,可以看出HandlerMapping的职责是将Portlet Request 映射到正确的Handler上,但是他并不返回某个Handler,而是返回DispatcherPortlet一个HandlerExecutionChain。它由一个Handler加上一组HandlerInterceptor组成,这组拦截器在最终Handler的前后执行(注意,最终只可以映射到唯一的一个Handler上)
Spring Portlet MVC 提供了3种HandlerMapping的默认实现,如下图:
比如说,PortletModeHandlerMapping 会根据portlet模式映射到相应的Controller类里面
- <beans ...>
- <bean id="editModeController" class="chapter07.code.
- listing.controller.EditModeController"/>
- <bean id="viewModeController" class="chapter07.code.
- listing.controller.ViewModeController"/>
- <property name="bookService">
- <ref bean="bookService"/>
- </property>
- </bean>
- <bean id="helpModeController" class="chapter07.code.
- listing.controller.HelpModeController"/>
- <bean id="portletModeHandlerMapping"
- class="org.springframework.web.portlet.handler.
- PortletModeHandlerMapping">
- <property name="portletModeMap">
- <map>
- <entry key="view">
- <ref bean="viewModeController" />
- </entry>
- <entry key="edit">
- <ref bean="editModeController" />
- </entry>
- <entry key="help">
- <ref bean="helpModeController" />
- </entry>
- </map>
- </property>
- </bean>
- ...
- </beans>
这个例子中,view模式->ViewModeController ,edit模式->EditModeController,help模式->HelpModeController
也可以根据请求参数的值来映射到Controller,这时候就应该用ParameterHandlerMapping
本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/845143,如需转载请自行联系原作者