Spring2的PortletMVC框架构建Portlet应用(二)

Spring2的PortletMVC框架构建Portlet应用(二)

Spring 2.x 新增了以下针对于 Web Bean 的作用域
1、Request 作用域
注意以下 bean 定义:
<bean id="loginAction" class="test.LoginAction" scope="request"/>
针对每次 HTTP 请求,Spring 容器都会创建一个全新的 loginAction 实例,且该实例仅在当前 HTTP 请求内有效,因此可以根据需要放心的更改所建实例的内部状态,而其他请求中创建的实例,将不会看到这些特定于某个请求的状态变化。当处理请求结束,request 作用域的 bean 实例将被销毁。
2、Session作用域
注意以下 bean 定义:
<bean id="userPreferences" class="test.UserPreferences" scope="session"/>
针对某个 HTTP Session,Spring 容器会创建一个全新的 userPreferences 实例,且仅在当前 HTTP Session 内有效。与 request 作用域一样,您可以根据需要放心的更改所创建实例的内部状态,而别的 HTTP Session 中创建的实例,将不会看到这些特定于某个 HTTP Session 的状态变化。当 HTTP Session 结束后,在该 HTTP Session 作用域内的 bean 将被销毁。

在 Portlet 中,这类 Bean 的作用域是单个 portlet 的 session。

3、global session 作用域
注意以下 bean 定义:
<bean id="userPreferences" class="test.UserPreferences" scope="globalSession"/>
global session 作用域类似于标准的 HTTP Session 作用域,不过它仅仅在基于 portlet 的 Web 应用中才有意义。Portlet 规范定义了全局 Session 的概念,它被所有构成某个 portlet web 应用的所有 portlet 所共享。在 global session 作用域中定义的 bean 被限定于全局 Portlet Session 的生命周期范围内

1、新建maven2管理的WEB工程
寻找
jstl.jar
standard.jar
spring.jar
spring-webmvc.jar
spring-webmvc-portlet.jar
pom.xml文件如下:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>2.5.5</version>
</dependency>

2、在 META-INF 下新建 context.xml 文件,内容如下:

<Context path="easylight" docBase="E:\work\easylight\WebRoot" crossContext="true" />

该文件为 Tomcat的 特有配置文件,根据 Pluto 的要求,该 Web 工程的上下文应该可以被其它 JavaEE 程序访问,所以 crossContext 参数设置为 true

3、配置web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>easylight</display-name>
<!-- 设定Spring的根上下文 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:/applicationContext*.xml
classpath:/core/applicationContext*.xml /WEB-INF/spring*.xml
</param-value>
</context-param>

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<!-- 设定ViewRendererServlet -->
<servlet>
<servlet-name>ViewRendererServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.ViewRendererServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>ViewRendererServlet</servlet-name>
<url-pattern>/WEB-INF/servlet/view</url-pattern>
</servlet-mapping>

<!-- 设定加载一个Portlet的Servlet, 该配置为Pluto所需-->
<servlet>
<servlet-name>easylightA</servlet-name>
<servlet-class>
org.apache.pluto.core.PortletServlet
</servlet-class>
<init-param>
<param-name>portlet-name</param-name>
<param-value>easylightA</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>easylightA</servlet-name>
<url-pattern>/PlutoInvoker/easylightA</url-pattern>
</servlet-mapping>
</web-app>


4、编辑 portlet.xml 文件
在 WEB-INF 目录下新建 portlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<portlet-app
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet>
<portlet-name>easylightA</portlet-name>
<display-name>easylightA</display-name>
<portlet-class>
org.springframework.web.portlet.DispatcherPortlet
</portlet-class>
<init-param>
<name>contextConfigLocation</name>
<value>classpath:/portals/applicationContext-easylight-a.xml</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>edit</portlet-mode>
<portlet-mode>help</portlet-mode>
</supports>
<portlet-info>
<title>easylightA</title>
</portlet-info>
</portlet>
</portlet-app>

