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
 
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quqi99

你的鼓励就是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值