目 录
|
|
|
- 冥 贡
- 7 years ago
- Views:
Transcription
1 PRIMETON TECHNOLOGIES, LTD. 普元信息技术股份有限公司 Portal 集成指南
2 目录 1 概述 本文目标 非本文目标 术语表 Widget 绝对路径 跨域 基本原理 Portal 框架 Portal 安全机制 登录安全 应用入口安全 系统主题访问权限控制 Widget 访问权限控制 内容集成原理 内容集成原理 Widget 注册规范 Widget 注册时 URL 配置规则 异步 Widget 开发规范 介质说明 标准 Portal 部署包 (portal_war.zip) 高级 Portal 部署包 (portal_ecm_war.zip) 集成指南 Portal 系统集成总览 单点登录集成 搭建门户框架 配置 Apache 代理 内容集成 集成应用 集成应用菜单 集成 widget 配置系统主题 个性化配置 集成符合 JSR168 规范的 portlet 实现 widget 交互 第 2 页共 65 页
3 5 扩展开发 定制不同风格 Portal 主页 使用场景 Portal 主页换肤原理 风格皮肤目录结构说明 前提条件 扩展开发步骤 widget 内容或应用系统内容换肤 扩展布局模板 使用场景 前提条件 扩展开发步骤 定制 Widget 首选项 使用场景 首选项配置页面说明 定制开发步骤 首选项示例 扩展 Portal 主页检索功能 使用场景 前提条件 扩展开发步骤 扩展 widget 图标 使用场景 前提条件 扩展开发步骤 对外 API 说明 事件交互相关 API 触发事件 监听事件 Portal 中内置的事件 为当前主题添加 widget 重新加载主题 隐藏当前显示的窗体 转到指定的主题页 内容区转到指定的 url 在弹出窗口中打开指定的 url 刷新主题页 常用 API 打开风格切换窗口 打开重置主题窗口 第 3 页共 65 页
4 6.3.3 打开设置主题窗口 打开 Widget 添加窗口 系统退出 在内容区打开页面 创建弹出窗口对象 性能调优 针对高网络流量的性能优化 网络流量计算方式 网络流量优化方案 常见故障排除 常规故障定位步骤 登录后提示为非法用户 Widget 中显示登录页面 跨域应用的不同模块未使用同一个 session Widget 中页面弹出窗口只能在 widget 小窗口范围内显示或窗口样式异常 在 Was 下修改配置文件不生效 在 Was 下 Portal 页面出现乱码 在 Was 下在 Portal 主页中切换点击不同应用菜单, 报数据加载失败 第 4 页共 65 页
5 1 概述 1.1 本文目标 本文从多应用页面集成过程出发, 重点阐述了在 Portal 实施过程中搭建门户框架 进行内 容集成等方面的流程和方法, 希望为 PS 和合作伙伴基于普元 Portal 进行多应用集成实施提 供参考 1.2 非本文目标 本文不涉及单点登录 (SSO) 集成相关的内容, 与单点登录集成相关的内容请参考 SSO 安 装指南 和 SSO 集成指南 文档 本文不涉及 Portal 基本的安装过程, 与安装相关的内容请参考 Portal 安装指南 文档 1.3 术语表 Widget Widget 是一种能够提供特定服务或信息 ( 例如 : 提供日历 天气预报 公司新闻 管理驾驶舱 产品信息等 ) 的 Web 页面小构件, 通过 Widget 调用, 消费者可使用 Widget 提供的服务并获取所需的信息 绝对路径 本文中绝对路径是指定义的 URL 路径是从应用的 WebContext 开始的路径, 以 / 开头, 如 :default 应用下的 /ap/see/index.jsp, 就是绝对路径 通过在绝对路径前加上应用服务器的 Name 或 IP 以及 Port 和应用的 ContextPath, 即可得到 URL 的全路径名 如 : 应用服务器的 IP 和 Port 为 : 应用的 ContextPath 为 :default,url 的全路径名为 : 跨域 当两个域具有相同的协议 ( 如 http), 相同的端口 ( 如 80), 相同的 host( 如 ), 那么我们就可以认为它们是相同的域 比如 和 是同域, 而 中的任何两个都将构成跨域 第 5 页共 65 页
6 2 基本原理 2.1 Portal 框架 普元 Portal 框架如下图所示 图 4-1Portal 框架 Primeton Portal TM 提供了轻量级门户框架, 帮助企业快速实施见效 普元门户框架中, 主要包含以下几部分内容 :Portal 服务器 SSO 组件 内容管理服务器 门户应用 Portal 服务器 Portal 服务器是 Primeton Portal TM 的核心, 提供了门户展现集成框架, 包括个性化门户框架 Portal 引擎 Widget 容器 内容发布等核心组件, 并通过 Apache 代理实现跨域访问 个性化门户框架提供 Widget 运行环境 事件总线 沙箱 可扩展的 Widget 渲染器, 支持门户风格定制和布局调整 Portal 引擎负责系统主题 用户个性化信息的加载和持久化, 并对 Widget 组件提供基 本的注册和授权管理 第 6 页共 65 页
7 Widget 容器负责处理 Widget 请求 加载并生成动态内容 Primeton Portal TM 提供了常 用的 Widget 容器并支持扩展 Widget 容器, 支持加载常用的 URL 链接的 Web 页面 Flash 插件 ( 放在 Web 页面中 ) 以及符合 JSR168 标准的 Portlet 等 内容发布组件负责发布栏目维护 内容采编 审核和发布管理, 提供了内容发布全生命 周期管理 Apache 代理负责请求过滤和代理转发, 为 Portal 提供跨域访问和资源注入支持 SSO 组件 SSO 组件提供了单点登录集成功能, 支持统一的身份认证, 通过扩展 SSO Client 与各 种应用系统集成, 实现 单点登录 全网漫游 内容管理服务器 内容管理服务器提供内容管理的核心服务, 包括内容服务 搜索服务 OCR 服务等, 支持 CIFS WebDAV FTP Sharepoint IMAP 等多种协议 门户应用普元门户系统提供了基于 COFrame 的统一组织机构管理框架, 支持统一的组织机构和用户管理 文档管理组件则实现了企业纸质文档的电子化, 提供文档的存储 共享与利用 为了快速集成和实施, 提供了多种集成展现 Widget( 如 : 系统菜单 功能菜单 快捷菜单等 ), 并能够与流程产品集成 2.2 Portal 安全机制 普元 Portal 提供了多层次的安全机制, 从登录 应用入口 系统主题 Widget 等多个层面提供了安全管理 登录安全 Portal 主要从两个层面保证了单点登录的安全性 : 通过 SSL 传输协议保证传输安全性, 确保数据在网络传输过程中不会被截取及窃听 ; 通过多种手段保证票据 (Ticket) 的安全性, 保证票据不可被仿造 应用入口安全 Portal 在应用管理中提供了授权控制, 使得用户登录 Portal 后, 在系统菜单中只能看到自己有权限访问的应用 第 7 页共 65 页
8 2.2.3 系统主题访问权限控制 普元 Portal 提供了系统主题访问权限控制, 用以限制合法用户可访问系统主题的范围, 使得用户登录 Portal 后, 只能看到自己有权限访问的系统主题 系统提供的权限机制如下 : 每个系统主题有 2 种状态 : 共享或受控 对于共享状态的系统主题, 不做权限控制, 所有合法用户都可以访问 实际应用中, 一般将一些与业务无关的公共主题设置为共享的系统主题 对于受控状态的系统主题, 则是根据权限配置情况进行访问控制 受控系统主题的权限控制 : 对于受控系统主题, 默认情况下所有用户都是不可访问的 系统提供了针对角色的系统主题权限分配, 通过为每一个角色配置可访问的受控系统主题来实现对系统主题的访问 Widget 访问权限控制 普元 Portal 提供了 widget 访问权限控制, 用以限制合法用户可访问 widget 的范围, 使得用户登录 Portal 后, 只能看到自己有权限访问的 Widget 系统提供的权限机制如下: 每个 widget 有 2 种状态 : 共享或受控 对于共享状态的 widget, 不做权限控制, 所有合法用户都可以访问 实际应用中, 一般将一些与业务无关的公共 widget 设置为共享 widget, 如 : 公司新闻, 公告, 日历等 对于受控状态的 widget, 则是根据权限配置情况进行访问控制 受控 widget 的权限控制 : 对于受控 widget, 默认情况下所有用户都是不可访问的 系统提供了针对角色的 widget 权限分配, 通过为每一个 widget 配置可访问该 widget 的角色来实现对 widget 的访问授权 2.3 内容集成原理 内容集成原理 Portal 作为前端门户集成系统, 需要集成后端系统, 将后端系统的内容和业务整合在统一的门户页面上, 供用户在统一的界面上获取各种来源的信息, 而不会意识到信息的真正来源 Widget 是门户中提供特定服务或信息 ( 例如 : 提供日历 天气预报 公司新闻 管理驾驶舱等 ) 的窗口, 可通过 Portal 提供的 widget 容器处理请求 加载并生成动态内容 一个门户主页可以有多个 widget, 通过不同的 widget 可以在一个界面上分别显示来自不同来源 ( 网络服务 ) 的信息 Portal 提供了页面集成的柔性框架, 通过加载 widget 支持内容集成, 是一套解决多应用界面集成的解决方案 在不对原始应用程序进行任何修改的前提下, 通过 Apache 代理对原始应用进行访问, 并通过 Widget 对外进行数据提供 发出事件 接收外部应用的数据 响应外部事件, 实现交互需要 使多应用的程序在 Portal 中无界限的运行 通过定制和提供所需的 widget 即可以实现不同应用系统的页面整合和内容集成, 内容集成模式如下图所示 : 第 8 页共 65 页
9 图 4-2 内容集成模式 在进行内容集成过程中,Portal 框架主要解决了以下问题 : 跨域问题跨域问题是限制多应用之间进行数据交互和内容访问的重要障碍, 要达到各应用之间的无隔阂访问, 首先需要解决的是跨域问题,Portal 通过部署 Apache 服务器, 使用 Apache 服务器的 URL Rewrite 和反向代理功能, 把需要集成的应用映射到当前域下 ( 即继承 Portal 页面所在的域 ) 来解决跨域的问题 如此, 访问任何应用都像是在访问当前 Portal 所在服务器下的一个子应用, 不存在跨域的问题, 对应用集成后也可以通过在前端使用 JS 进行数据 内容 事件的访问和发布 资源注入问题在页面集成过程中, 用户常常希望在不修改已有页面的前提下, 实现 Widget 的样式统一和交互 Portal 通过对集成的应用注入 CSS JS, 改变界面的样式, 改变界面元素的事件响应等, 来支持这些需求 资源隔离和交互在页面集成过程中, 为了避免集成页面因为编码不规范或恶意代码破坏 Portal 运行的安全性,Portal 提供了沙箱模型, 进行资源隔离, 使得每一个 Widget 的 JS 变量作用域都在一个安全的沙箱中有效 同时, 通过对沙箱里面的页面进行 top parent 重写, 让应用独立起来, 使集成的应用不能访问顶层页面的任何信息, 从而保证程序运行的安全性 第 9 页共 65 页
10 同时,Widget 运行在一个大的 WidgetContext 的环境中, 这个运行环境管理这些 Widget 实例, 同时为各个彼此不能感知的 Widget 或者其他过程提供事件监听和响应机制, 实现通信 每个集成的应用, 通过实例化相应的类, 对外提供接口, 实现对外发出事件 提供数据 外部事件响应等 应用之间通过这些特定的接口对集成的应用进行编程, 而不需要详细的了解被集成应用的页面信息等 Widget 注册规范 普元 Portal 提供了 widget 注册功能, 企业的系统管理员通过注册 widget 来定义企业门户中可使用的 widget widget 注册功能如下图所示 : 以下对 Widget 注册时的配置内容进行说明 : 配置参数配置说明配置规范 Widget 类型注册 widget 的类型, 每一种类型对应一种渲染器和 widget 容器, 可扩展针对不同类型的 widget,widget 注册内容可能不同 可选择以下配置项 : iframe:widget 对应到一个 url 上, 使用系统内置的 widget 容器, 渲染方式为通过 iframe 请求 url 对应内容 异步 ( 推荐选项 ):widget 对应到一个 url 上, 使用系统内置的 widget 容器, 渲染方式为通过 ajax 异步请求 url 内容, 再将内容加载到 iframe 中 注意 : 如果使用异步方式,widget 所在应用必须通过 apache 代理到 Portal 同域下 html:widget 对应了一段 html 代码, 使用系统内置的 widget 容 第 10 页共 65 页
11 器, 渲染方式为将 html 代码输出到 iframe 中 portlet: 表示 widget 对应了一个符合 JSR168 规范的 portlet, 使 用系统内置的 portlet 容器 Widget 编号 注册的 widget 编号, 具有全局唯一性 字符串, 必须以字母开头, 可包含字母 数字和部分特殊字符 (-_.), 具有全局唯一性 Widget 名称 widget 的名称 字符串, 必须以字母或中文或数字开头, 可包含字母 数字 中文和部分特殊字符 (-_.) Widget 分类当需要为 Widget 进行业务分类时使用 可根据需要通过业务字典配置 widget 分类 所属应用 Widget 的 url 对应的是哪一个应用 widget 内容在哪一个应用下, 可通过应用管理进行维护 Widget 标题 widget 加载后显示在 字符串, 无特别约束 窗口上的标题 Widget 高度 widget 窗口的高度 整数, 单位为像素 为空时高度自适应 建议使用固定高度 Widget 图标 widget 加载后显示在 选择系统提供的 widget 图标, 可扩展, 参见扩展 widget 图标章节内容 窗口上的图标 Widget 描述 widget 的描述 字符串, 无特别约束 URL widget 对应的 url 路径, 当 widget 类型为 iframe 或异步时, 需 必须为绝对路径或完整路径, 绝对路径必须以 / 开头 如 : /product/product.jsp 当 widget 类型为 html 时, 不需要配置 url 要配置 url 首选项地址 Widget 首选项配置页面的 URL 可选,Widget 首选项配置页面对应的 URL, 必须为绝对路径或完整路径, 绝对路径必须以 / 开头 如 : /weather/perference.jsp HTML 当 widget 类型为 对应一段 html 代码, 其中引用资源时必须写成绝对路径 html 时, 需要配置 实现类 Widget 对外接口的实现类的名称 该实现类必须为 widget 中已经定义的当 widget 需要暴露一些方法供其它 widget 调用时, 可通过定义实现类的方式实现, 该实现类中定义了该 widget 中需要对外暴露的 API,portal 框架在加载 widget 时, 会将该实现类以 widget 编号作为实例名称实例化到 WidgetContext 中, 其它 widget 可通过 WidgetContext 调用这些 API 引用的 JS Widget 需要引用的 js 资源的 URI 引用 js 资源的 URL, 可以为引用资源的绝对路径或完整路径, 绝对路径必须以 / 开头 可以同时引用多个 js 资源, 每行输入 1 个, 如 : /common/js/common.js 当不希望修改 widget 对应的原有功能, 又希望提供 widget 交互时, 可通过增加引用的 js 的方式, 为 widget 增加注册或监听事件,portal 框架在加载 widget 时, 会将引用的 js 注册到 widget 中 引用的 CSS Widget 需要引用的样式资源的 URI 引用样式资源的 URL, 可以为引用资源的绝对路径或完整路径, 可以同时引用多个样式资源 如 :/skins/default/css/main.css 第 11 页共 65 页
12 2.3.3 Widget 注册时 URL 配置规则 最终请求的 Widget 的 url 由三部分内容拼接而成 : hosturl : 根据 widget 的所属应用获取, 协议 + 主机地址 / 域名 + 端口, 如 : 必须通过 Apache 代理后, 与 Portal 应用在同域下 appname: 根据 widget 的所属应用获取, 应用名称, 如 :default action:widget 注册时的 url 路径, 为 2 种形式, 如 :/template/default/portal.jsp( 绝对路径 ), 完整路径 ) 其中 hosturl 和 appname 是根据 Widget 注册时配置的所属应用, 从 PORTAL_APP 表中获取的, 配置时需要遵守以下规则 : hosturl 不能以 "/" 结尾, 必须通过 Apache 代理与 Portal 应用在同域下 appname 不能以 "/" 开头和结尾, 但可以为空拼接规则 : widget 未设置所属应用, 则直接加载 widget 对应的 url widget 设置了所属应用, 则按照以下规则 条件 :action 为完整路径, 结果 :url=action 条件 :appname 不为空并且 action 以 "/" 开头, 结果 :url=hosturl+"/"+appname+action 条件 :appname 为空并且 action 以 "/" 开头, 结果 :url=hosturl+action 条件 : appname 不为空并且 action 不以 "/" 开头, 结果 : url=hosturl+"/"+appname+"/"+action 条件 :appname 为空并且 action 不以 "/" 开头, 结果 :url=hosturl+"/"+action 异步 Widget 开发规范 对于异步加载的 widget,widget 产生的内容最终会被作为 html 片段加载到 portal 主页面中 在开发 widget 时, 有些与传统页面开发不同的地方需要注意 异步加载的 widget 页面中, 不要跨域引用 JS, 在 IE 浏览器下不支持如 :Portal 应用经过 Apache 代理后的访问地址为 : 应用下的 abc.html 中包含了 <script type="text/javascript" src=" 的引用 异步加载的 widget 页面编码必须保证能够正确解析, 建议使用 utf-8 异步加载的 Widget 必须与通过 Apache 配置在与 Portal 应用同域下 3 介质说明 Portal 提供了 2 个介质,portal_war.zip 和 portal_ecm_war.zip, 下面对 2 个介质进行说明 : 第 12 页共 65 页
13 3.1 标准 Portal 部署包 (portal_war.zip) 当需要独立部署不带 ECM( 内容管理 ) 组件的 Portal 服务器时, 使用本介质进行安装 目录 说明 jar_system tomcat weblogic websphere sql src 部署 Portlet 容器需要的 jar 包在 tomcat 应用服务器下部署 portal 服务器时的 war 包在 weblogic 应用服务器下部署 portal 服务器时的 war 包在 websphere 应用服务器下部署 portal 服务器时的 war 包搭建 Portal 服务器所需要的数据库初始化脚本, 按不同数据库类型分别存放 Portal 框架开源项目源码包 3.2 高级 Portal 部署包 (portal_ecm_war.zip) 当需要独立部署带 ECM( 内容管理 ) 组件 ( 包含 ECM Client) 的 Portal 服务器时, 使用本介质 进行安装 目录 说明 tomcat weblogic websphere sql src 在 tomcat 应用服务器下部署 portal 服务器时的 war 包在 weblogic 应用服务器下部署 portal 服务器时的 war 包在 websphere 应用服务器下部署 portal 服务器时的 war 包搭建 Portal 服务器所需要的数据库初始化脚本, 按不同数据库类型分别存放 Portal 框架开源项目源码包 4 集成指南 4.1 Portal 系统集成总览 如 Portal 集成总览流程图所示, 在使用 Portal 进行应用系统集成时, 主要包括 3 个方面的工作 : 单点登录集成 : 主要包括部署 sso 服务器 登录页面定制, 以及已有应用单点登录集成等 搭建门户框架 : 主要包括部署 Portal 服务器 配置 Apache 代理等 页面整合和内容集成 : 主要包括应用集成 widget 集成 应用菜单集成等 第 13 页共 65 页
14 在后续的文档中, 将针对这 3 方面的内容给出详细的实施说明 图 4-1 Portal 集成总览流程图 4.2 单点登录集成 在通过 Portal 进行多应用界面集成时, 单点登录集成是必不可少的步骤 有关单点登录集成的 内容请参见 SSO 安装指南 和 SSO 集成指南 4.3 搭建门户框架 请参考 Portal 安装指南 文档, 完成 Portal 服务器的安装 本章节主要说明 Apache 代理的配置过程 配置 Apache 代理 在进行界面集成时, 不同的 Widget 常常来源于不同的应用, 这就涉及到跨域访问问题 ; 同时, 在集成过程中还可能涉及到 Widget 交互 Widget 风格替换等需求,Portal 通过配置 Apache 代理服务器解决跨域问题和资源注入问题 Apache 代理是通过 Portal 进行页面集成必不可少的步骤, 以下说明配置 Apache 代理的过程 第 14 页共 65 页
15 前提条件 已安装好 Portal 服务器, 已安装好 apache 服务器并能正常启动 使用介质 从 Apache 官网上下载 Apache 服务器, 下载地址 : 参考网上 apache 配置的内容, 将 apache 安装到服务器上 Apache 服务器可以与 Portal 服务器共用同一台机器, 也可以单独安装到一台机器上 在 Linux 下安装 apache 下载 Apache 地址 : home]# tar zxvf httpd tar.gz httpd-2.4.7]# cd httpd httpd-2.4.7]#./configure --prefix=/usr/local/apache-httpd enable-so httpd-2.4.7]# make httpd-2.4.7]# make install 如果在执行./configure... 的时候出现如下错误 : checking for APR... no configure: error: APR not found. Please read the documentation. 则需要安装 apr 安装 apr 下载 apr 地址 : [root@localhost home]# tar -zxvf apr tar.gz // 解压 [root@localhost home]# cd apr [root@localhost apr-1.5.0]#./configure --prefix=/usr/local/apr [root@localhost apr-1.5.0]# make [root@localhost apr-1.5.0]# make install 再次检查 apache 的编译环境, 执行./configure --prefix=/usr/local/apache-httpd with-apr=/usr/local/apr --enable-so 的时候出现如下错误 第 15 页共 65 页
16 checking for APR-util... no configure: error: APR-util not found. Please read the documentation. 则需要安装 apr-util 安装 apr-util 下载 apr-util 地址 : home]# tar -zxvf apr-util tar.gz home]# cd apr-util apr-util-1.5.3]#./configure --prefix=/usr/local/apr-util --with-apr=/usr/loc al/apr apr-util-1.5.3]# make apr-util-1.5.3]# make install 再次检查 apache 的编译环境, 执行./configure --prefix=/usr/local/apache-httpd with-apr=/usr/local/apr --with-apr-util= /usr/local/apr-util --enable-so 的时候出现如下错误 configure: error: pcre-config for libpcre not found. PCRE is required and available from 则需要安装 pcre 安装 pcre 下载 pcre 地址 : home]# unzip -o pcre-8.10.zip home]# cd pcre-8.10 cd pcre-8.10]#./configure --prefix=/usr/local/pcre cd pcre-8.10]# make cd pcre-8.10]# make install 再次检查 apache 的编译环境, 执行./configure --prefix=/usr/local/apache-httpd with-apr=/usr/local/apr --with-apr-util= /usr/local/apr-util --enable-so 若没有出现错误, 则继续执行 make 和 make install 第 16 页共 65 页
17 示例说明 Apache 服务器地址为 , 虚拟机映射端口为 8001 Portal 服务器 IP 地址为 , 端口 8080, 应用名 portal SSO 服务器 IP 地址为 , 端口 8080, 应用名 sso-server default 应用服务器 IP 地址为 , 端口 8090, 应用名 default Portal 和 default 应用都通过 Apache 代理访问 代理配置说明 步骤 1: 配置 httpd.conf 打开 Apache 服务器安装目录下的 conf 文件夹中的 http.conf 文件, 修改配置如下 ( 不同操作系统下 httpd.conf 配置中的模块目录可能不同, 按模块名称匹配即可, 如 : 在 Mac 下 mod_proxy.so 模块可能存放在 proxy_module libexec/apache2 目录下 ): 1) 开启代理模块, 将以下配置前的 # 去除 #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so 2) 开启 gzip 解压模块, 将以下配置前的 # 去除 #LoadModule deflate_module modules/mod_deflate.so 3) 开启 substitute 模块, 做内容替换, 将以下配置前的 # 去除 #LoadModule deflate_module modules/mod_substitute.so 4) 开启 slotmem_shm 模块, 将以下配置前的 # 去除 (Linux 环境需要,Windows 环境不需要 ) # LoadModule slotmem_shm_module modules/mod_slotmem_shm.so 5) 添加虚拟机映射, 使用反向代理访问需要集成的应用, 配置信息如下 : Listen 8001 <VirtualHost *:8001> SetOutputFilter INFLATE AddOutputFilterByType SUBSTITUTE text/html.jsp Substitute "s <head> <head><script>if(!widgetcontext){var WidgetContext=top.WidgetContext};if(WidgetContext){WidgetContext.Widget.headStart( 第 17 页共 65 页
18 window);}</script> i" Substitute "s </head> <script>if(!widgetcontext){var WidgetContext=top.WidgetContext};if(WidgetContext){WidgetContext.Widget.headEnd( window);}</script></head> i" Substitute "s </body> <script>if(!widgetcontext){var WidgetContext=top.WidgetContext};if(WidgetContext){WidgetContext.Widget.bodyEnd( window);}</script></body> i" ProxyPass /portal/ ProxyPassReverse /portal/ ProxyPass /default/ ProxyPassReverse /default/ </VirtualHost> 以上配置生效后, 通过 即可访问 Portal 应用, 通过 即可访问 default 应用 步骤 2: 修改集成应用配置 打开 Portal 和 default 应用的 \WEB-INF 目录下的 web.xml 文件, 按照 Apache 中的虚拟机配置, 修改 SSO Filter 中与 Portal 和集成应用相关的配置 Portal 应用的 web.xml 修改如下 : <context-param> 如果为 SSO Server 也配置了 Apache 代理, 则此配置也需要修改 <param-name>cas-url</param-name> <param-value> </context-param> <filter> <filter-name>sso Filter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.casfilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginurl</param-name> <param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateurl</param-name> <param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.servername</param-name> <param-value> :8001</param-value> </init-param> <init-param> 第 18 页共 65 页
19 <param-name>edu.yale.its.tp.cas.client.filter.initcontextclass</param-name> <param-value>com.primeton.cap.portal.runtime.integration.portalcontextinit</param-val ue> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.filterexclusion</param-name> <param-value>/portal/login/login.jsp</param-value> </init-param> </filter> <filter-mapping> <filter-name>sso Filter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>sso Filter</filter-name> <url-pattern>*.flow</url-pattern> </filter-mapping> default 应用的 web.xml 修改如下 : <filter> <filter-name>sso Filter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.casfilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginurl</param-name> <param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateurl</param-name> <param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.servername</param-name> <param-value> :8001</param-value> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.initcontextclass</param-name> <param-value> org.gocom.components.coframe.init.capinitcontenxtadapter</param-value> </init-param> </filter> <filter-mapping> 第 19 页共 65 页
20 <filter-name>sso Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 步骤 3: 修改 Portal 中的应用注册信息 以系统管理员身份登录到 Portal, 在 Portal 的功能菜单中, 选择 应用管理 功能, 进入应用管理界面, 修改 Portal 应用和 default 应用配置, 将应用 URL 配置为 Apache 代理地址, 本示例中 Portal 应用和 default 应用 URL 均为 : 第 20 页共 65 页
21 步骤 4: 启动 Apache Apache 的启动命令与 Apache 版本以及部署在哪个操作系统下有关, 可在网上查询具体命令 常用的命令如下 : Linux 系统为 :apachectl start/stop/restart 启动 / 停止 / 重启 Window 系统为 :httpd.exe 启动 OS X 系统为 :sudo apachectl start/stop/restart 启动 / 停止 / 重启 Apache 启动后, 可通过浏览器访问 Apache 所在的地址, 如 : 或者 Apache 服务器的域名, 如果出现 It works! 就说明 apache 启动成功 步骤 5: 启动 SSO-Server Portal 和集成的应用, 如果部署了带 ECM 的 Portal, 则还需要启动 ECM Server 步骤 6: 访问 Portal 主页 在浏览器地址栏输入 : 出现登录页面, 输入正确的用户名和密码能够登录到 Portal 主页即说明通过 Apache 代理访问 Portal 成功 通过域名访问 如果不希望通过固定 IP 访问 Apache, 而是希望通过域名访问 apache, 则可为 Apache 配置域名访问 以域名为 为例, 在 http.conf 文件最后增加以下内容 : <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/user/work/eos7" ServerName </VirtualHost> 配置好域名后, 即可将原来代理配置中的固定 IP 改为域名 不同的操作系统可能的配置方式不尽相同, 有关 apache 域名配置请参考网上相关内容 4.4 内容集成 内容集成主要包括应用集成 widget 集成 应用菜单集成 配置系统主题 个性化配置等环节 流程如下图所示 : 第 21 页共 65 页
22 图 4-2 内容集成流程图 集成应用 使用场景 用户需要将已有应用通过 Portal 进行集成展现, 可通过 Portal 的集成菜单进入各应用的功能页面, 可根据需要将应用的某些功能发布为 Widget, 在 Portal 主页上展现 前提条件 已安装 Portal 服务器, 并且能够正常运行 待集成的应用已经完成单点登录集成, 可通过 Portal 进行代理登录 集成步骤 步骤 1: 在 Apache 上为待集成的应用配置代理 打开 Apache 服务器安装目录下的 conf 文件夹中的 http.conf 文件, 增加对待集成应用的代理配置, 以集成 HR 应用 (IP 地址 , 端口号 9001, 应用名为 hr) 为例, 如下黄色背景内容 : Listen 8001 <VirtualHost *:8001> SetOutputFilter INFLATE AddOutputFilterByType SUBSTITUTE text/html.jsp 第 22 页共 65 页
23 Substitute "s <head> <head><script>var WidgetContext=top.WidgetContext;if(WidgetContext){WidgetContext.Widget.headStart(windo w);}</script> i" Substitute "s </head> <script>var WidgetContext=top.WidgetContext;if(WidgetContext){WidgetContext.Widget.headEnd(windo w);}</script></head> i" Substitute "s </body> <script>var WidgetContext=top.WidgetContext;if(WidgetContext){WidgetContext.Widget.bodyEnd(windo w);}</script></body> i" ProxyPass /portal/ ProxyPassReverse /portal/ ProxyPass /crm/ ProxyPassReverse /crm/ ProxyPass /hr/ ProxyPassReverse /hr/ </VirtualHost> 步骤 2: 修改待集成应用配置打开待集成应用的 \WEB-INF 目录下的 web.xml 文件, 按照 Apache 中的虚拟机配置, 修改 SSO Filter 中与 Portal 和集成应用相关的配置 可参考代理配置说明章节的步骤 2 步骤 3: 注册应用 以系统管理员身份登录到 Portal, 在 Portal 应用的功能菜单中, 选择 应用管理 功能, 进入应用管理界面, 注册 Widget 所在的应用 应用 URL 需要配置为 Apache 代理中的应用配置, 如 : 对于 HR 应用,URL 为 : 第 23 页共 65 页
24 应用基本配置说明如下 : 配置参数配置说明配置规范 应用编码 应用中文名 集成应用的编码, 具有全局唯一性应用中文名, 将在系统菜单中显示 必输项,2~32 个字符, 必须以字母开头, 可包含字母 数字和部分特殊字符 (-_.) 必输项, 应用的中文名, 也是系统菜单的显示名称,2~32 个字符, 可包含字母 数字 中文和部分特殊字符 (-_.) 应用名应用的 ContextPath 2~32 个字符, 可以为空, 不能以 / 开头和结尾, 如 :portal 应用 URL 栏目加载 URL 登录方式模拟登录 URL 其它配置 访问应用的地址应用加载栏目树的 URL 应用的登录方式模拟登录入口 URL 必输项, 协议 + 主机地址 / 域名 + 端口, 如 : 不能以 / 结尾 注意 : 如果需要在系统菜单 Widget 中加载功能菜单, 因为功能菜单加载是 ajax 请求, 必须将应用通过 Apache 代理配置在同域下, 否则, 功能菜单无法正常加载 可选项, 当应用中集成了内容发布时, 需要将栏目发布为 widget, 则需要配置加载栏目的 URL, 只能以 / 开头 ECM 应用默认的栏目加载 URL 为 : /org.gocom.components.ecp.columnmanager.service.columns ervice.searchallcolumns2nodes.biz.ext 根据应用集成后的登录模式进行选择 : 单点登录 / 模拟登录 如果为模拟登录则需要配置模拟登录 URL 模拟登录时调用的应用登录入口的 URL, 关于模拟登录的集成方式详见 SSO 集成指南 其它为应用菜单相关配置, 具体配置说明参见集成应用菜单章节 步骤 4: 应用授权 第 24 页共 65 页
25 如果希望用户登录 Portal 后, 在系统菜单中根据不同权限显示不同的应用, 则可 通过应用授权功能对注册的应用进行授权 应用授权入口如下图所示 : 集成应用菜单 使用场景 用户需要将已有应用集成到 Portal 中, 在系统菜单 Widget 中显示集成的系统菜单名称, 点击系统菜单, 在功能菜单 Widget 中加载该应用的功能菜单, 选择某一个功能, 在内容区展现该功能对应的页面 前提条件 已安装 Portal 服务器, 并且能够正常运行 待集成的应用已经完成单点登录集成, 可通过 Portal 进行代理登录 集成步骤 步骤 1: 实现应用功能菜单加载逻辑 需要根据待集成应用的功能菜单结构, 实现应用功能菜单加载逻辑 可参考开源项目 org.gocom.components.coframe 中的菜单加载逻辑流 org.gocom.components.coframe.auth.loginmanager.getmenudata.biz 约束条件 : 加载逻辑必须是可通过 ajax 请求执行的, 并且返回 json 格式的数据, 返回的 json 数据必须包含以下结构 ( 如需传递其它内容, 则可包含其它节点 ): { treenodes : [ { 第 25 页共 65 页
26 } ] } menucode : "COF_accountManager", menuname : " 帐户管理 " linkaction : null, openmode : "0", childrenmenutreenodelist : [ { menucode : "COF_accoutInfo", menuname : " 帐户维护 " linkaction : "/xxx.com.auth.base.account.accountmanager.flow", openmode : "0", childrenmenutreenodelist : null }, { menucode : "COF_passwordChange", menuname : " 密码修改 " linkaction : "/xxx.com.auth.base.account.passwordchange.flow", openmode : "0", childrenmenutreenodelist : null } ] 步骤 2: 保证功能菜单加载逻辑通过 SSO Filter 拦截 Portal 框架通过 ajax 请求加载逻辑, 获取返回值在功能菜单 Widget 中展现 如果请求功能菜单加载逻辑时, 集成的应用尚未登录, 就需要自动执行登录过程, 因此, 在待集成应用中, 必须保证功能菜单加载逻辑通过 SSO Filter 进行拦截, 执行统一登录过程 常规的做法是在集成的应用中将 SSO Filter 配置为拦截所有请求 (/*) 步骤 3: 配置应用对应的菜单以系统管理员身份登录到 Portal, 在 Portal 应用的功能菜单中, 选择 应用管理 功能, 进入应用管理界面, 选择需要配置菜单的应用进行配置 与应用菜单相关的配置说明如下 : 配置参数配置说明配置规范 显示系统菜单 系统菜单链接方式 该应用是否显示到系统菜单中点击系统菜单后相关内容的展现方式 如果希望配置的应用在系统菜单 Widget 中显示出来, 则选中 链接到功能菜单 : 链接到加载功能菜单的 URL, 点击系统菜单后, 在功能菜单中加载功能菜单树 在内容区打开 : 链接到具体的界面 ( 如 : 某个应用的主界面 ), 点击系统菜单后, 在 Portal 主页的内容区加载对应的页面 在新窗口中打开 : 链接到具体的界面 ( 如 : 某个应用的主界面 ), 点 第 26 页共 65 页
27 系统菜单链接 URL 系统菜单图标 系统菜单显示顺序 点击系统菜单后链接的 URL 在系统菜单中显示的该应用的图标在系统菜单中的显示顺序 击系统菜单后, 在浏览器新的 tab 中加载对应的页面 当系统菜单链接到功能菜单时, 输入加载功能菜单的 URL; 否则, 输入系统菜单链接的页面的 URL 可输入绝对路径或完整路径的 URL, 绝对路径必须以 / 开头, 如 : /portal/share/portal.ui( 绝对路径 ), 完整路径 ) 可从已有的图标中选择, 如需扩展自定义的图标, 请参见扩展 widget 图标章节内容 录入数字 加载不同应用的功能菜单 在有的项目中, 客户希望把多个应用的菜单进行统一管理和配置 ( 如 : 都在同一个 coframe 中进行管理 ), 在 Portal 中希望按不同应用加载应用下的菜单 针对这种需求,coframe 菜单加载逻辑提供了多应用支持, 可在配置系统菜单链接 URL 时传递 appcode 参数来实现, appcode 对应 coframe 应用框架中的应用编码 如 : 在 coframe 中定义了以下 3 个应用, 并统一配置了功能菜单 : 在 Portal 中也分别定义了 3 个应用, 系统菜单链接的 URL 配置如下表所示 : 应用 Portal 应用 EOS7 应用 ECM 应用 默认功能菜单加载逻辑 /com.primeton.cap.portal.runtime.uiservice.menuruntimemgr.getmenudata.biz.ext?appcode= portal /org.gocom.components.coframe.auth.loginmanager.getmenudata.biz.ext?appcode=coframe /org.gocom.components.coframe.auth.loginmanager.getmenudata.biz.ext?appcode=ecm 第 27 页共 65 页
28 系统内置的功能菜单加载逻辑 应用 Portal 应用 EOS 7 应用 ECM 应用 默认功能菜单加载逻辑 /com.primeton.cap.portal.runtime.uiservice.menuruntimemgr.getmenudata.biz.ext /org.gocom.components.coframe.auth.loginmanager.getmenudata.biz.ext /org.gocom.components.coframe.auth.loginmanager.getmenudata.biz.ext?appcode=e cm 集成 widget 使用场景 用户需要将已有应用的页面集成到 Portal 中, 作为 Widget 展现 前提条件 已安装 Portal 服务器, 并且能够正常运行 待集成的应用已经完成单点登录集成, 可通过 Portal 进行代理登录 已按照集成应用章节的步骤集成了 Widget 所在的应用 对操作用户配置了 Widget 管理权限 权限说明 只有对 widget 管理有权限的用户才可注册 widget 该权限通过初始化方式授权给 sysadmin 用户, 可根据需要进行更改 更改方式如下 : 以 sysadmin 用户登录到 Portal, 在 Portal 应用的功能菜单中选择 授权管理, 进入授权界面, 为需要的角色进行授权 需要授权的功能为 Widget 管理, 授权管理界面如下图所示 : 第 28 页共 65 页
29 集成步骤 步骤 1: 准备 widget 如内容集成原理所述, 内容集成是通过 widget 展现的, 在 Portal 主页上显示的 widget 可以从已有系统中获取, 也可以根据需要进行定制开发 这些 widget 一般 对应到 jsp 页面, 或者一个有效的 url 地址即可 获取 widget 对应的 url 步骤 2: 通过 widget 注册进行集成 如果已知 widget 对应的 URL, 可通过本步骤进行集成 以系统管理员身份登录到 Portal, 在 Portal 的功能菜单中, 选择 Widget 管理 功能, 进入 Widget 管理界面, 注册 Widget Widget 注册内容说明请参考 Widget 注册规范章节内容 步骤 3: 通过将功能发布为 widget 进行集成 如果不知道 widget 对应的 URL, 可通过本步骤进行集成 前提是已经对需要集成的应用完成了应用菜单的集成 以系统管理员身份登录到 Portal, 在系统菜单上选择需要集成 widget 对应的应用, 在功能菜单中选择需要集成的 widget 对应的功能菜单, 通过鼠标右键 发布为 widget 即可将所选功能发布为 widget 发布 widget 功能入口如下图所示 : 第 29 页共 65 页
30 步骤 4: widget 授权 新注册的 widget 默认为共享模式, 任何人都可访问, 如果需要控制 widget 访问权 限, 则可通过 widget 管理功能中的 共享 对 widget 进行授权 步骤 5: 在主题页中添加 widget widget 注册后, 即可通过添加 widget 功能, 将 widget 添加到主题页中 第 30 页共 65 页
31 4.4.4 配置系统主题 使用场景 在搭建企业门户时, 通常需要设置一些系统主题页, 作为企业门户默认的主题页, 让企业用户登录门户后即可看到, 如 : 企业新闻 通知通告 待办任务等 ; 同时, 企业还可以为不同的用户设置不同权限的系统主题, 不同用户登录后可以看到不同的内容 前提条件 已安装 Portal 服务器, 并且能够正常运行 已经集成了一些 widget 为操作用户配置了系统主题管理权限 权限说明 只有对系统主题管理有权限的用户才可配置系统主题 该权限通过初始化方式授权给 sysadmin 用户, 可根据需要进行更改 更改方式如下 : 以 sysadmin 用户登录到 Portal, 在 Portal 应用的功能菜单中选择 授权管理, 进入授权界面, 为需要的角色进行授权 需要授权的功能为系统主题管理, 授权管理界面如下图所示 : 配置步骤 原有风格 (template3/template4) 步骤 1: 添加系统主题 以系统管理员身份登录到 Portal, 在导航栏中点击系统主题配置按钮, 选择 添加 系统主题 菜单, 输入需要添加的系统主题名称 第 31 页共 65 页
32 步骤 2: 在系统主题上添加 Widget 在导航栏中点击添加 widget 按钮, 从 widget 列表中选择需要添加到系统主题上的 widget 即可 步骤 3: 调整布局 如果需要选择不同的布局模板, 可通过 编辑系统主题 菜单进入系统主题维护界面, 选择对应的系统主题后, 修改布局配置即可 如果需要调整 widget 在主题页上的布局, 可直接拖拽 widget 放置在需要的位置 如果需要调整布局中每列宽度, 将鼠标放置在 2 个 widget 的标题中间拖拽即可 步骤 4: 锁定系统主题 当企业希望设置一些默认的主题页, 让企业用户登录门户后即可看到, 同时又不希 望用户对系统主题进行调整 ( 如 : 在系统主题上添加 widget, 改变系统主题布局 等 ), 可以在新增主题或编辑主题时将系统主题设置为锁定 步骤 5: 系统主题授权 当企业希望为不同的业务部门或不同的人员设置系统主题, 只有用户有权限时才可访问, 则可为系统主题进行授权 新添加的系统主题默认为共享模式, 任何人都可访问, 如果需要控制系统主题访问权限, 则可通过 widget 管理功能中的 共享 对 widget 进行授权 新风格 (template1/template2) 步骤 1: 添加系统主题 以系统管理员身份登录到 Portal, 在右上角中点击 设置 ( 统主题管理 菜单, 进入系统维护页面, 点击左侧 添加 ( 要添加的系统主题名称 ) 按钮, 选择 系 ) 按钮, 输入需 步骤 2: 在系统主题上添加 Widget 在系统主题编辑页面点击 添加更多小窗口 链接, 从 widget 列表中选择需要添加到系统主题上的 widget 即可 步骤 3: 调整布局如果需要选择不同的布局模板, 可在系统主题维护界面, 选择对应的系统主题后, 修改布局配置即可 如果需要调整 widget 在主题页上的布局, 可在系统主题编辑界面, 点击 保存 之后, 再点击 预览调整 按钮, 在弹出的预览页面中, 可直接拖拽 widget 放置在需要的位置 如果需要调整布局中每列宽度, 将鼠标放置在 2 个 widget 的标题中间拖拽即可 步骤 4: 锁定系统主题 第 32 页共 65 页
33 当企业希望设置一些默认的主题页, 让企业用户登录门户后即可看到, 同时又不希望用户对系统主题进行调整 ( 如 : 在系统主题上添加 widget, 改变系统主题布局等 ), 可以在新增主题或编辑主题时将系统主题设置为锁定 步骤 5: 系统主题授权当企业希望为不同的业务部门或不同的人员设置系统主题, 只有用户有权限时才可访问, 则在系统主题编辑页面点击 共享 可为系统主题进行授权 新添加的系统主题默认为共享模式, 任何人都可访问, 如果需要控制系统主题访问权限, 则可通过 widget 管理功能中的 共享 对 widget 进行授权 个性化配置 使用场景 用户希望在企业门户中增加一些自定义的主题页, 放置自己关心的一些内容 前提条件 已安装 Portal 服务器, 并且能够正常运行 已经集成了一些 widget 配置说明 原有风格 (template3/template4) 步骤 1: 添加用户主题 用户登录到 Portal, 在导航栏中点击用户主题配置按钮, 选择 添加主题 菜单, 输入需要添加的主题名称 步骤 2: 在用户主题上添加 Widget 在导航栏中点击添加 widget 按钮, 从 widget 列表中选择需要添加到主题上的 widget 即可 步骤 3: 调整布局 如果需要选择不同的布局模板, 可通过 编辑主题 菜单进入用户主题维护界面, 选择对应的用户主题后, 修改布局配置即可 如果需要调整 widget 在主题页上的布局, 可直接拖拽 widget 放置在需要的位置 如果需要调整布局中每列宽度, 将鼠标放置在 2 个 widget 的标题中间拖拽即可 步骤 4: 锁定用户主题 第 33 页共 65 页
34 如果希望只对配置的主题进行浏览, 屏蔽一些改变主题配置的操作, 如 : 添加 widget, 改变主题布局等, 可以在编辑主题中将主题设置为锁定 步骤 5: 重置主页 在用户个性化配置之前, 用户登录门户时, 显示的主题页和 Widget 都是系统配置的, 一旦用户进行了个性化的配置, 系统会自动将未锁定的系统主题复制给用户, 作为用户个性化的主题, 如果用户希望主页恢复为系统默认配置, 就需要通过重置主页功能 步骤 6: 自定义快捷菜单用户希望将经常使用的功能作为快捷菜单, 能够快速定位到这些功能 Portal 提供了快捷菜单 Widget, 允许用户定义自己的快捷菜单 定义方式 : 在功能菜单中选择需要定义为快捷菜单的功能, 通过鼠标右键 添加为快捷菜单 即可将所选功能定义为快捷菜单 定义后, 会在快捷菜单中显示添加的快捷菜单 步骤 7: 换肤 用户希望将自己的 Portal 主页皮肤设置为自己喜欢的皮肤风格 Portal 提供了换肤功能, 允许用户选择自己喜欢的皮肤 配置方式 : 在 Portal 主页的 top-bar 中选择 换肤, 在弹出的页面中选择自己喜欢的皮肤即可 新风格 (template3/template4) 步骤 1: 添加用户主题 用户登录到 Portal, 在右上角点击 设置 ( ) 按钮, 进入个人主题维护页面 ( 若有管理员权限需要选择 个人主题管理 ), 点击 添加 ( ) 按钮, 输入需要添加的主题名称 步骤 2: 在用户主题上添加 Widget 在导航栏中点击 添加 widget( 加到主题上的 widget 即可 ) 按钮, 从 widget 选择面板中选择需要添 步骤 3: 调整布局 如果需要选择不同的布局模板, 进入用户主题维护界面, 选择对应的用户主题后, 修改布局配置即可 如果需要调整 widget 在主题页上的布局, 可直接拖拽 widget 放置在需要的位置 如果需要调整布局中每列宽度, 将鼠标放置在 2 个 widget 的标题中间拖拽即可 步骤 4: 锁定用户主题 如果希望只对配置的主题进行浏览, 屏蔽一些改变主题配置的操作, 如 : 添加 widget, 改变主题布局等, 可以在个人主题维护页面中将选中主题设置为锁定 步骤 5: 重置主页 第 34 页共 65 页
35 在用户个性化配置之前, 用户登录门户时, 显示的主题页和 Widget 都是系统配置的, 一旦用户进行了个性化的配置, 系统会自动将未锁定的系统主题复制给用户, 作为用户个性化的主题, 如果用户希望主页恢复为系统默认配置, 就需要通过重置主页功能 ( ) 步骤 6: 自定义快捷菜单 用户希望将经常使用的功能作为快捷菜单, 能够快速定位到这些功能 Portal 提供了快捷菜单 Widget, 允许用户定义自己的快捷菜单 定义方式 : 在功能菜单中选择需要定义为快捷菜单的功能, 通过鼠标右键 添加为快捷菜单 即可将所选功能定义为快捷菜单 定义后, 会在快捷菜单中显示添加的快捷菜单 步骤 7: 换肤 用户希望将自己的 Portal 主页皮肤设置为自己喜欢的皮肤风格 Portal 提供了换肤功能, 允许用户选择自己喜欢的皮肤 配置方式 : 在 Portal 主页的右上角选择 换肤 ( ), 在弹出的页面中选择自己喜欢的风格和皮肤即可 集成符合 JSR168 规范的 portlet 使用场景 用户已经开发了一些符合 JSR168 规范的 portlet, 希望把这些 portlet 集成到 Portal 中, 通过 widget 展现在 Portal 主页中 前提条件 已安装 Portal 服务器, 并且部署了 portlet 容器需要的 jar 已开发了符合 JSR168 规范的 portlet,portlet 所在应用与 portal 应用为同一个 JVM, 并且在对应的应用服务器中部署了 portlet 容器需要的 jar, 集成应用的 portlet 能够正常注册到应用服务器中 注册 Portlet 以系统管理员身份登录到 Portal, 在 Portal 的功能菜单中, 选择 Widget 管理 功能, 进入 Widget 管理界面, 在 Widget 注册界面, 选择 widget 类型为 portlet 注册界面如下图所示 : 第 35 页共 65 页
36 注册配置说明如下 : 配置参数 配置说明 配置规范 Widget 类型 注册 widget 的类型 portlet: 表示 widget 对应了一个符合 JSR168 规范的 portlet, 使用系统内置的 portlet 容器 Portlet 系统自动加载所有注 下拉信息展现为 :portlet 所属应用 portletname 册到应用服务器上的 portlet portletdisplayname Widget 编号 注册的 widget 编号, 具有全局唯一性 字符串, 必须以字母开头, 可包含字母 数字和部分特殊字符 (-_.), 具有全局唯一性 Widget 名称 widget 的名称 字符串, 必须以字母或中文或数字开头, 可包含字母 数字 中文和部分特殊字符 (-_.) Widget 分类当需要为 Widget 进行业务分类时使用 可根据需要通过业务字典配置 widget 分类 代理应用代理 portlet 请求的应用 必须选择 portal 所在应用 Widget 标题 widget 加载后显示在 字符串, 无特别约束 窗口上的标题 Widget 高度 widget 窗口的高度 整数, 单位为像素 为空时高度自适应 Widget 图标 widget 加载后显示在 选择系统提供的 widget 图标, 可扩展, 参见扩展 widget 图标章节内容 窗口上的图标 Widget 描述 widget 的描述 字符串, 无特别约束 实现 widget 交互 使用场景 在进行界面集成时, 用户希望不同小窗口之间可以进行交互, 以支持信息交互 界面联动的需求 集成的 widget 允许通过修改代码的方式实现 以下以点击计算输入 widget 和计算结果 widget 为例, 说明 widget 交互集成过程 需求描述 : 在计算输入 widget 中点击按键, 在计算结果 widget 中显示点击的内容 ( 如果在计算输入 widget 中点击了 =, 则在计算结果中输出计算结果 ) 第 36 页共 65 页
37 前提条件 已安装 Portal 服务器, 并且能够正常运行 已准备好需要集成的 widget 需要集成的 widget 所在的应用全部通过 Apache 代理进行了配置, 与 Portal 所在应用在同域下 相关 API 说明 Portal 提供了事件交互 API, 在集成过程中可通过调用事件交互 API 实现 widget 交互 /** 触发事件 e 事件名称 data 触发事件所传递的默认事件参数 recipients 事件接收者, 可以是数组, 可以是, 分割的字符串 undefined */ fireevent:function(e,data,recipients){} /** 添加事件监听 e 事件名称 fn 处理事件的回调方法 sc 处理事件的回调方法的作用域, 默认为 this data 添加事件监听时传递的处理参数 recipients 事件接收者, 可以是数组, 可以是, 分割的字符串 undefined */ addeventlistener:function(e,fn,sc,data,recipients){} 第 37 页共 65 页
38 /** addeventlistener 方法的简写 */ on:function(){} 事件匹配原则说明 事件名称匹配 : 触发事件和监听事件的匹配原则默认按照事件名称匹配 事件名称 + 事件接收者匹配 : 如果希望只有某些固定的接收者才接收该事件, 则可以通过传递 recipients 参数, 为触发事件和监听事件指定相同的事件接收者 如果指定了事件接收者, 触发事件和监听事件的匹配原则变为 : 除了需要按照事件名称匹配之外, 还需要按照指定的事件接收者的名称进行匹配 集成方案 1( 修改 widget 源码 ) 使用本方案的前提条件 : 集成的 widget 允许通过修改代码的方式实现 步骤 1: 在需要发出事件的 widget 中添加触发事件 本例中, 计算输入 widget 需要在点击时发出事件, 因此, 需要在计算输入 widget 的界面源码中增加触发事件, 代码示例如下 : <script type="text/javascript"> function inputnum(val){ WidgetContext.fire('docalculate',{ val:val }); } </script> 其中,inputNum 方法是计算输入 widget 中已有的点击各按钮的触发事件, 如 : <input onclick="inputnum(this.value)" type="button" value="7"/> docalculate 为触发事件的名称 步骤 2: 在需要接收事件的 widget 中添加监听事件 本例中, 计算结果 widget 需要监听计算输入控件发出的事件, 在输入框中显示点击的内容 因此, 需要在计算结果 widget 的界面源码中增加事件监听, 代码示例如下 : <script type="text/javascript"> WidgetContext.on('docalculate',function(e){ var val=e.eventdata.val; inputnum(val); 第 38 页共 65 页
39 }); </script> 其中, 监听事件的名称 docalculate 与计算输入 widget 中触发事件的名称相同, 监听事件的处理方法 inputnum 是计算结果 widget 在接收到事件后执行的处理, 代码示例如下 : function inputnum(val){ switch(val){ case 'CE': expr=[]; break; default: if(curr=='='){ if(isnan(val)){ expr.push(val); }else{ expr=[val]; } }else{ expr.push(val); } break; } 步骤 3: 注册 widget 参考集成 widget 章节内容, 将 widget 注册到 Portal 中 在主题页上添加计算输入 widget 和计算输出 widget 后, 即可看到交互效果 集成方案 2( 注入 js) 如果在集成过程中希望在不修改集成 widget 源码的前提下实现交互, 则可使用本方案 步骤 1: 开发实现触发事件的代码 通过一个新的 js 文件, 开发需要发出事件的脚本 如 : 针对计算输入 widget, 开发 calcresouce.js 示例代码如下 : <script type="text/javascript"> function inputnum(val){ WidgetContext.fire('docalculate',{ val:val }); } </script> 第 39 页共 65 页
40 其中,inputNum 方法是计算输入 widget 中已有的点击各按钮的触发事件, docalculate 为触发事件的名称 步骤 2: 开发实现事件监听的代码 通过一个新的 js 文件, 开发需要监听事件的脚本 如 : 针对计算结果 widget, 开发 calcresult.js 示例代码如下 : <script type="text/javascript"> WidgetContext.on('docalculate',function(e){ var val=e.eventdata.val; inputnum(val); }); </script> 其中, 监听事件的名称 docalculate 与计算输入 widget 触发事件的名称相同, 监听事件的处理方法 inputnum 是计算结果 widget 在接收到事件后执行的处理, 可调用计算结果 widget 中已有方法或开发新的处理方法 步骤 3: 部署新开发的交互代码 将新开发的用于交互的代码部署在 widget 各自的所属应用下, 或者部署在 Portal 应用下, 如 : 可将本例中的 calcresouce.js 部署在计算输入 widget 所在的应用下, 将 calcresult.js 部署在计算结果 widget 所在的应用下 步骤 4: 注册 widget 参考集成 widget 章节内容, 将 widget 注册到 Portal 中 注册时, 在计算输入 widget 的 引用的 JS 配置中, 添加引用的触发事件的 JS 文件, 如果 js 部署在 widget 所在应用下, 则配置为绝对路径, 如 :/js/calcresouce.js; 如果 js 部署在 Portal 应用下, 则配置为完整路径, 如 : 注册时, 在计算输出 widget 的 引用的 JS 配置中, 添加引用的监听事件的 JS 文件, 如果 js 部署在 widget 所在应用下, 则配置为绝对路径, 如 :/js/calcresult.js; 如果 js 部署在 Portal 应用下, 则配置为完整路径, 如 : 在主题页上添加计算输入 widget 和计算输出 widget 后, 即可看到交互效果 第 40 页共 65 页
41 5 扩展开发 5.1 定制不同风格 Portal 主页 使用场景 在搭建企业门户时, 用户常常希望定制自己的企业门户主页, 如 : 包含企业的 logo, 主页风格改为企业常用的风格等, 因此会涉及到 Portal 主页的定制 Portal 主页换肤原理 Portal 通过动态的引用不同目录中相同名称的一组文件的方式来实现风格皮肤切换的功能, 可通过配置多套风格和皮肤实现 Portal 主页风格和颜色等的改变 各目录的文件中定义相同的文件名, 但每个文件的内容可以是各异的 风格皮肤目录结构说明 Portal 可使用的风格皮肤必须存放在 portal 所在应用的 /skins 目录下, 首先区分不同租户 ( 默认使用 default 租户 ), 在租户目录下每一类风格作为一个目录存放, 该目录的名称 ( 如 : template1, template2, template3, ) 为该类风格的 id 在每一类风格的目录下, 可存放针对该风格的不同皮肤 ( 如 :skin1, skin2, skin3, ) 目录结构如下: 第 41 页共 65 页
42 租户目录 风格目录 皮肤目录 皮肤样式文件 风格主页 前提条件 已安装了 EOS Platform7 开发版, 并下载了 Portal 的开源项目 portal-integration-src.zip 扩展开发步骤 步骤 1: 导入开源项目 将 Portal 的开源项目 org.gocom.portal.integration 导入到 EOS Studio 中 步骤 2: 定制 Portal 主页风格 Portal 系统内置的默认风格主页是开源项目 org.gocom.portal.integration 的 WEB 下的 skins/default/template1/portal.jsp, 苹果风格主页是 skins/default/template2/portal.jsp 经典风格主页是 skins/default/template3/portal.jsp, 第 42 页共 65 页
43 带 Tab 页的经典风格主页为 skins/default/template4/portal.jsp, 可根据项目需要在已有 portal 主页基础上进行改造和定制 也可通过扩展, 增加其他风格主页, 只要复制项目 WEB 下 /skins/default/{ 风格 } 如 : /skins/default/template1 目录下的所有文件至同级目录下 ( 如 : /skins/default/template5) 下并修改即可 如需要修改 portal 主页上的背景图片 logo 等, 可以通过修改开源项目 org.gocom.portal.integration 的 WEB 下的 /skins/default/{ 具体风格 }/{ 具体皮肤 }/images 目录下的图片来实现 如 : 替换 /skins/default/template1/skin1/images 下的 top_bg_c.png, top_bg_l.png, top_bg_r.png 即可替换背景图片 替换 /skins/default/template1/skin1/images 下的 logo.png 即可替换 logo 注意 :portal 主页对应的 jsp 名字必须为 portal.jsp, 必须存放在 skins/default/{j 腿风格 } 目录下 步骤 3: 定制 Portal 主页皮肤 Portal 支持扩展不同风格的皮肤, 目前默认的皮肤为 skin1, 可提供换肤功能进行可视化配置 在实际项目中, 用户常常希望提供带有企业自身风格的主页, 可通过修改开源项目 org.gocom.portal.integration 的 WEB 下的 /skins/default/template1/skin1 下的整套皮肤来满足项目的特殊需求 也可通过扩展, 增加其它风格的皮肤, 只要复制开源项目 org.gocom.portal.integration 的 WEB 下的 /skins/default/template1/skin1 的完整目录结构和文件至 /skins/default/ 目录下 ( 如 :/skins/default/template1/skin3), 进行修改即可 步骤 4: 设计皮肤效果缩略图 按照 portal 主页效果图设计风格和皮肤效果缩略图, 风格缩略图和皮肤缩略图尺寸 要求 :96*96 像素, 文件存放在 skins/default/skinconfig/images 目录下 步骤 5: 修改 js 配置文件 完成了步骤 2 和步骤 3 之后, 我们如何让系统知道我们扩展之后的内容呢 打开 js 文件 skins/default/skinconfig/skins.js 代码如下 (function(){ var skins={ 'template1':{ icon:'window.jpg', name:' 默认风格 ', skins:[{ id:'skin1', icon:'skin1.jpg', name:' 默认经典 ' },{ 对应风格目录的名称风格缩略图对应风格下皮肤目录的名称 第 43 页共 65 页
44 } id:'skin2', icon:'skin2.jpg', name:' 绿色 ' }] },'template2':{ icon:'apple.jpg', name:' 苹果风格 ', skins:[{ id:'skin1', icon:'skin1.jpg', name:' 默认经典 ' },{ id:'skin2', icon:'skin2.jpg', name:' 绿色 ' }] } 皮肤缩略图 步骤 6: 部署自定义 Portal 主页的文件 将开源项目 org.gocom.portal.integration 导出 ecd, 通过 Governor 部署到 Portal 应用下即可 步骤 7: 让自定义的 Portal 主页生效 可通过初始化 PORTAL_SYSTEM_CONFIG 表的方式让自定义的 Portal 主页生效 初始化脚本如下 : DELETE FROM PORTAL_SYSTEM_CONFIG; INSERT INTO PORTAL_SYSTEM_CONFIG (TENANT_ID, DEFAULT_SKIN, DEFAULT_TEMPLATE, DEFAULT_LAYOUT, TEMPLATE, SKIN) VALUES ('default', 'skin1', 'template5', 'column3', 'template5', 'skin2'); 其中,template5 为默认的风格,skin1 为默认的皮肤,skin2 为主页当前使用的皮肤 widget 内容或应用系统内容换肤 在 portal 主页上使用换肤功能后, 用户希望 widget 中显示的内容或者链接的应用系统内容也能够随之一起改变, 风格与 portal 主页风格保持一致 针对此类换肤需求, 系统通过传递皮肤参数的方式支持各应用系统换肤 对于 portal 应用, 皮肤编号可从 Session 中获得 对于非 portal 应用, 皮肤编号可从 Request 中通过参数 portalskin 获取, 由各应用根据皮肤参数实现换肤功能 第 44 页共 65 页
45 5.2 扩展布局模板 使用场景 用户希望 Portal 主题页上的各个 widget 能够按照希望的布局方式排列, 则可通过扩展布局模板的方式定制用户需要的布局模板 前提条件 已安装了 EOS Platform7 开发版, 并下载了 Portal 的开源项目 扩展开发步骤 步骤 1: 导入开源项目 将 Portal 的开源项目 org.gocom.portal.integration 导入到 EOS Studio 中 步骤 2: 设计布局模板图片 需要为每一个扩展的布局模板设计选中和未选中 2 种状态的图片, 图片文件名称需 要与扩展配置中的图片名称相同, 图片大小为 45*34 像素, 图片存放位置为 : skins/default/config/images 目录下 步骤 3: 扩展布局模板 布局模板文件为 :skins/default/config/layout.js, 可根据需要在文件中扩展布局 如 : 扩展如图的布局模板 : 需要在 layout.js 中增加的代码如下 ( 黄色背景内容 ): Portal.layout.add({ key : 'column2', icon : 'column2.gif, iconselected : 'column2selected.gif, }, { key : 'column3', icon : 'column3.gif, iconselected : 'column3selected.gif, }, { key : 'layout01', 第 45 页共 65 页
46 }) icon : 'layout01.gif', iconselected : 'layout01selected.gif', template : [{ layout : 'row', items : [{ layout : 'column', items : [{ width:'50%' }, { width:'50%' } ] }, { } ] }] 注意 : 行布局 (layout: row ) 时, 请不要设置宽度 (width); 列布局 (layout: column ) 时, 需要设置每列的宽度 ( 占所在子容器的宽度 ), 每个子容器的总宽度均要保证为 100% 步骤 4: 部署扩展后的布局模板 将扩展后的布局模板文件 layout.js 部署到 Portal 应用的 skins/default/config/ 目录下, 替换原有文件即可 将扩展的布局模板的图片文件部署到 Portal 应用的 skins/default/config/images 目录下 5.3 定制 Widget 首选项 使用场景 用户希望 Portal 主题页上的 widget 能够提供首选项配置, 按照需要配置首选项, 如 : 天气预报可配置 城市 作为首选项 首选项配置页面说明 Widget 首选项页面包括以下内容, 如图所示 : 第 46 页共 65 页
47 1) Widget 视图的通用属性表单该区域, 用户设置 Widget 视图的 2 个默认属性, 标题 高度 2) Widge 的业务配置属性区域该区域, 使用一个 iframe 加载新增 ( 或编辑 )Widget 时设置的首选项 URL 地址 3) 按钮工具条区域该区域提供默认的保存和取消按钮 定制开发步骤 步骤 1: 开发首选项配置页面 根据 Widget 展现内容需要开发首选项配置页面, 定义首选项配置内容 该页面需 要符合以下规范 : 页面不需要保存取消按钮, 必须实现步骤 2 和步骤 3 步骤 2: 在首选项配置页面实现 setperferencedata 方法 在点击 Widget 首选项按钮后,Widget 的视图跳转至首选项框架页面, 业务属性配置区域的 iframe 加载配置的首选项页面完成后, 需要将已有的首选项配置数据初始化设置进表单中 系统会判断首选项页面是否包含 setperferencedata 的 JS 全局方法, 如果包含, 则调用该方法, 由首选项页面自身完成数据的初始化填充, 该方法有 1 个参数, 为平铺展开后的个性化首选项数据对象 第 47 页共 65 页
48 setperferencedata 方法说明如下 : 参数 : data object 要填充的初始化数据 返回值 : 无 说明 : 该方法用于给一个表单对象的录入项初始化填充数据 步骤 3: 在首选项配置页面实现 getperferencedata 方法 在首选项配置页面点击 保存 按钮后, 框架将获取业务属性配置区域 iframe 中的表单数据, 并完成合并持久化的处理 系统会判断首选项页面是否包含 getperferencedata 的 JS 全局方法, 如果包含, 则调用该方法, 获取方法的返回值, 作为持久化保存的业务首选项数据 ; 否则框架将会获取 PerferenceHelper.getEditorForm 方法所获得的表单的数据 getperferencedata 方法说明如下 : 参数 : 无 返回值 : 首选项 json 数据 说明 : 该方法用户获取当前 widget 填写的 json 数据 步骤 4: 配置首选项 将首选项配置页面部署到 Widget 所在应用下或者 Portal 应用下 进入 Widget 管 理界面, 在 Widget 配置中添加首选项配置, 输入首选项配置页面的 URL 第 48 页共 65 页
49 5.3.4 首选项示例 pageencoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " include file = "/common_template/common.jsp" %> <html> <!-- - Author(s): zmm - Date: :28:23 - Description: --> <head> <title> 首选项设置 </title> <style type="text/css" rel="stylesheet"> body{ font-size:12px; padding:0px; margin:0px 0px; }.form-table{ 第 49 页共 65 页
50 width:100%; border:solid 1px #ccc; border-collapse:collapse; }.form-table td{ border:solid 1px #ccc; padding:2px; }.form-table th{ border:solid 1px #ccc; font-weight:normal; text-align:left; padding:2px; font-size:12px; width:85px; } </style> </head> <body> <div id="perference_viewdataform"> <table class="form-table" > <tr><th> 显示行数 :</th><td><input class="nui-textbox" required="true" requirederrortext=" 必填 1-20" vtype="range:1,20" width="153" rangeerrortext=" 数字必须在 1 到 20 之间 " value="10" name="data.contentsnum"/> </td></tr> <tr><th> 信息打开方式 :</th><td><input class="nui-combobox" url="openmodes.txt" datafield="openmodes" name="data.contentopenmode" value="_blank" width="153" /></td></tr> </table> </div> </body> <script> nui.parse(); var form=new nui.form("perference_viewdataform"); function getperferencedata(){ form.validate(); if(form.isvalid()){ } return form.getdata(); 第 50 页共 65 页
51 } return null; function setperferencedata(data){ form.setdata(data,false,false); } </script> </html> 5.4 扩展 Portal 主页检索功能 使用场景 用户希望扩展 Portal 主页上的检索功能, 除了可进行全文检索之外, 还可检索流程 功能等 前提条件 已安装了 EOS Platform7 开发版, 并下载了 Portal 的开源项目 扩展开发步骤 步骤 1: 开发检索功能 根据需要开发流程 功能等检索功能, 通过 URL 请求并传递检索参数即可呈现检 索结果 如 : 基于 coframe 开发功能检索, 提供 /coframe/search/functionsearch.jsp, 通过传递 keywords 参数检索功能 步骤 2: 部署定制的检索功能 将定制的检索功能部署到对应的应用下 步骤 3: 修改检索 js 打开 Portal 应用下 /skins/default/config/searchs.js, 配置扩展的检索功能 代码示例如下 : var searchs={ ' 文档 ':{ url:'/docsearch/search/search4portal.jsp', // 绝对路径代表当前应用的 url, 必须以 / 开头 ; 也可配置为完整路径 parmname:'keywords' }, ' 功能 ':{ 第 51 页共 65 页
52 url:' // 绝对路径代表当前应用的 url, 必须以 / 开头 ; 也可配置为完整路径 parmname:'functionname' 配置为功能检索 URL, 以输入的检 }, 索条件作为传入参数, 参数名为 ' 百度 ':{ functionname url:' parmname:'wd' } } 步骤 4: 使用检索功能 登录到 Portal 主页, 在检索框中下拉选择 功能, 输入功能名称, 即可看到结 果 5.5 扩展 widget 图标 使用场景 项目中如果希望扩展 widget 小窗口的图标, 可参照以下步骤 前提条件 已安装了 EOS Platform7 开发版, 并下载了 Portal 的开源项目 扩展开发步骤 步骤 1: 导入开源项目将 Portal 的开源项目 org.gocom.cap.portal 导入到 EOS Studio 中 步骤 2: 设计 widget 图标设计的图片大小为 16*16 像素 步骤 3: 修改 widgeticon.css 文件修改开源项目 org.gocom.cap.portal 的 WEB 下 /template/default/config/widgeticon.css 文件, 增加扩展的 widget 图标 如 : 扩展图标文件名为 sample.gif, 修改 widgeticon.css 文件如下 ( 黄色背景内容 ):.default-icon-cls { background-image: url("images/widget.png"); }.custom-icon-cls { background-image: url("images/config.gif"); } 第 52 页共 65 页
53 .sample-icon-cls { background-image: url("images/sample.gif"); } 步骤 4: 修改 widgeticon.js 文件修改开源项目 org.gocom.cap.portal 的 WEB/template/default/config/widgetIcon.js 文件, 增加对扩展的 widget 图标的引用, 如下 ( 黄色背景内容 ): var PuiExtend = PuiExtend {}; PuiExtend.cls = { 'default': 'default-icon-cls', 'custom': 'custom-icon-cls', 'sample': 'sample-icon-cls' }; 步骤 5: 部署扩展的 widget 图标将扩展的 widget 图标部署到 portal 所在应用的 /template/default/config/images 目录下 将修改后的 widgeticon.css 和 widgeticon.js 文件部署到 portal 所在应用的 /template/default/config 目录下 步骤 6: 选用扩展的 widget 图标在 widget 注册功能中, 可在 widget 图标配置项中, 通过下拉选择扩展的 widget 图标 图标将会在 widget 小窗口上显示出来 6 对外 API 说明 6.1 事件交互相关 API 触发事件 类名 :WidgetContext /** *@desc 触发事件 *@param e 事件名称 *@param data 触发事件所传递的默认事件参数 *@param recipients 事件接收者, 可以是数组, 可以是, 分割的字符串 *@return undefined */ fireevent:function(e,data,recipients){} 第 53 页共 65 页
54 6.1.2 监听事件 类名 :WidgetContext /** 添加事件监听 e 事件名称 fn 处理事件的回调方法 sc 处理事件的回调方法的作用域, 默认为 this data 添加事件监听时传递的处理参数 recipients 事件接收者, 可以是数组, 可以是, 分割的字符串 undefined */ addeventlistener:function(e,fn,sc,data,recipients){} /** addeventlistener 方法的简写 */ on:function(){} 6.2 Portal 中内置的事件 Portal 中内置了一些事件, 在 Portal 集成过程中, 可根据需要通过 WidgetContext.fireEvent(e,data) 触发这些事件 为当前主题添加 widget 事件名称 :portal_addwidget 为当前主题添加 WidgetContext.fire('portal_addwidget',{ id:'baidu_search' //uiservice 的 ID }) */ WidgetContext.on('portal_addwidget',function(e){ 重新加载主题 事件名称 :portal_loadthemes /** 第 54 页共 65 页
55 @desc Portal WidgetContext.fire('portal_loadthemes',{ themetype:'1' // 加载主题类型,1 表示系统主题,0 表示用户主题 autodis:true 是否自动展示第一条主题, 默认自动展示 }) */ 隐藏当前显示的窗体 事件名称 :portal_hidewin portal 隐藏当前显示的窗体, WidgetContext.fire('portal_hidewin',{ msg:' 保存成功 ' // 需要提示的消息, 为空则不显示 }) */ 转到指定的主题页 事件名称 :portal_gototheme WidgetContext.fire('portal_gototheme,{ themeid:'sys_1234', // 主题 ID, 为空则转到当前展示的主题 themetype:'1'// 主题类型, 默认为 0,1 表示系统主题,0 表示用户主题 }) */ 内容区转到指定的 url 事件名称 :portal_gotourl 转到 WidgetContext.fire('portal_gotourl',{ url:'abc.flow', // 转到的 URL 地址, 必须为完整路径 linkpath:'default 应用, 应用管理 '// 导航信息 }) */ 第 55 页共 65 页
56 6.2.6 在弹出窗口中打开指定的 url 事件名称 :portal_openwindow WidgetContext.fire('portal_openwindow',{ title:'window',// 窗体标题 url:' 弹出窗体中需要打开的 URL 地址, 为保证地址的正确加载, 请使用完整路径 height:400,// 弹出窗体的高度 width:600// 弹出窗体的宽度 }); */ 刷新主题页 事件名称 :portal_refreshtheme 刷新当前的 WidgetContext.fire('portal_refreshtheme')// 不传任何参数的触发, 刷新当前的主题 传主题 ID 的触发方式, 刷新指定的主题 WidgetContext.fire('portal_refreshtheme',{ themeid:'sys_1234', // 主题 ID, 为空则转到当前展示的主题 themetype:'1'// 主题类型, 默认为 0,1 表示系统主题,0 表示用户主题 }) */ 6.3 常用 API 打开风格切换窗口 类名 :portalutil /** 在弹出窗口中打开风格切换页面 */ showskinswin:function(){} 第 56 页共 65 页
57 6.3.2 打开重置主题窗口 类名 :portalutil /** 在弹出窗口中打开重置主题页面 */ showresetthemewin:function(){} 打开设置主题窗口 类名 :portalutil /** 在弹出窗口中打开页面 */ choosethemewin:function(){} 打开 Widget 添加窗口 类名 :portalutil /** 在弹出窗口中打开页面 *themetype 主题类型 (viewstyle 为 1 时传 ) *themeid 主题 ID(viewStyle 为 1 时传 ) *stylemodel 显示方式 (0 列表,1 平铺, 默认为 1) */ choosethemewin:function(themeid,themetype,stylemodel){} 系统退出 类名 :portalutil /** *@desc 通用退出 */ logout:function(){} 第 57 页共 65 页
58 6.3.6 在内容区打开页面 类名 :portalutil /** 打开指定 url url 需要打开的 URL 地址, 必须为完整路径 linkpath 导航信息, 以, 号分割的字符串 null */ openurl:function(url,linkpath){} 创建弹出窗口对象 类名 :portalutil /** opt { title:'window',// 窗体标题 url:' 弹出窗体中需要打开的 URL 地址, 为保证地址的正确加载, 请使用完整路径 height:400,// 弹出窗体的高度 width:600// 弹出窗体的宽度 } */ createwindow:function(opt){} 7 性能调优 Portal 系统上线后, 因为企业员工都会通过门户进行访问,Portal 系统可能面临大并发访问量和 网络流量的压力 本章节就从性能调优方面提供一些参考方案 7.1 针对高网络流量的性能优化 Portal 作为企业门户, 在高并发用户的情况下, 也会面临网络流量的压力 因此, 对于网络流量 的优化也非常重要 第 58 页共 65 页
59 7.1.1 网络流量计算方式 Portal 总网络流量 ( 无缓存 ) = Portal 应用单点网络流量 并发用户数 / 可接受的响应时间例如 :Portal 应用单点网络流量为 512K, 并发用户数 1000 人, 可接受的响应时间为 2s, 则 Portal 在无缓存的情况下的总网络流量为 512K*1000/2s=250M/s 在浏览器缓存的情况下, 实际的网络流量 = Portal 应用单点实际网络流量 并发用户数 / 可接受的响应时间, 其中单点的实际网络流量为扣除了缓存内容之后的实际网络资源下载量 网络流量优化方案 根据网络流量计算公式可以看出, 要降低网络流量可以从降低单点网络流量和并发用户数, 以及加长响应时间等方面进行改善 降低单点网络流量 :Portal 作为展现集成平台, 通过 widget 集成了很多应用, 对于每一个 widget 大小的控制和 widget 布局的控制, 对控制网络流量至关重要 在实际应用过程中, 可以通过以下几种方式降低单点网络流量 : 1) Widget 分布在多个主题页上 : 建议将经常访问的内容展示在 Portal 默认的首页上, 不经常访问的内容则分布在其它主题页上 2) 降低单个 Widget 下载资源量 : 在 widget 开发时尽量减少不必要资源的引用, 将单个 widget 的网络流量降到最低 3) 静态资源统一规划 分离部署 : 在实际应用中, 多个 widget 可能会引用相同的静态资源, 可以将这些静态资源作为公共资源抽取出来, 统一部署在一台甚至多台服务器上, 供不同的 widget 访问 每个服务器提供单独的网络出口 这样, 整个 Portal 服务器的压力就分摊到不同的服务器上了 降低并发用户数 : 在浏览器缓存的前提下, 网络流量的压力主要来源于第一次访问的并发用户数 为了提高第一次访问的性能, 也可以采用分步上线的方式进行并发用户的分流 确定可接受的响应时间 : 在企业的带宽出口有限的情况下, 可以通过倒推的方式计算响应时间 在可接受的响应时间基础上再计算网络流量, 作为硬件和网络配置的参考依据 8 常见故障排除 本章节针对一些常见的故障提供了解决方案 8.1 常规故障定位步骤 说明 : 部署 Portal 环境后, 可能由于多种原因造成运行异常 在此列举常规的定位故障的 步骤, 供实施参考 第 59 页共 65 页
60 步骤 1: 清除应用系统缓存再重启运行 停止 sso server 和 portal server, 清除应用系统缓存之后, 再重启 sso server 和 portal server, 如果仍然运行异常, 参照以下步骤定位 步骤 2: 验证 sso 配置是否正常 启动 sso server 和 portal server, 在浏览器中输入 url : 注意 :url 中 IP 地址和 Port 为 sso server 所在的应用服务器的 IP 和 Port) 如果没有进入如下图所示的 cas 的登录页面, 则说明 sso 配置有问题 如果进入了 SSO 的登录页面, 输入用户名 sysadmin, 密码 , 点击 登录 按钮, 如果页面抛出异常, 则可能是 sso server 中的登录校验配置有误, 请按照 SSO 集成指南 文档检查 sso 配置 如果登录成功, 则说明 sso 配置正常 步骤 3: 验证是否能够正常进入 Portal 登录首页 启动 sso server 和 portal server, 在浏览器中输入 url: server name+port}/{portal 所在应用名 }/ 如果没有出现 Portal 登录首页, 说明 portal server 配置有问题, 请按照指南文档检查 portal 配置, 尤其是 Portal 应用下 web.xml 的配置 步骤 4: 验证是否能够正常进入 Portal 主页 在 Portal 登录首页中输入用户名 sysadmin, 密码 , 点击 登录 按钮, 如果页面抛出异常, 说明 Portal 配置有问题, 请检查配置以及数据库初始化是否 正确之后再重启运行 8.2 登录后提示为非法用户 现象 在登录页面输入用户名和密码后登录, 页面提示为非法用户, 如下图所示 : 第 60 页共 65 页
61 原因 1 登录的用户是 SSO 的合法用户, 但在 Portal 中没有对应的用户 解决方案 1 检查登录用户在 Portal 数据库的 CAP_USER 表中是否有对应的用户记录 原因 2 在执行 Portal 应用初始化过程中出现异常 解决方案 2 检查 Portal 应用下 web.xml 中 edu.yale.its.tp.cas.client.filter.initcontextclass 配置的实现类是否正确, 如果可能跟踪初始化过程, 定位出错原因 如果使用了包含 ECM 的 Portal, 则需要确认 ECM Server 是否正常, 并且 Portal 应用下 user-config.xml 中 ECM Server 的配置是否正确 原因 3 应用服务器缺少 Portal 数据源对应数据库所需的 driver 如: 默认的 jboss 环境下不带 mysql driver 解决方案 3 将对应的数据库 driver 拷贝到应用服务器的公共 lib 下 8.3 Widget 中显示登录页面 现象登录 portal 主页, 集成的 widget 显示为登录页面 解决方案检查集成应用下的 web.xml 中 edu.yale.its.tp.cas.client.filter.servername 的配置是否与集成的 widget 的配置一致 如 :edu.yale.its.tp.cas.client.filter.servername 配置为固定 IP: :8080, 而 widget 对应的 hosturl 为 : :8080, 则 widget 请求的 url 会被当成一个新的请求, 从而需要登录 8.4 跨域应用的不同模块未使用同一个 session 现象 第 61 页共 65 页
62 在 IE 下访问 Portal 主页, 不同主题页上有同一个应用下的模块时, 会分别进行初始化, 创建多个 session 原因是因为 IE 的策略, 跨域 iframe 时不保留 session, 造成在跨域的不同 iframe 中同一应用下的 session 是不同的 解决方案需要在跨域的 jsp( 所有作为 Portal 主页 widget 的 jsp 都是跨域的 ) 中增加 response.setheader("p3p","cp=cao PSA OUR");p3p 是微软的隐私策略, 通常情况下跨域 iframe 或者 frameset 默认采用的隐私策略为 " 中 ", 该级别的策略拒绝保留 session CAO PSA OUR 则意味着你同意跨域保留 session, 可能会给网站带来安全隐患 8.5 Widget 中页面弹出窗口只能在 widget 小窗口范围 内显示或窗口样式异常 现象 widget 中不能弹出独立的窗口, 弹出窗口只显示在 widget 框内 ; 或者弹出窗口出现无边框等样式异常 如 :widget 对应 eos-web 开发的 jsp, 在 jsp 中链接弹出窗口, 弹出的窗口只在 widget 框范围内显示, 或者弹出窗口无边框 原因因为使用 eos-web 开发 jsp 过程中引用了一些 eos 的 js 库和公共样式等资源, 并且开发的 jsp 与 portal 分属于不同的应用, 而 portal 框架中并没有引用这些公共资源, 使用了 eos-web 的弹出窗口函数, 在跨域的情况下造成在 widget 中不能弹出独立的窗口, 或者窗口样式异常 解决方案需要在 widget 注册时, 配置该 widget 引用的 js 或者在 widget 对应的页面中通过调用 Portal 提供的在窗口中打开 url 的 API 的方式实现弹出窗口功能 并且在跨域的情况下, 不要使用 EOS 的弹出窗口函数, 而是使用 IE 的 window.showmodaldialog 8.6 在 Was 下修改配置文件不生效 现象在部署好的 was 环境下, 修改应用的 /WEB-INF 下的 xml 配置文件不生效 解决方案需要同时手工修改 <WAS_INSTALL_ROOT>/profiles/<PROFILE_NAME>/config/cells/<CELL_NAME >/applications/xxx.ear/deployments/xxxx/yyyy.war/web-inf/ 下面的 xml 才能保证修改生效 第 62 页共 65 页
63 8.7 在 Was 下 Portal 页面出现乱码 现象 Portal 部署在 was 环境下, 登录 Portal 主页后, 页面出现乱码, 如 : 导航的中文名称显示乱码, 系统菜单 功能菜单 快捷菜单标题乱码 原因 Portal 部署在 was 环境下, 登录 Portal 主页后, 页面出现乱码, 如 : 导航的中文名称显示乱码, 系统菜单 功能菜单 快捷菜单标题乱码 解决方案需要将 <WAS_INSTALL_ROOT>/AppServer/properties/ 目录下 encoding.properties 中的 zh=gb2312 改成 zh=utf-8, 重启 WAS 8.8 在 Was 下在 Portal 主页中切换点击不同应用菜单, 报数据加载失败 现象 Portal 部署在 was 环境下, 系统菜单中集成了 2 个应用 :portal 应用和 default 应用, 登录 Portal 主页后, 在系统菜单中点击 portal 应用加载 portal 应用的功能菜单, 点击 default 应用正常加载 default 应用的功能菜单, 再次点击 portal 应用, 前台报数据加载失败, 后台出现需要登录的提示 原因 Portal 部署在 was 环境下, 登录 Portal 主页后, 页面出现乱码, 如 : 导航的中文名称显示乱码, 系统菜单 功能菜单 快捷菜单标题乱码 解决方案步骤 1: 修改 WAS 配置打开 WAS 管理控制台, 转到 Servers >WebSphere Application Server > Server_Name > Web Container Settings > Session management > Enable Cookies, 重命名会话 Cookies 的名称 ( 不要为 JSESSIONID), 保存设置 配置示例如下图所示 : 1) 第 63 页共 65 页
64 2) 3) 4) 5) 第 64 页共 65 页
65 步骤 2: 重启 WAS 服务器步骤 3: 重新生成插件配置文件 A 对于 Windows 平台, 使用如下命令 :<was_home>\bin\genplugincfg.bat B 对于 LINUX 或 UNIX 平台, 使用如下命令 : <was_home>/bin/genplugincfg.sh 第 65 页共 65 页
目 录
PRIMETON TECHNOLOGIES, LTD. 普元信息技术股份有限公司 Portal 安装指南 目录 1 概述... 3 1.1 本文目标...3 1.2 非本文目标...3 1.3 目标读者基本要求...3 1.4 术语表...3 1.4.1 Widget...3 1.4.2 Portlet 容器...4 1.4.3 跨域...4 2 介质说明... 4 2.1 标准 Portal 部署包
1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->
目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController
エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******
******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);
目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放 性... 8 3.5 高 性 能 和
致 远 协 同 管 理 软 件 V5 平 台 白 皮 书 北 京 致 远 协 创 软 件 有 限 公 司 2014 年 6 月 1 / 20 目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放
手册 doc
1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106
BPS 6.6 手工部署指南 (JBoss4) 手工部署 BPS( 单机 ) 手工部署包支持的 jboss 版本有 jboss ga 和 jboss ga 示例中的 jboss 版本为 jboss ga, 操作系统为 Solaris(IP:
BPS 6.6 手工部署指南 (JBoss4) 手工部署 BPS( 单机 ) 手工部署包支持的 jboss 版本有 jboss-4.0.5.ga 和 jboss-5.1.0.ga 示例中的 jboss 版本为 jboss-4.0.5.ga, 操作系统为 Solaris(IP:192.168.2.179), 进行手工配置前需要准备好干净的 jboss 环境 1. 获取部署文件 从 BPS_6.6_Deploy_Package.zip
一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页
第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共
XXXXXXXX http://cdls.nstl.gov.cn 2 26
[ ] [ ] 2003-7-18 1 26 XXXXXXXX http://cdls.nstl.gov.cn 2 26 (2003-7-18) 1...5 1.1...5 1.2...5 1.3...5 2...6 2.1...6 2.2...6 2.3...6 3...7 3.1...7 3.1.1...7 3.1.2...7 3.1.2.1...7 3.1.2.1.1...8 3.1.2.1.2...10
Microsoft Word - 在VMWare-5.5+RedHat-9下建立本机QTopia-2.1.1虚拟平台a.doc
在 VMWare-5.5+RedHat-9 下建立 本机 QTopia-2.1.1 虚拟平台 张大海 2008-5-9 一 资源下载 1. 需要以下安装包 : tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz qt-x11-free-3.3.4.tar.gz
WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..
WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips ([email protected]),, IBM Developer Technical Support Center
untitled
JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE
1
TW5.0---APACHE---SSL(window 环境 ) 实现过程一 先做好 APCHE-SSL 准备 1. 下载 apache_2.2.11-win32-x86-openssl-0.9.8i.msi 2 安装此 APACHE, 在进行下一步之前, 请确认 Apache 已经安装并可以正常工作. 并且 ssl 需要的文件在如下的位置 : [Apache 安装目录 ]/modules/mod_ssl.so
SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基
开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些
ChinaBI企业会员服务- BI企业
商业智能 (BI) 开源工具 Pentaho BisDemo 介绍及操作说明 联系人 : 杜号权苏州百咨信息技术有限公司电话 : 0512-62861389 手机 :18616571230 QQ:37971343 E-mail:[email protected] 权限控制管理 : 权限控制管理包括 : 浏览权限和数据权限 ( 权限部分两个角色 :ceo,usa; 两个用户
内 容 协 作 平 台 TRS WCM 6.5 北 京 拓 尔 思 信 息 技 术 股 份 有 限 公 司 Beijing TRS Information Technology Co., Ltd 版 权 说 明 本 手 册 由 北 京 拓 尔 思 信 息 技 术 股 份 有 限 公 司 ( 以 下 简 称 TRS 公 司 ) 出 版, 版 权 属 TRS 公 司 所 有 未 经 出 版 者 正 式
BPS 6.7 手工部署指南 (Tomcat) 手工部署 BPS( 单机 ) 手工部署包支持的 tomcat 版本有 apache-tomcat 和 apache-tomcat 示例中 的 tomcat 版本为 apache-tomcat , 操作系统为 li
BPS 6.7 手工部署指南 (Tomcat) 手工部署 BPS( 单机 ) 手工部署包支持的 tomcat 版本有 apache-tomcat-5.5.20 和 apache-tomcat-6.0.18 示例中 的 tomcat 版本为 apache-tomcat-5.5.20, 操作系统为 linux(ip:192.168.2.175), 进行手工部 署之前需要准备好干净的 tomcat 环境
RUN_PC連載_10_.doc
PowerBuilder 8 (10) Jaguar CTS ASP Jaguar CTS PowerDynamo Jaguar CTS Microsoft ASP (Active Server Pages) ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar CTS ASP Jaguar Server ASP
chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas
Contents 目錄 chapter 1 1-1... 1-2 1-2... 1-3 HTML5... 1-3... 1-5 1-3... 1-9 Web Storage... 1-9... 1-10 1-4 HTML5... 1-14... 1-14... 1-15 HTML5... 1-15... 1-15... 1-16 1-5... 1-18 Apps... 1-18 HTML5 Cache
untitled
01 1-1 PHP 1-2 PHP 1-3 MySQL 1-4 1-5 http://w3techs.com/technologies/history_overview/programming_language w3techs.com (Server-side) 2012 7 77.8% PHP PHP PHP PHP 1-1 PHP PHP HTML Script Windows ASP(Active
软件概述
Cobra DocGuard BEIJING E-SAFENET SCIENCE & TECHNOLOGY CO.,LTD. 2003 3 20 35 1002 010-82332490 http://www.esafenet.com Cobra DocGuard White Book 1 1....4 1.1...4 1.2 CDG...4 1.3 CDG...4 1.4 CDG...5 1.5
5-1 nav css 5-2
5 HTML CSS HTML CSS Ê Ê Ê Ê 5-1 nav css 5-2 5-1 5 5-1-1 5-01 css images 01 index.html 02 5-3 style.css css 03 CH5/5-01/images 04 images index.html style.css 05
Chapter V.S. PC
Chapter 14 14-1 V.S. PC 14-2 14-3 14-4 14-1 V.S. PC PC PC Yahoo! PC (https://tw.yahoo.com/) Yahoo! (https:// tw.mobi.yahoo.com/) Yahoo! a b a PC b PC PC Flash HTML5 CSS3 PC 14-2 14-3 PC PC Yahoo! PC https://tw.yahoo.com/
目 录(目录名)
目录 目录...1-1 1.1 域名解析配置命令... 1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-1 1.1.3 display dns server... 1-2 1.1.4 display ip host... 1-3 1.1.5 dns domain... 1-4 1.1.6 dns resolve...
Microsoft Word - PHP7Ch01.docx
PHP 01 1-6 PHP PHP HTML HTML PHP CSSJavaScript PHP PHP 1-6-1 PHP HTML PHP HTML 1. Notepad++ \ch01\hello.php 01: 02: 03: 04: 05: PHP 06:
untitled
PowerBuilder Tips 利 PB11 Web Service 年度 2 PB Tips PB9 EAServer 5 web service PB9 EAServer 5 了 便 web service 來說 PB9 web service 力 9 PB11 release PB11 web service 力更 令.NET web service PB NVO 論 不 PB 來說 說
http://panweizeng.com http://meituan.com http://meituan.com hosts http://meituan.com hosts localhost 127.0.0.1 /etc/nsswitch.conf /etc/hosts /etc/resolv.conf Mail Client Web Browser cache 1-30mins Clients
p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.
2005-06 p.1 HTML HyperText Mark-up Language 1. HTML Logo, Pascal, C++, Java HTML 2. HTML (tag) 3. HTML 4. HTML 1. HTML 2. 3. FTP HTML HTML html 1. html html html cutehtmleasyhtml 2. wyswyg (What you see
Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech
- OfficeCoder 1 2 3 4 1,2,3,4 [email protected] 1 [email protected] 2 [email protected] 3 [email protected] 4 Abstract. Microsoft Word 2013 Word 2013 Office Keywords:,, HTML5,
获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复
获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret
ABSSetup.doc
WebSphere Application Server 5.1 & ABS V1.01 2004 11 WebSphere Application Server 5... 3 WebSphere Application Server 5... 3 1 Windows WebSphere... 3 WebSphere Application Server 5... 4 1... 4 2... 4 3
RUN_PC連載_8_.doc
PowerBuilder 8 (8) Web DataWindow ( ) DataWindow Web DataWindow Web DataWindow Web DataWindow PowerDynamo Web DataWindow / Web DataWindow Web DataWindow Wizard Web DataWindow Web DataWindow DataWindow
關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK
2 l 跨裝置網頁設計 Android ios Windows 8 BlackBerry OS Android HTML 5 HTML 5 HTML 4.01 HTML 5 CSS 3 CSS 3 CSS 2.01 CSS 3 2D/3D PC JavaScript
res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml
拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,
《linux从入门到精通》实验指导第三讲:文件及目录操作
Web 交互开发 实验教学指导 实验三 :jquery 操作 DOM 一 实验目的 (5 分 ) 1 掌握 jquery 开发环境搭建的方法 ; 2 掌握 jquery 选择符的使用方法 ; 3 掌握 DOM 元素属性操作的方法 ; 4 掌握 DOM 元素的添加 删除和复制等操作 ; 二 实验环境 (5 分 ) 1 Windows XP/Windows 7 操作系统的计算机 ; 2 局域网网络环境,
FileMaker 15 WebDirect 指南
FileMaker 15 WebDirect 2013-2016 FileMaker, Inc. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc. FileMaker WebDirect FileMaker, Inc. FileMaker
序 言 本 专 业 人 才 培 养 方 案 以 适 应 市 场 需 求 为 目 标, 根 据 学 校 校 企 双 主 体 人 才 培 养 的 要 求 和 移 动 应 用 开 发 专 业 的 特 点 设 置 课 程 体 系, 体 现 了 课 程 为 市 场 服 务 的 特 点 本 专 业 要 求 学
广 东 新 安 职 业 技 术 学 院 计 算 机 移 动 应 用 开 发 专 业 2016 级 人 才 培 养 方 案 专 业 方 向 负 责 人 : 梅 红 系 主 任 : 毛 立 冰 计 算 机 系 二 一 五 年 六 月 序 言 本 专 业 人 才 培 养 方 案 以 适 应 市 场 需 求 为 目 标, 根 据 学 校 校 企 双 主 体 人 才 培 养 的 要 求 和 移 动 应 用 开
導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式
導讀 ASP.NET HTML ASP 第一篇 基礎篇第 1 章 認識 ASP.NET ASP.NET ASP.NET ASP.NET ASP.NET 第 2 章 認識 Visual Studio 20 開發環境 Visual Studio 20 Visual Studio 20 第二篇 C# 程式語言篇第 3 章 C# 程式語言基礎 C# C# 3.0 var 第 4 章 基本資料處理 C# x
目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas
目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding
帝国CMS下在PHP文件中调用数据库类执行SQL语句实例
帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)
Mohamed
2N Helios IP 门禁系统与潮流 IP 多媒体电话对接配置指南 目 录 2N HELIOS IP 门禁系统与潮流 IP 多媒体电话对接配置指南 简介... 3 配置环境... 3 2N Helios IP 门禁系统与 GXV3140 或 GXV3175 的对接配置 ( 单对接 )...4 2N Helios IP 门禁系统与多媒体 GXV3140 和 / 或 GXV3175 的对接配置 (
PowerPoint Presentation
数 字 化 校 园 信 息 平 台 解 决 方 案 杭 州 正 方 电 子 工 程 有 限 公 司 2007.10 杭 州 正 方 电 子 工 程 有 限 公 司 简 介 正 方 公 司 成 立 于 1999 年 1 月 份, 现 有 员 工 170 多 名, 是 经 相 关 机 构 认 定 的 高 新 技 术 企 业 软 杭 件 企 州 业 正, 取 方 得 电 计 算 子 机 工 软 件 程 著
大漠 伪前端, 就职于淘宝
CSS Grid Layout 2016-12-17 @ 大漠. #CSSConf https://www.flickr.com/photos/19139526@n00/8331063530/ 大漠 伪前端, 就职于淘宝 古老的 table 布局 现代 Web 布局 Float inline-block display: table position (absolute 或 relative)
使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他
使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他 Eclipse 插件 ( 比如 MyEclipse 插件 ), 其开发方式和步骤可能略有差异和不同 在该例中,
付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探
付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探索建设中 成时间 : 2017-07-20 12:13:21 Since 8.6 定义键盘 定义键盘使
0 配置 Host MIB 设备 V ( 简体版 ) 0 Update: 2016/1/30
0 配置 Host MIB 设备 V 1.1.2 ( 简体版 ) 0 Update: 2016/1/30 前言 N-Reporter 支持 Host Resource MIB 监控主机 (Host) 状态, 本文件描述 N-Reporter 用户如何配置 Host MIB 设备 文件章节如下 : 1. 配置 Windows Server 2003... 2 1-1.Windows Server 2003
1
PRIMETON TECHNOLOGIES, LTD. EOS EOS Manager No part of this document may be reproduced, stored in any electronic retrieval system, or transmitted in any form or by any means, mechanical, photocopying,
目 錄 第 一 章 weberp 簡 介... 6 第 一 節 概 述... 6 第 二 節 安 全 性... 7 第 三 節 功 能... 7 一 銷 售 及 訂 單... 7 二 稅... 8 三 應 收 帳 款... 8 四 存 貨... 8 五 購 買... 9 六 應 付 帳 款... 9
東 吳 大 學 企 研 所 資 訊 管 理 期 末 報 告 weberp 使 用 說 明 書 指 導 教 授 : 尚 榮 安 教 授 第 一 組 童 偉 哲 01353025 劉 彥 澧 01353028 史 璦 禎 01353031 吳 采 紋 98153143 1 目 錄 第 一 章 weberp 簡 介... 6 第 一 節 概 述... 6 第 二 節 安 全 性... 7 第 三 節 功
關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5
網頁程式設計 HTML JavaScript CSS HTML JavaScript CSS HTML 5 JavaScript JavaScript HTML 5 API CSS CSS Part 1 HTML HTML 5 API HTML 5 Apple QuickTime Adobe Flash RealPlayer Ajax XMLHttpRequest HTML 4.01 HTML 5
Ioncube Php Encoder 8 3 Crack 4. llamaba octobre traslado General Search colony
Ioncube Php Encoder 8 3 Crack 4 ->>->>->> DOWNLOAD 1 / 5 2 / 5 Press..the..General..Tools..category4Encrypt..and..protect..files..with..PHP..encoding,..encryption,..ob fuscation..and..licensing... 2016
LiveBOS产品白皮书
面 向 对 象 的 业 务 支 撑 平 台 与 建 模 工 具 * 实 现 应 您 所 需, 随 时 而 变 的 应 用 * 业 务 管 理 应 用 软 件 最 佳 选 择 * LiveBOS 产 品 白 皮 书 LiveBOS 产 品 白 皮 书 福 州 顶 点 信 息 管 理 有 限 公 司 http://www.apexinfo.com.cn Copyright c 2008-2015 版 权
(CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787
Web (CIP) Web /,. :,2005. 1 ISBN 7 81058 782 X.W............T P393.4 CIP (2004) 118797 Web ( 99 200436) ( http:/ / www.shangdapress.com 66135110) : * 787 1092 1/ 16 30.75 748 2005 1 1 2005 1 1 : 1 3 100
SiteView技术白皮书
SiteView ECC V6.2 技 术 白 皮 书 游 龙 网 络 科 技 ( 中 国 ) 有 限 公 司 DragonFlow Networks(China),Inc. 目 录 第 一 章 产 品 概 述... 3 第 二 章 系 统 结 构... 6 一 系 统 架 构... 7 1 用 户 管 理 模 块... 7 2 Web Server... 8 3 存 储 加 密 模 块... 8
X713_CS_Book.book
/ / /USB ) ; ; C D ; ; B B 1 >> 2 3 B 1 ( > > ) 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 GSM GPS ( ) 手机已连接到 GSM 网络 指示条越多, 接收质量越好 GPS 2 ...........................4.............................. 4 Micro SD (
目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas
目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding
ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法
ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 0 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : 0 /// 测试方法 : 测试将 DataTable 导出到 EXCEL, 无模板 public void TestExportToExcelByDataTable() string excelpath
基于CDIO一体化理念的课程教学大纲设计
Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授
epub 61-2
2 Web Dreamweaver UltraDev Dreamweaver 3 We b We b We Dreamweaver UltraDev We b Dreamweaver UltraDev We b We b 2.1 Web We b We b D r e a m w e a v e r J a v a S c r i p t We b We b 2.1.1 Web We b C C +
13 根 据 各 种 网 络 商 务 信 息 对 不 同 用 户 所 产 生 的 使 用 效 用, 网 络 商 务 信 息 大 致 可 分 为 四 级, 其 中 占 比 重 最 大 的 是 ( A ) A 第 一 级 免 费 信 息 B 第 二 级 低 收 费 信 息 C 第 三 级 标 准 收 费
助 理 电 子 商 务 考 试 真 题 试 题 第 一 部 分 : 理 论 部 分 一 单 项 选 择 题 1 ( B ) 是 信 息 系 统 的 核 心 组 成 部 分 A 逻 辑 模 型 B 数 据 库 C 概 念 模 型 D 以 上 全 部 2 ping www.163.com -t 中 参 数 t 的 作 用 是 :( A ) A 进 行 连 续 测 试 B 在 新 窗 口 中 显 示 C
互動網頁技術系列課程 HTML與CSS網站基礎設計 [12pt]
HTML CSS / 2011 HTML CSS 1/ 47 1 2 HTML 3 4 HTML 5 5 : CSS 6 CSS 7 HTML CSS 2/ 47 HTML CSS 3/ 47 ( BOM) UTF-8 Notepad++ (Winodws), Fraise/Smultron (Mac), VIM ( ) HTML CSS 4/ 47 UTF-8? UTF-8 (unicode),
优迈科技教学大纲2009版本
java 软 件 工 程 师 培 训 教 学 大 纲 1 JAVA 软 件 工 程 师 培 训 教 学 大 纲 深 圳 软 件 园 人 才 实 训 基 地 2009 年 3 月 目 录 java 软 件 工 程 师 培 训 教 学 大 纲 2 教 学 阶 段...3 第 一 章 JAVA 起 步...3 第 二 章 面 向 对 象 的 编 程...4 第 三 章 数 据 结 构 IO 线 程 网 络...5
Adobe AIR 安全性
ADOBE AIR http://help.adobe.com/zh_cn/legalnotices/index.html iii............................................................................................ 1............................................................................................
A-1 HTML A-1-1 HTML 1 HTML JSP HTML HTML HTML JSP A HTML HTML HTML HTML HTML HTML HTML HTML.htm.html HTML Windows NotePad HTML IE [ / ] NotePad A-2
HTML A-1 HTML A-2 A-2 HTML A-8 A-3 A-14 A-4 A-26 A-5 A-30 A-6 A-42 A-1 HTML A-1-1 HTML 1 HTML JSP HTML HTML HTML JSP A HTML HTML HTML HTML HTML HTML HTML HTML.htm.html HTML Windows NotePad HTML IE [ /
新美大酒店开放平台SDK(.NET版)使用说明.pages
SDK(.NET 版 ) 使 用说明 1 SDK 包说明 1.1 获取 SDK SDK 可以在数据平台下载, 也可直接通过下载地址获得 下载地址 : http://s3.meituan.net/v1/mss_de81c933e113413ea913a772b707b9c9/open-platform-sdk/mthotelopenplatform-sdk-1.0-net.zip 下载成功后, 解压后可获得
6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM
CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986
Linux服务器构建与运维管理
1 Linux 服务器构建与运维管理 第 2 章 :Linux 基本命令 阮晓龙 13938213680 / [email protected] http://linux.xg.hactcm.edu.cn http://www.51xueweb.cn 河南中医药大学管理科学与工程学科 2018.3 2 提纲 目录与文件的操作 mkdir touch mv cp rm rmdir file tree
MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP #
iptables 默认安全规则脚本 一 #nat 路由器 ( 一 ) 允许路由 # iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT ( 二 ) DNAT 与端口转发 1 启用 DNAT 转发 # iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 dprot 422 -j DNAT to-destination
Contents 1. IPSIDS...1... 19 2....2 IT... 21 3....2 4....3 FAQ... 26 5. 21 CISP...3 6. IPS...3 7. 2008...4 8. 2008...4...6...7 IPS Web...9...13...14...15 TOP10...16... 28... 31... 33... 37... 40... 42...
可 Web 编程的NativeUI 设计与实现
可 Web 编程的 NativeUI 设计与实现 张袁炜 [email protected] 欢迎转岗简历请发 About Me @ 张袁炜 直达号 网址导航 百度 音乐 前端 Node.js Android Arduino RaspberryPI https://github.com/zhangyuanwei Outline 一个 Hybrid App 的进化史 Native UI 实现原理
PowerPoint Presentation
1 版权所有 2011,Oracle 和 / 或其分支机构 保留所有权利 从幻灯片 8 中插入信息保护策略分类 WAC Widget Java ME 手机新动向陈志宇 2 版权所有 2011,Oracle 和 / 或其分支机构 保留所有权利 从幻灯片 8 中插入信息保护策略分类 以下内容旨在概述我们产品总的发展方向 该内容仅供参考, 不可纳入任何合同 该内容不构成提供任何材料 代码或功能的承诺, 并且不应该作为制定购买决策的依据
F515_CS_Book.book
/USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (
untitled
653 JAVA 2008 11 Institution of Software Engineer... 2... 4... 4... 5... 5... 8... 8... 8... 8... 8... 9... 9... 9... 11... 13... 13... 13... 13... 15... 15... 15... 15... 16... 16... 17... 17... 17...
<4D6963726F736F667420576F7264202D20383439342D352DBED6D3F2CDF8D7E9BDA8D3EBB9DCC0EDCFEEC4BFBDCCB3CCD5FDCEC42E646F63>
第 4 单 元 搭 建 自 己 的 Web 站 点 本 单 元 通 过 学 习 架 构 Web 服 务 器, 实 现 Web 服 务, 管 理 Web 站 点, 了 解 Web 站 点 服 务 器 的 架 构 个 人 空 间 和 虚 拟 主 机 的 概 念, 掌 握 IIS 组 件 的 安 装 Web 站 点 的 创 建 管 理 站 点 属 性 选 项 卡 的 配 置 管 理 等 知 识,Web 网
javascript sdk javascript sdk 列出 Bucket 内的对象上传 textarea 内容到 Bucket 上传本地文件生成私有下载链接生成带过期时间的私有链接删除对象下载对象拷贝对象查看文件访问权限设置文件访问权限获取静态网站配置设置静态网站删除静态网站查询对象元数据查询
javascript sdk javascript sdk 列出 Bucket 内的对象上传 textarea 内容到 Bucket 上传本地文件生成私有下载链接生成带过期时间的私有链接删除对象下载对象拷贝对象查看文件访问权限设置文件访问权限获取静态网站配置设置静态网站删除静态网站查询对象元数据查询桶的多版本 Bucket 开启对象多版本支持挂起 Bucket 的多版本对象功能浏览器客户端浏览器客户端的
计算机网络实验说明
计算机网络实验说明 龚旭东 电三楼 420 lzgxd@mailustceducn 2011 年 11 月 1 日 龚旭东 (TA) 计算机网络实验说明 2011 年 11 月 1 日 1 / 20 Outline 1 实验系统介绍 实验环境实验流程 2 实验内容编程实验交互实验观察实验 3 一些控制台命令 4 实验报告说明 龚旭东 (TA) 计算机网络实验说明 2011 年 11 月 1 日 2
turbomail方案
TurboMail 安 全 保 密 邮 件 系 统 解 决 方 案 (Windows/Linux/Unix/AIX/Solaris/FreeBSD 平 台 适 用 ) 广 州 拓 波 软 件 科 技 有 限 公 司 网 址 :http://www.turbomail.org - 1 - 目 录 广 州 拓 波 软 件 科 技 有 限 公 司 简 介...- 4 - 涉 密 系 统 需 求...- 7
// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple
halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,
FPGAs in Next Generation Wireless Networks WPChinese
FPGA 2010 3 Lattice Semiconductor 5555 Northeast Moore Ct. Hillsboro, Oregon 97124 USA Telephone: (503) 268-8000 www.latticesemi.com 1 FPGAs in Next Generation Wireless Networks GSM GSM-EDGE 384kbps CDMA2000
1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6
www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7