该配置文件定义了一个名为 easylightA 的 portlet,支持 view、edit、help 三种模式,并且 Spring 的上下文配置文件为 classpath下的 applicationContext-easylight-a.xml 文件,该文件中配置的 bean 只对这个 portlet 可见。


5、生成 Java 类、JSP 文件以及相关 Spring 配置文件
新增了存放信息的JAVA类AddressBook.java:
package com.sillycat.core.model;

import com.sillycat.plugins.base.BaseDO;

public class AddressBook extends BaseDO {
private String name;
private String address;
private String telphone;
private String mobile;
private String email;
}

使用的BaseDO.java只有一个属性:
public class BaseDO {
protected String id;
}

在WebRoot下面新增template/jsp目录
addressInput.jsp文件:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<portlet:actionURL var="actionURL" />
<form:form commandName="addressBook" action="${actionURL}">
<table>
<tr>
<td>
Name:
<c:out value="${addressBook.name}" />
</td>
<td>
<form:input path="name" />
</td>
</tr>
<tr>
<td>
Address:
</td>
<td>
<form:input path="address" />
</td>
</tr>
<tr>
<td>
Telphone:
</td>
<td>
<form:input path="telphone" />
</td>
</tr>
<tr>
<td>
Mobile:
</td>
<td>
<form:input path="mobile" />
</td>
</tr>
<tr>
<td>
Email:
</td>
<td>
<form:input path="email" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="submit" />
</td>
</tr>
</table>
</form:form>

error.jsp文件:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<h3>An Error Occurred</h3>
message:<c:out value="${exception.message}" />
<a href="<portlet:renderURL portletMode="view" windowState="normal"/>">-Home -</a>

result.jsp文件:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<table>
<tr>
<td>
Name:
</td>
<td>
<c:out value="${addressBook.name}" />
</td>
</tr>
<tr>
<td>
Address:
</td>
<td>
<c:out value="${addressBook.address}" />
</td>
</tr>
<tr>
<td>
Telphone:
</td>
<td>
<c:out value="${addressBook.telphone}" />
</td>
</tr>
<tr>
<td>
Mobile:
</td>
<td>
<c:out value="${addressBook.mobile}" />
</td>
</tr>
<tr>
<td>
Email:
</td>
<td>
<c:out value="${addressBook.email}" />
</td>
</tr>
<tr>
<td colspan="2">
<a
href="<portlet:renderURL portletMode="view" windowState="normal"/>">
-Home -</a>
</td>
</tr>
</table>

unavailable.jsp文件:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<h2>not availiable</h2>
<a href="<portlet:renderURL portletMode="view" windowState="normal"/>">-Home -</a>

spring的配置文件conf/applicationContext.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- Default View Resolver -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/template/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

<!-- Default ExceptionHandler -->
<bean id="defaultExceptionHandler"
class="org.springframework.web.portlet.handler.SimpleMappingExceptionResolver">
<property name="order" value="10" />
<property name="defaultErrorView" value="error" />
<property name="exceptionMappings">
<props>
<prop key="javax.portlet.UnavailableException">
unavailable
</prop>
<prop key="java.lang.Exception">error</prop>
</props>
</property>
</bean>
</beans>

conf/portals/applicationContext-easylight-a.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean
class="org.springframework.web.portlet.handler.PortletModeHandlerMapping">
<property name="portletModeMap">
<map>
<entry key="view" value-ref="viewController" />
</map>
</property>
</bean>
<bean id="viewController"
class="org.springframework.web.portlet.mvc.SimpleFormController">
<property name="commandClass"
value="com.sillycat.core.model.AddressBook" />
<property name="commandName" value="addressBook" />
<property name="formView" value="addressInput" />
<property name="successView" value="result" />
</bean>
</beans>


6、部署 Portlet 应用程序
将我们的easylight项目deploy到tomcat6.0下
访问
http://localhost:8080/pluto/portal
登陆后在Pluto Admin下面
Portal Pages这里输入 EasyLightA,点击 Add Page按钮

select...框中选择刚才新增的EasyLightA
下面在Portlet Applications中选择easylight,然后选择一个page

这样就可以在新增EasyLightA页面中操作刚才写的几个页面了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值