`

jetspeed 1.4 二次开发入门 (by quqi99)

 
阅读更多
Portlet应用开发
一、什么是portal
Portal是一种基于web的应用,通常用来提供个性化、单点登陆、内容集合、信息系统表现层。其中,内容集合指把不同源头的内容整合成一个网页。Portal可提供高级的个性化功能,可以让用户定制自己需要的内容。这样的portal页面对不同的用户有不同的portlet集合。
Portal页面结构如下所示:
上图所示的portal页面有四个portlet窗口。通过个性化定制,用户可以改变自己的portal页面中portlet的布局,还可以向自己的portal页面中增加portlet或将portlet从中移除。
二、portal工作流程概述
Portal页面的生成:
Portal页面请求过程:①用户使用浏览器访问portal页面。②收到请求后portal服务器根据用户的个性化信息确定需要的portlet,③然后通过portlet容器调用这些portlet。④Portal服务器用portlet生成的网页片段建立portal页面,⑤发送给用户。(其中角色参考上图)
三、部署ASOPortal
a. 安装MySQL数据库。将MySQL压缩包解压缩到硬盘,进入bin目录,运行winmysqladmin.exe,任务栏中出现绿灯说明MySQL服务已启动。
b. 安装JDK和tomcat服务器。
c. 将ASOPortal压缩包解压到tomcat的webapps/asop目录中,将WEB-INF/src/sql/asop.sql复制到MySQL的bin目录下,用命令行方式进入该目录执行“mysql-uroot<asop.sql”。
d. 启动tomcat,浏览http://localhost:8080/asop/config,在数据库配置页面中修改Url为jdbc:mysql://localhost/asop?useUnicode=true&characterEncoding=UTF-8。浏览http://localhost:8080/manager/html,在Applications栏目中找到asop,点击它右面的Reload链接重新启动该应用以使新配置生效。看到Message栏中出现“OK - Reloaded application at context path /asop”表示成功。
e. 浏览http://localhost:8080/asop/进入ASOPortal系统。
四、portlet应用基础
ASOPortal系统portlet执行机制:(参考第七部分例程)
a.渲染(render)请求和操作(action)请求:渲染请求会使portlet显示最初的默认页面。当显示一个portal页面时portal服务器触发该页面中所有portlet的渲染请求。当在portal页面的某个portlet中提交表单或点击操作请求链接时,portal服务器会触发该portlet的操作请求,并触发同一portal页面中其它portlet的渲染请求。

客户端
Portal
服务器
Portlet
容器
Action
Jsp
request
setAttribute
getAttribute
.xreg文件

b.收到渲染请求,portlet容器根据.xreg文件中的portlet注册信息找到被请求的portlet的Action类,调用它的buildNormalContext方法,之后重定向到注册信息中指定的模板(jsp)。
c.收到操作请求,portlet容器根据名为js_peid和eventSubmit_doXxxx的请求参数调用相应portlet的Action类的doXxxx方法, setTemplate方法指定重定向去的模板(jsp)。js_peid请求参数在后面介绍。
d.注意:①在buildNormalContext方法和doXxxx方法中均可用request对象的setAttribute方法将动态内容保存到request对象中,在之后的jsp模板中用request对象的getAttribute方法取得该动态内容并显示。②若未在Action的doXxxx方法中调用setTemplate,则方法完成后重定向去该portlet上一次使用的模板。
编写ASOPortal系统的portlet应用建议步骤:①编写Jsp页面,②编写Action类和相关的实体类和DAO,③注册到.xreg文件中。
Jsp模板文件要放在WEB-INF/template-asop/jsp/portlet/html目录下,这是由配置文件TurbineResources.properties中的
services.JspService.templates=/WEB-INF/templates-asop/jsp
和JetspeedResource.properties中的
services.TemplateLocator.templateRoot=/WEB-INF/templates-asop
决定的。(TurbineResources.properties和JetspeedResource.properties在WEB-INF/conf下)
用于portlet的jsp中使用asop标签<template:dynamicUri/>来生成portlet请求URL。在提交请求时需要包含js_peid参数。(参见第七部分例程)
应用的Action类统一放到com.aerostrong.asop.portal.portlet.act
ions包中为每个应用建立的子包里,这是由TurbineResource.properties中的module.packages=com.aerostrong.asop.portal.portlet 决定的。Action的方法中对request的操作(如getAttribute、setAttribute等)需要首先取得request对象,方法是调用作为参数传入的RunData实例的getRequest方法;对request参数的取得可使用RunData实例的getParameters().getXXX()方法,其中getXXX可以是getString、getInt、getDate等方法。(参见第七部分例程)
.xreg文件的名称理论上可以随意,为方便管理我们统一使用appName-portlet.xreg,其中appName为应用系统的名称。.xreg文件是xml格式的,注册portlet的方法就是给其中的registry元素增加一个portlet-entry字元素,具体参见第七部分例程。.xreg文件需要用UTF-8字符集保存。
五、最简单的开发环境
ASOPortal系统现已配有Ant构建文件WEB-INF/build.xml,可使用EditPlus、UltraEdit等文本编辑器编写Action类和jsp页面,修改xreg文件,之后用命令提示符模式在asop的WEB-INF目录下执行ant命令来编译。可用的命令有ant——只编译更新过的类,ant clean——清除所有已编译的文件,ant all——清除已编译的文件并全部重新编译。
使用该方法需要安装配置Ant编译工具。方法是解压缩Ant到硬盘上,设置环境变量ANT_HOME为Ant解压缩出来的目录,添加%ANT_HOME%/bin到PATH环境变量中。
.xreg文件修改或类编译后都需要重新启动应用才会生效。可通过访问http://localhost:8080/manager/html,点击Applications栏目中asop右边的Reload来重启应用。
六、配置JBuilder开发环境
习惯使用Jbuilder环境开发的同志可参考以下步骤设置Jbuilder。
a.在Jbuilder中点击菜单中的File->New->Project for Existing Code。
b.将Directry设置为asop的WEB-INF目录,name设为ASOPortal,点击Next进入下一步。
c.设置Output path为asop的WEB-INF/classes,Backup path和Working path不作要求;下面的source页中default设为WEB-INF/src/java;Required Libraries页中点击Add,在新弹出的窗口中点击New,在新弹出的窗口中设置Name为ASOPortal,点击Add,选中asop的WEB-INF/lib和WEB-INF/buildlib目录下的所有jar点击OK,选中ASOPortal点击OK。点击finish完成。
d.开发时使用Jbuilder编写Action类,用自己习惯的工具编写jsp页面并保存到前面介绍的文件夹中,手动修改.xreg文件。.xreg文件修改或类编译后需要重新启动应用才会生效。可通过访问http://localhost:8080/manager/html,点击Applications栏目中asop右边的Reload来重启应用。

七、例程
WEB-INF/conf/AppDemo-portlet.xreg(必须用UTF-8字符集保存)
<?xml version="1.0" encoding="UTF-8"?>
<registry>
<portlet-entry name="AppDemo" hidden="false"
type="instance" parent="JSP" application="false">
<meta-info>
<title>简单应用</title>
<description>应用portlet示例</description>
</meta-info>
<classname>org.apache.jetspeed.portal.portlets.JspPortlet</classname>
<parameter name="template" value="appdemo/appDemo.jsp"
hidden="true" cachedOnName="true" cachedOnValue="true"/>
<parameter name="action" value="appdemo.AppDemoAction"
hidden="true" cachedOnName="true" cachedOnValue="true"/>
<media-type ref="html"/>
<url cachedOnURL="true"/>
<category group="Jetspeed">测试</category>
</portlet-entry>
<portlet-entry>
……
</portlet-entry>
</registry>
WEB-INF/template-asop/jsp/portlets/html/appdemo/appDemo.jsp
<%@ page contentType="text/html; charset=GB18030" %>
<%@ taglib uri="http://www.aerostrongsoft.com.cn/asop/portal/tags-template" prefix="template" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
今天是:<fmt:formatDate dateStyle="FULL" value="${today}"><br>
<form action="<template:dynamicUri/>" method="post">
<input type="hidden" name="js_peid" value="<c:out value='${js_peid}'>"/>
您的姓名:<input type="text" name="user_name"/>
<input type="submit" name="eventSubmit_doWelcome" value="提交"/>
</form>
WEB-INF/src/java/com/aerostrong/asop/portal/portlet/actions/demo/AppDemoAction.java
package com.aerostrong.asop.portal.portlet.actions.appdemo;
import org.apache.jetspeed.modules.actions.portlets.JspPortletAction;
import org.apache.jetspeed.portal.Portlet;
import org.apache.turbine.util.RunData;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class AppDemoAction extends JspPortletAction {
private static Log log = LogFactory.getLog(AppDemoAction.class);
protected void buildNormalContext(Portlet portlet, RunData runData) {
log.trace("in");
runData.getRequest().setAttribute("today", new java.util.Date());
}
public void doWelcome(RunData runData, Portlet portlet) {
log.trace("in");
String name = runData.getParameters().getString("user_name");
runData.getRequest().setAttribute("userName", name);
setTemplate(runData, "appdemo/appDemoWelcome.jsp");
}
}
WEB-INF/template-asop/jsp/portlets/html/appdemo/appDemoWelcome.jsp
<%@ page contentType="text/html;charset=GB18030" %>
<%@ taglib uri="http://www.aerostrongsoft.com.cn/asop/portal/tags-template" prefix="template" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
欢迎您,<c:out value="${userName}"/><br>
<a href="<template:dynamicUri/>?js_peid=<c:out value='${js_peid}'/>">返回</a>
WEB-INF/conf/TurbineResources.properties
services.JspService.templates =/WEB-INF/templates-asop/jsp
module.packages=com.aerostrong.asop.portal.portlet
WEB-INF/conf/JetspeedResources.properties
services.TemplateLocator.templateRoot=/WEB-INF/templates-asop
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics