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页面中操作刚才写的几个页面了

你可能感兴趣的:(spring,框架,bean,jsp,mobile)