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

Spring Portlet MVC开发入门示例_第1张图片

图片来源于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="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	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
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<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);
    }
}
本文的例子参照了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等等.

你可能感兴趣的:(spring,exception,mvc,object,action,portlet)