Spring Portlet MVC開發入門示例
本文通過一個簡單實例介紹一下Spring 的Portlet MVC框架.
Spring Portlet MVC和其Web MVC可以說是如出一轍,只是在Web MVC中處于核心的DispatcherServlet在Portlet MVC中換成了DispatcherPortlet,如下圖描述了Portlet request是如何被處理的.關于Spring 的Web MVC,請參照 http://blog.csdn.net/kkdelta/article/details/7274708
圖片來源于Portlets inAction.
DispatcherPortlet配置在portlet.xml文件中,它繼承了Portlet標準中的GenericPortlet,所以它本 質上是一個能夠將Portlet Request dispatch到Spring框架中其它MVC組件的一個Portlet.配置如下:
<portlet> <portlet-name>helloWorld</portlet-name> <portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <resource-bundle>content.Language-ext</resource-bundle> <portlet-info> <title>Hello World</title> </portlet-info> </portlet>
這 里以Render Request處理為例,當DispatcherPortlet接收到Request的時候,它會根據handermapping的配置找到相應的 Controler來處理請求.Controler處理完后返回一個ModelAndView,對于View的處理則和Web MVC類似了,這里不再做介紹.
xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
xmlns:xsi="
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
;
<bean id="helloWorldController"
class="chapter07.code.listing.HelloWorldController"/>
<bean id="portletModeHandlerMapping"
class="org.springframework.web.portlet.handler.PortletModeHandlerMapping">
<property name="portletModeMap">
<map>
<entry key="view">
<ref bean="helloWorldController" />
entry>
map>
property>
bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
bean>
beans>
public class HelloWorldController implements Controller {
public void handleActionRequest(ActionRequest request,
ActionResponse response) throws Exception {
//-- do nothing the Hello World portlet doesn't receive
//-- action requests.
}
public ModelAndView handleRenderRequest(RenderRequest request,
RenderResponse response) throws Exception {
Map<String, Object> model = new HashMap<String, Object>();
model.put("helloWorldMessage", "Hello World");
return new ModelAndView("helloWorld", model);
}
} </pre>
</div>
本文的例子參照了Portlets in Action,完整代碼可以從http://download.csdn.net/detail/kkdelta/4125924下載.
這個例子可以運行在Liferay的Portal server上,關于Portlet和LifeRay的介紹可以參考 http://blog.csdn.net/kkdelta/article/category/1082877
Spring的Controller提供了處理Render request和Action request的方法,對于處理Event和resource類型的request可以分別實現EventAwareController和 ??ResourceAwareController.
同時通過注解的方式也可以mapping響應的request到具體的方法進行處理.Spring提供了@Controller,@RenderMapping和@ActionMapping等等.