Oracle CM SDK Web Starter App 第 2 版自述文件

Oracle CM SDK Web Starter Application 第 2 版
本自述文件包含以下部分:
1. 概述
Oracle CM SDK Web Starter Application 第 2 版是一个由 Oracle CM SDK 小组开发的示例应用程序。
此示例应用程序基于原有的 Oracle CM SDK Web Starter Application。Web Starter Application 第 2 版包含了原先 Web Starter Application 的所有功能,此外还加入了如下功能:
- 支持版本控制文件
- 分配访问级别
- 向文档分配关键字
- 基于这些关键字进行搜索
此外,它是使用标准 Web 应用程序框架 STRUTS 开发的。Web Starter Application 第 2 版是 Oracle CM SDK 定制开发的理想起点。
此示例应用程序旨在作为一个工具来帮助开发人员了解使用 Oracle CM SDK 构建 Web 应用程序时所遇到的问题。它还提供了常见问题的解决方案示例。
此示例应用程序并非用于提供 Web 应用程序开发或 CM SDK API 的知识。要了解有关 CM SDK API 的更多信息,请参阅 oracle.ifs.examples.api 程序包。
Web Starter Application 第 2 版是以示例代码形式提供的,可能还未在所有方面达到生产质量的需要。但在适当的情况下,采用了一些普遍接受的做法和公认的设计模式。下列设计目标一直贯穿整个过程:
设计目标
- 使用标准技术
- 使用标准 Web 应用程序框架
- 模块化设计
- 可重用
- 可扩展
- 可伸缩
- 使示例尽可能地简单
- 将用户界面代码与业务代码分开
- 最大限度地减少 JSP 中的 Java 代码
- 演示如何支持多种语言
- 演示 ADA 符合性
- 使用简单 HTML 和最少的 Javascript 避免浏览器问题
Web Starter Application 第 2 版提供了以下基本功能:
基本功能
- 建立用户会话
- 列出文件夹的内容
- 深入挖掘文件夹,显示它的内容
- 向上导航到上一级文件夹
- 将文件上载到文件夹中
- 创建一个文件夹
- 使用文档 servlet 显示文档内容
- 按名称、内容、关键字和开始文件夹(文件夹限制的查询)搜索文档和文件夹
- 重命名文档或文件夹
- 移动文档或文件夹
- 复制文档或文件夹
- 修改文档或文件夹描述
- 断开用户会话连接
- 实现文档的版本控制
- 签出文档的某一版本以进行独占式写访问
- 签入一个已签出的文档
- 取消签出,恢复到上一版本
- 查看进行了版本控制的文档的历史记录
- 设置文档和文件夹的访问权限
- 通过值列表页查找访问级别
- 向文档或文件夹分配关键字
2.常见的 Web 应用程序问题
最大限度地减少浏览器问题
Web 应用程序的一个常见问题是各种浏览器和浏览器版本导致的不一致行为。保持用户界面简单,并使用简单的 HTML 控件以最大限度地减少这些类型的问题。在此示例应用程序中:
- 未使用框架
- 未使用动态 HTML
- 未使用模式对话框窗口
- 使用了标准 HTML 控件
- 只使用了最少的 Javascript
- 大多数浏览器都适用,但测试使用的是 Microsoft Internet Explorer v6.028
应用程序状态
HTTP 是一个无状态协议,但大多数 Web 应用程序需要保持应用程序状态。通过 Java Servlet API 可以将应用程序状态存储在 HTTP Session 中。应用程序状态和每个页面的状态通过 Java Servlet API 存储在 HTTP Session 中。
- 在登录成功后存储登录 bean。这使您可以轻松地检查操作以确保用户已经成功登录,且它们的会话未超时。
- 通过为每个打开的浏览器分配一个唯一键并在页面间进行传递,可以完成对多个浏览器窗口的支持。每个 HTML 页面都有它自己的唯一键。可组合浏览器窗口键和 HTML 页面键以存储窗口的状态。这样子窗口就不必了解调用方以及返回什么数据。
用户登录检查
许多 Web 应用程序都需要用户身份验证,所以要检查每个请求以确认用户是否已登录。
- 存储在 HTTP Session 中的登录 bean 用于检查用户是否已成功登录,以及它是否仍然有效(因为它在不活动情况下将超时退出)。
- FileAction 类是一个基本的 Action 类,他将验证用户是否已登录。所有扩展此类的活动都继承此行为。登录操作会不使用此检查,这是因为它的功能是完成用户的登录。
国际化和本地化
要支持多种语言和字符集:
- 使用 UTF8 编码,因为它支持多字节字符集。
- 在 JSP 头的命令中指定 UTF8,以使用创建使用 UTF8 的页面。
- 处理请求时在控制器 servlet 中指定 UTF8。
- 将所有可本地化字符串置于一个资源文件中,以便于翻译。Struts 为 JSP 提供了一个字符串资源文件 ApplicationResources.properties, 以及获取这些字符串的标记。
- 通过请求头从浏览器中获取要使用的语言。
- 根据语言构建显示格式(如日期)区域
- 要查看本地化工作,请执行以下操作:
- 创建 ApplicationResources.properties 的副本
- 将它翻译为其他语言,并正确命名文件(例如,对于西班牙语,命名为 ApplicationResources_es.properties)
- 将文件置于 classpath 中
- 将浏览器首选项设置为使用该语言(例如,es)
- 登录
应用程序流
Web 应用程序通常需要经常更改。为方便进行更改,请避免在处理请求的页面和 Actions 中对 URL 进行硬编码。
- STRUTS 为页面使用逻辑映射提供了一种方法,从而避免了对 URL 进行硬编码;逻辑映射存储在 struts-config.xml 中。
- STRUTS 规定 Action 可使用逻辑输出,从而避免了对 URL 进行硬编码;逻辑输出映射存储在 struts-config.xml 中。
- STRUTS 提供了 struts-config.xml 以定义应从请求中捕获的表单域。
分隔用户界面和逻辑
要提高可重用性和可维护性,请将用户界面逻辑与业务逻辑分开。
- STRUTS 提供了 Action 类来处理用户事件。
- STRUTS 为标准用户界面逻辑提供了一个标记库。
- 定制标记库作为此应用程序的一部分提供。
- 开发了 Bean 用户界面 helper 类。
- 模型特定代码位于 Model 程序包中。
后退按钮问题
使用后退按钮可能导致意外结果。
- STRUTS 提供了标记生成和过期机制来帮助解决后退按钮问题。
- 此应用程序中未使用后退按钮代码。
- 浏览器版本可能影响后退按钮行为。
可重用窗口
创建这样一种页面将是很有用的,它可由多个位置调用以执行某个功能,并将结果返回给调用方。
- 以下是可重用窗口:
- properties.jsp
- listOfValues.jsp
- selectFolder.jsp
- checkIn.jsp
- 表单域 returnToCallerForward 指定可重用窗口的逻辑输出并由调用窗口指定。通过 struts-config.xml 映射回到调用页面。
处理大型结果集
Web 应用程序应处理大型结果集。
- 结果应在一次显示一个页面。
- 请慎用下拉列表,因为它们并不伸缩。
- 使用值列表功能从大型集中选择值。
- 提供一种用于过滤结果的方法。
- 提供搜索以作为限制结果的方法。
事件记录
Web 应用程序应支持事件记录。在此示例应用程序中:
- 使用了 Oracle CM SDK 标准节点事件记录。
- 标准 servlet 事件记录用于独立开发模式。
用户界面样式
此示例应用程序支持可定制用户界面样式。
- HTML 通过类属性链接到 CSS 样式。
- 用户界面样式由 CSS 样式表定义。
- 文件 webstarterapp.css 包含实际使用的样式表。
- 要更改样式,请编辑文件 webstarterapp.css。还提供有两个示例样式表。
开发人员特性
这些特性是为开发环境(而不是生产环境)提供的。
- 调试模式通过 web.xml 文件中的 servlet 配置属性提供。它提供了额外的消息来帮助发现问题。
- 调试消息通过 web.xml 文件中的 servlet 配置属性发送到 System.out 或发送到日志。
- 独立模式使应用程序能够在 Oracle CM SDK 外的环境中运行。这使您不必创建 OC4J 实例、HTTP 节点和 Oracle CM SDK 服务器配置。
- 可以使用 JDeveloper 的嵌入式 OC4J 服务器从 JDeveloper 运行应用程序。
- 可以通过
.../displayObject.do?poPath=:docid 或 displayObject.do?poPath=/path 访问显示对象页面
3.应用程序详细内容
应用程序组件
Web Starter Application 第 2 版由以下部分组成:
- 用于获取所有请求并将其分派给相应操作的控制器 servlet。
- WebStarterAppServlet 是控制器 servlet
- 与 Oracle CM SDK 信息库通信以获取连接的 Oracle CM SDK 服务器
- WebStarterAppServer 是 Oracle CM SDK 服务器
- 用于处理特定请求并将其转发/重定向到 View 的 Action
- 有 32 个 Action 类。它们的名称以“Action”结尾。
- 示例如下:
- BrowseDirectoryAction - 在提供的路径处显示一个目录
- LogonAction - 将用户记录在系统中
- DeleteAction - 从指定的目录中删除指定项
- 通过 JSP 显示用户界面的 View
- 有 21 个 JSP
- 示例如下:
- browseDirectory.jsp - 显示目录内容
- copy.jsp - 将一个文件夹中的项目复制到另一个文件夹
- delete.jsp - 删除文件夹中的项目
- 用于要使用的 JSP 的 JSP 标记类
- 有 12 个定制标记类。它们的名称以“Tag”结尾。
- 示例如下:
- LoopTag - 遍历 PublicObjects 集合
- AttributeTag - 显示 PublicObject 的属性
- MultiPageTag - 显示指向多页结果集的页面的链接
- 通过请求将操作中的数据传递给视图的 Helper 类
- 有两个 helper 类:
- CollectionBean - 保存 PublicObjects 集合
- LogonBean - 用于将用户的 Oracle CM SDK 会话存储到 HttpSession 中
- 用于各种函数的 Utility 类
- 有 5 个 Utility 类:
- 常数 - 定义类似 http 参数名这样的常数
- HttpUtils - 用于解决类似本地化这样的问题的 helper 方法
- IfsUtils - 集中管理 Oracle CM SDK 特定的调用
- StringResourceUtils - 向 String 资源提供便利
- VersionUtils - 包含一般版本操作
- Utility Public Object(实用程序公共对象)类
- 有 8 个 Utility Public Object 类。这些类基于源和/或目标文件是否是版本控制文件来定义文件操作行为。工厂用于返回实现 UtilsPublicObjectInterface 的正确类。这样调用方就可以没有版本控制代码。这有助于在单个对象集中对版本控制代码进行模块化,并通过为每个实例使用单独的小类来简化逻辑:
- UtilsPublicObjectInterface 定义 UtilsPublicObject 必须实现的接口
- UtilsPublcObjectFactory 返回正确实现
- UtilsPublicObject 处理非版本控制对象而不会出现冲突
- UtilsVersionObject 处理版本控制对象而不会出现冲突
- UtilsNonVersionedToNonVersioned 使用非版本控制对象处理非版本控制冲突
- UtilsNonVersionedToVersioned 使用版本控制对象处理非版本控制冲突
- UtilsVersionedToNonVersioned 使用非版本控制对象处理版本控制冲突
- UtilsVersionedToVersioned 使用版本控制对象处理版本控制冲突
- 用于本地化的资源文件
ViewController/src/resources/ApplicationResource.properties - 可本地化的应用程序字符串
Model/src/Resources/StringResources - 可本地化的模型字符串
- 由应用程序使用的图像
- brand.gif - 品牌图像
- default.gif - 文件夹项目的缺省文档 gif
- folder.gif - 文件夹图标
- gb-logout.gif - 注销按钮
- lov.gif - 值列表按钮图标
- oraclelogo.gif - 甲骨文公司 gif
- checkin_disabled.gif — 表示已禁用签入的图标
- checkin_enabled.gif — 已启用签入图标
- checkout_disabled.gif — 已禁用签出的图标
- checkout_enabled.gif — 已启用签出的图标
- 表示属性页面链接的 eyeglasses_24x24_transparent.gif 图标
- makeversioned_disabled.gif — 已禁用生成版本链接的图标
- makeversioned_enabled.gif — 已启用生成版本链接的图标
- reverseicon_disabled.gif — 已禁用取消签出链接的图标
- reverseicon__enabled.gif — 已启用取消签出链接的图标
- revisionhistory_disabled.gif图标 — 已禁用版本历史记录链接的图标
- revisionhistory__enabled.gif — 已启用版本历史记录链接的图标
- versioned.gif 版本控制文档的图标
- 一个用于显示文档内容的 servlet,名为 DocServlet
- 用于控制 html 样式的样式表
- 样式表为:
- 其他样式表作为备用示例样式提供
- webstarterappPurple.css - 与最初的 webstarterapp.css 相同
- webstarterappBlue.css - 示例备用样式
- webstarterappOra.css - 示例备用样式
应用程序流
- JSP 向控制器 servlet 发送一个请求,以指定操作。
- STRUTS 通过 struts-config.xml 将逻辑链接转换为实际的 URL。
- STRUTS 将表单域提取到 JavaBean 中。
- 控制器 servlet 实例化操作,并向操作提供请求和填充 Javabean。
- 操作验证数据、执行处理、添加到请求并将请求转发/重定向到逻辑转发。
- STRUTS 通过 struts-config.xml 将逻辑转发转换为实际转发。此转发发送到其他操作或 JSP。
- JSP 调用 Tag 以确定动态内容并格式化内容。
- 浏览器显示页面,然后此循环重复执行。
4.手动部署应用程序
此示例应用程序未完成部署。
以下是一个有关如何手动部署 Oracle CM SDK Web Starter Application 第 2 版的示例。可以将这些步骤用作的指导,以部署您自己的定制 Oracle CM SDK 应用程序。这些步骤实质上与原始 Web Starter App 的步骤相同,但需要更改 IFS.SERVER.Class 服务器属性。
手动部署 Oracle CM SDK Web 应用程序共分四个主要步骤。这些步骤如下:
- 创建一个新的 HTTP 节点
- 创建一个 OC4J 实例
- 部署定制应用程序
- 重新启动 Oracle CM SDK 域和 OC4J 实例并访问应用程序
完成这些步骤后,应能够访问测试应用程序。以下步骤演示了如何使用 Oracle 企业管理器应用服务器控制完成此操作。注意,您必须已经拥有可以正常工作的 Oracle CM SDK 安装程序。
创建一个新的 HTTP 节点
- 访问 Oracle 企业管理器应用服务器控制(http://主机.域:1810)
- 输入应用服务器控制管理员用户名和口令 (ias_admin/ias_admin password)。
- 导航到安装了 Oracle CM SDK 的应用服务器实例。
- 将显示 Oracle CM SDK 域和 Oracle CM SDK OC4J 实例。例如:
Content Management SDK (my_cmsdk_schema),表示 10g (9.0.4) 中的 Oracle CM SDK 域)
iFS_myhost:1521:myhost.us.oracle.com:MY_SCHEMA,表示版本 2 (9.0.3) 中的 Oracle CM SDK 域
OC4J_iFS_cmsdk,表示 Oracle CM SDK HTTP 节点
- 单击 Oracle CM SDK 域链接。
- 单击 Configuration 标题下的 Server Configurations。
- 选择 HttpAdminServerConfiguration 并单击 Create Like。
对于 HttpAdminServer 输入以下信息:
- 名称: TestWebStarterAppServerConfig(注意:可以输入任何名称)
- 访问控制: Private
- 取消选中 Abstract
- 在 Properties 部分中,删除
IFS.SERVER.Class 和 IFS.SERVER.SESSION.User 以外的所有项
- 编辑
IFS.SERVER.Class 属性以包含值 model.WebStarterAppServer
- 然后,属性部分应如下所示:
IFS.SERVER.Class = model.WebStarterAppServer
IFS.SERVER.SESSION.User = system
- 单击 OK 保存 TestWebStarterAppServerConfig Server。
- 在 Server Configuration 页上,单击页面顶部的 Domain 链接以返回到 Oracle CM SDK 主页。
- 单击 Configuration 标题下的 Node Configurations。
- 选择当前的 HTTP 节点并单击 Create Like。
为 HTTP Node 输入以下信息:
- 名称:TestHttpNode(注意:可以输入任何名称)
- 选择 Active。
- 在 Servers 部分中,选择 HttpAdminServerConfiguration 并单击 Remove。
- 在 Servers 部分中,单击 Add。在 Add Server 页上输入以下信息:
- 名称: WebStarterAppServer
- 配置: TestWebStarterAppServerConfig
- 服务: IfsDefaultService
- 初始优先级: 5
- 选择 Active 和 Initially Started
- 选择 OK。
- 在 New Node Configuration 页面上选择 OK。
创建一个 OC4J 实例
- 在应用服务器控制中的应用服务器主页上,单击 Create OC4J Instance。
- 输入 OC4J Instance Name:TestInstance
- 单击 Create。
- 在 Oracle CM SDK 中间层中,导航到
ORACLE_HOME/j2ee/TestInstance/config/oc4j.properties。
- 首先,创建 oc4j.properties 文件的备份。然后添加以下行:
IFS.DOMAIN.NODE.IfsHome=ORACLE_HOME/ifs/cmsdk IFS.DOMAIN.Name=ifs://db_host:db_port:db_service:cmsdk_schema IFS.DOMAIN.NODE.Name= TestHttpNode IFS.DOMAIN.NODE.OracleHome=ORACLE_HOME/
注意:可以在 ORACLE_HOME/j2ee/OC4J_iFS_cmsdk/config/oc4j.properties 中找到这些行。将这四行复制到 TestInstance 的 oc4j.properties 中,然后更改 IFS.DOMAIN.NODE.Name 以匹配已经创建的 TestHttpNode。
- 保存文件。
- 在 Oracle CM SDK 中间层上,导航到
ORACLE_HOME/opmn/conf/。在此目录中,您将找到一个名为 opmn.xml 的文件。先备份此文件,然后继续操作。
- 向下滚动到此文件的底部,然后找到 OC4J_iFS_cmsdk 条目。将 OC4J_iFS_cmsdk 中的以下环境部分内容复制到 TestInstance 部分:
<environment> ??<prop name="PATH" value="E:\Portal90201\bin"/> ??<prop name="NLS_LANG" value=".UTF8"/> </environment>
- 保存 opmn.xml 文件。
- 停止流程管理器 (OPMN),然后重新启动它。
对于 Windows:在 Services 中,重新启动 %ORACLE_HOME%ProcessManager 对于 UNIX:使用下列命令:
opmnctl stopall
opmnctl startall
将 WebStarterApplication 部署到 TestInstance
- 从应用服务器控制中的应用服务器主页中,单击 TestInstance 链接。
- 单击 Deploy EAR File,然后单击 Next。
- 在 Select Application 页面上,输入下列值:
- J2EE Application:WebStarterApp EAR 文件的位置
- Application Name: TestWebStarterApp(注意:可以选择所需的任何名称)
- 单击 Next。
- 在 URL Mapping for Web Modules 页面上,采用缺省值 /webstarterapp(注意:可以输入任何名称。)
- 单击 Finish,然后单击 Deploy。
重新启动 Oracle CM SDK 域和 OC4J 实例并访问应用程序
- 返回到应用服务器控制中的应用服务器主页。
- 选择 Oracle CM SDK 域链接。例如:
- 10g (9.0.4) 中的内容管理 SDK (my_cmsdk_schema)
- 版本 2 (9.0.3) 中的 iFS_myhost:1521:myhost.us.oracle.com:MY_SCHEMA
- 单击 Start Local Components。输入操作系统管理员用户名和口令,然后单击 OK。
- 返回到应用服务器主页。选择 TestInstance 并单击 Restart。
- 在新的浏览器窗口中,输入以下 URL:
http://hostname.domain:port/webstarterapp
然后,输入 Oracle CM SDK 用户名和口令。
使用 Oracle JDeveloper 嵌入式 OC4J 服务器设置开发环境
本部分介绍了下列方案:
设置开发计算机(单一套件)
- 建立 Oracle 应用服务器。
- 安装并配置 Oracle CM SDK,创建 Oracle CM SDK 域、OC4J 实例以及其他组件。
- 安装 Oracle JDeveloper。
- 解压缩 webstarterapp.ear 文件。
- 在 JDeveloper 中:
- 使用 webstarteapp.ear 文件中的 webstarterapp.war 文件创建一个新项目。
- 在 Project Properties > Libraries 下:
- 编译项目。
- 使用应用服务器控制:
- 在 Oracle JDeveloper 中:
- 测试
- 在应用服务器控制中:
- 在 Oracle JDeveloper 中:
设置开发计算机(两层)
A 框
- 安装 Oracle 应用服务器。
- 将 Oracle CM SDK 安装到 Oracle 应用服务器 Oracle 主目录中。
- 配置新的 Oracle CM SDK 模式。
B 框
- 安装 Oracle 应用服务器。
- 将 Oracle CM SDK 安装到 Oracle 应用服务器 Oracle 主目录中。
- 配置 Oracle CM SDK,选择根据现有域进行配置的选项。当系统提示时,取消选择 Domain Controller 和 Node(只保持 HTTP Node 的选中状态)。
- 将 Oracle JDeveloper 安装到单独的 Oracle 主目录中。
- 解压缩 webstarterapp.ear 文件。
- 在 Oracle JDeveloper 中:
- 使用 webstarteapp.ear 文件中的 webstarterapp.war 文件创建一个新项目。
- 在 Project Properties > Libraries 下,创建一个指向以下位置的新库(名为 CMSDK):
iasHome/ifs/cmsdk/lib/cmsdk.jar; iasHome/jlib/uix2.jar; iasHome/jdbc/lib/classes12.jar; iasHome/jlib/emPid.jar; iasHome/jlib/gss-1_1.zip
注意:Windows 用户在指定路径名时应使用反斜杠。
- 使用应用服务器控制:
- 在 Oracle JDeveloper 中:
- 在 Project Properties > Runner 下,设置虚拟计算机 Java 选项为:
-DIFS.DOMAIN.Name=your_domain -DIFS.DOMAIN.NODE=yourNodeName
注意:
- 运行前可以选择关闭编译 (Project Properties > Runner > Options)。
- 将缺省运行目标设置为 index.jsp。
- 使用应用服务器控制:
- 重新启动 Oracle CM SDK 域(从 A 框中)。这确保您的 HttpNode 是域的一部分,并且您需要 Oracle JDeveloper 启动它。将请求由 WebStarterAppServlet 运行 Http 节点。
- 重新启动 Oracle CM SDK OC4J 实例(对于 A 框和 B 框)。
注意:您不必在每次从 Oracle JDeveloper 中运行 Web 应用程序时重新启动 Oracle CM SDK 域,除非您更改了服务器类 WebStarterAppServer。但如果遇到问题了,可以尝试执行此操作。
- 在 Oracle JDeveloper 中:
- 运行此项目。将出现登录页。
- 尝试使用 guest 登录。
- 可以在以下位置找到日志文件:
JDeveloperHome/jdev/workspace/workspace-oc4j-app.log
注意:再次运行此项目之前,确保终止嵌入的 oc4j 服务器。
设置独立开发环境
此设置只适用于开发,不应在生产中使用。这一设置避免了在开发计算机上安装 Oracle 应用服务器和 Oracle CM SDK。但由于它需要使用模式口令,因此它并不安全。
- 假设 Oracle 应用服务器和 Oracle CM SDK 已安装在另一台计算机上。
- 安装 Oracle JDeveloper。
- 解压缩 webstarterapp.ear 文件。
- 在步骤 5 中将以下列出的所需 jar 复制到开发计算机。
- 在 Oracle JDeveloper 中:
- 使用 webstarteapp.ear 文件中的 webstarterapp.war 文件创建一个新项目。
- 在 Project Properties > Libraries 下:
- 编译项目。
- 在 Oracle JDeveloper 中:
- 在 Project Properties > Runner 下,设置虚拟计算机 Java 选项为:
-DIFS.DOMAIN.Name=your_domain -DIFS.STANDALONE.Mode=true -DIFS.SCHEMA.PASSWORD=your_schema_password
- 运行前可以有选择地关闭编译 (Project Properties > Runner > Options)。
- 将缺省运行目标设置为 index.jsp。
- 在 JDeveloper 中测试:
- 运行此项目。将出现登录页。
- 尝试使用 guest 登录。
- 可以在以下位置找到日志文件:
JDeveloperHome/jdev/workspace/workspace-oc4j-app.log
注意:再次运行此项目之前,确保终止嵌入的 oc4j 服务器。
版权所有 (C) 2004,甲骨文公司。保留所有权利。
|