从上图,可以看出HandlerMapping的职责是将Portlet Request 映射到正确的Handler上,但是他并不返回某个Handler,而是返回DispatcherPortlet一个HandlerExecutionChain。它由一个Handler加上一组HandlerInterceptor组成,这组拦截器在最终Handler的前后执行(注意,最终只可以映射到唯一的一个Handler上)

Spring  Portlet MVC 提供了3种HandlerMapping的默认实现,如下图:

 

比如说,PortletModeHandlerMapping 会根据portlet模式映射到相应的Controller类里面

 

  1. <beans ...> 
  2. <bean id="editModeController" class="chapter07.code. 
  3. ➥listing.controller.EditModeController"/> 
  4. <bean id="viewModeController" class="chapter07.code. 
  5. ➥listing.controller.ViewModeController"/> 
  6. <property name="bookService"> 
  7. <ref bean="bookService"/> 
  8. </property> 
  9. </bean> 
  10. <bean id="helpModeController" class="chapter07.code. 
  11. ➥listing.controller.HelpModeController"/> 
  12. <bean id="portletModeHandlerMapping" 
  13. class="org.springframework.web.portlet.handler. 
  14. ➥PortletModeHandlerMapping"> 
  15. <property name="portletModeMap"> 
  16. <map> 
  17. <entry key="view"> 
  18. <ref bean="viewModeController" /> 
  19. </entry> 
  20. <entry key="edit"> 
  21. <ref bean="editModeController" /> 
  22. </entry> 
  23. <entry key="help"> 
  24. <ref bean="helpModeController" /> 
  25. </entry> 
  26. </map> 
  27. </property> 
  28. </bean> 
  29. ... 
  30. </beans> 

这个例子中,view模式->ViewModeController ,edit模式->EditModeController,help模式->HelpModeController

 

也可以根据请求参数的值来映射到Controller,这时候就应该用ParameterHandlerMapping