扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在这个由两部分组成的系列文章的 第 1 部分 中,我们将介绍如何使用 Domino XML(也称为 DXL)集成 Lotus Domino 和 IBM WebSphere。DXL 可以让您访问 Domino 对象,而不用了解太多有关 Lotus Domino 的知识。然而,具有一些 Java 方面的经验对于使用 DXL 方法来说也是必要的。对于那些 Java 经验很少的 Notes 应用程序开发者来说,可以使用 Lotus Domino Toolkit for WebSphere Studio 中提供的 Domino JSP 标签库。(这个工具包在 Lotus Notes/Domino 6.0.2 及更新的版本中可用,用户可以从 Passport Advantage 下载这个工具包。)
从 Lotus Domino 6 开始,Lotus 提供了两个 JSP 标签库。这两个标签库让程序员可以开发与 J2EE 兼容的应用服务器上的 Lotus Domino 进行交互的 J2EE 应用程序。在可以使用标签库之前,那些想要将自己的应用程序与 Lotus Domino 连接的 JSP 开发者必须把 CORBA 和 IIOP 调用构建在应用程序中。这导致很大的复杂性,并且经常需要使用一些特定于数据库的代码,这些代码几乎是不可重用的。随着协作能力需求的增长,需要一种更智能的、功能更强大的解决方案。
Lotus 了解到了这种需求,因此创建了两个标签库,它们对通用的 Lotus Domino 和 J2EE 功能进行了抽象和封装。这些库是在标签库描述符 domtag.tld 和 domutils.tld 中定义的。Domutils.tld 定义了处理所有 J2EE 应用程序通用的任务的工具标签。这些标签不是 Lotus Domino 特有的,可以独立于 Domino 服务器应用于任何应用程序。在 domtag.tld 中定义的标签是 Lotus Domino 特有的。它们提供了对所有的 Domino 元素的编程访问能力,包括设计、访问控制列表和文档。在本文中,我们将着重介绍 Domino 特有的标签(在 domtag.tld 中定义的标签)。从现在开始,我们就将其简称为 taglib。
开始之前
taglib 比第一篇文章中所介绍的 XML 方法需要更深入的 Lotus Domino 方面的知识。它使用了 Domino 框架中的一些专用术语和控件。为了有效地使用 taglib,重要的是您要深入理解 Lotus Domino、各种设计元素以及您要访问的数据的结构。对第 1 部分的路线图部分进行回顾可以帮助您确定这种方法是否更适合于您和您的应用程序。
需求
taglib 遵守 JSP 1.1 和 Servlet 2.2 规范,支持大部分 J2EE 兼容的应用服务器。本文中的例子要安装到 IBM WebSphere Application Server 5.1 上,并使用 WebSphere Studio Application Developer 进行开发。本文假设您熟悉 Domino 对象和术语,并且了解使用 WebSphere Studio Application Developer 进行 J2EE 编程的基本知识。
注意:如果不准备让 Lotus Domino 来处理 IIOP,在使用 taglib 时就不需要任何 CORBA 或 IIOP 编程的知识。
软件需求如下:
准备 Lotus Domino
taglib 使用 CORBA(Command Object Request Broker Architecture)和 IIOP(Internet Inter-ORB Protocol)技术与 Lotus Domino 进行通信。您必须设置 Domino 服务器监听 IIOP 请求。首先,确保已经安装了 DIIOP。在 Domino 终端中执行 show task 或 load diiop 命令,可以帮助判断现在是否已经安装了 DIIOP。如果还没有安装,请从 Domino 安装光盘上安装 DIIOP。
接下来,编辑 Domino 服务器的 Notes.ini 文件,设置为在启动 Lotus Domino 时自动加载 DIIOP。找到以 ServerTasks 开始的那一行。在本行的最后,添加 diiop。重新启动 Domino 服务器,并检查是否有 DIIOP 服务器的启动消息。
图 1. 在服务器启动过程中启动 DIIOP 进程
在 DIIOP 进程启动时,它在 Domino HTTP 根目录(Windows 中 Domino 默认的安装目录为 C:\lotus\domino\data\domino\html)中创建一个名为 diiop_ior.txt 的 IOR(Internet Object Reference)对象。如果您使用 Lotus Domino 作为 HTTP 服务器,就必须告诉 DIIOP 将这些文件放到您的 HTTP 服务器的根 HTML 目录中。
图 2. Server 文档的 DIIOP 部分
使用一个 Web 浏览器测试并查看该文件是否可以访问:http://127.0.0.1/diiop_ior.txt
图 3. Web 浏览器中的 diiop_ior.txt 文件
|
配置 J2EE 应用程序环境
要使用 taglib,需要两个 JAR 文件:NCSO.jar 或 Notes.jar(请参阅侧栏)和 domtag.jar。
注意:如果您有多个 Web 应用程序使用 taglib,请将这些文件拷贝到应用服务器的共享库目录中。
<taglib id="domtags"> <taglib-uri>domtags.tld</taglib-uri> <taglib-location>/WEB-INF/domtags.tld</taglib-location> </taglib> |
下面是一个 web.xml 文件的例子:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app id="WebApp"> <display-name>ArticleWeb</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <taglib id="domtags"> <taglib-uri>domtags.tld</taglib-uri> <taglib-location>/WEB-INF/domtags.tld</taglib-location> </taglib> </web-app> |
|
设置默认的参数
taglib 有很多上下文参数(Context Parameter),您可以在 web.xml 文件中进行设置。我们高度推荐您尽可能利用这些应用程序范围的参数,这样可以提高程序的可移植能力,并且简化将来的维护工作。
在我们的例子中,我们设置了主机名(127.0.0.1)和数据库(articleSample.nsf)作为上下文参数,它们分别是 lotus.domino.default.host 和 lotus.domino.default.dbname。
要这样设置,请打开 web.xml,然后添加以下行并保存。
<context-param id="dominohost"> <param-name>lotus.domino.default.host</param-name> <param-value>127.0.0.1</param-value> </context-param> <context-param id="dominodbname"> <param-name>lotus.domino.default.dbname</param-name> <param-value>articlesample.nsf</param-value> </context-param> |
|
使用 domtags
在接下来的部分中,我们将使用在上一篇文章中使用的 Car 数据库。我们将构建 4 个 JSP,它们分别实现以下功能:
在开始之前,您必须在所有使用 taglib 的 JSP 中都包括这个 taglib 的声明。它告诉应用服务器每个以单词 domino 开始的标签都是对domtags 标签库描述符中一个项的引用。例如, <domino:db>。(尽管您可以使用不同的前缀,但是我们高度建议使用 domino 作为前缀。)
<%@ taglib uri="domtags.tld" prefix="domino" %>
显示文档
我们首先创建一个简单的 JSP 来显示一个 Notes 文档的内容。它利用一个单独的查询字符串 uid,其值为所请求文档的惟一 ID。在 JSP 编辑器中,创建一个新的 JSP disptagcar.jsp。首先输入前面提到的 taglib 声明。包括一个包含 lotus.domino.* 的 import 行是一个好主意,因为这样可以允许您直接访问 Domino 对象。后面我们会使用很多这种声明。
<%@ taglib uri="domtags.tld" prefix="domino" %> <%@page import="lotus.domino.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Vehicle information using Domino Tag Library</title> </head> <body> <h1>Vehicle information using Domino Tag Library for <%= (String) request.getParameter("unid")%></h1> <domino:document> <table border="1" width="100%" cellspacing="0" cellpadding="0"> <tr bgcolor="#ccff00"> <th>Make</th> <th>Model</th> <th>Body Type</th> <th>Engine</th> <th>Year</th> <th>Specifications</th> </tr> <tr> <td> <domino:item name="make"/> </td> <td> <domino:item name="model"/> </td> <td> <domino:item name="bodytype"/> </td> <td> <domino:item name="enginetype"/> </td> <td> <domino:item name="year"/> </td> <td> <domino:item name="specifications" format="<LI>"/> </td> </tr> </table> </domino:document> </body> </html> |
<domino:document> 标签可以显示 Notes 文档的内容。使用这个标签,您的代码可以访问一个特定文档的所有项目和属性。在某些情况中,您可能希望为文档标签中的 dbserver、dbname 和 unid 属性传递值。注意在我们的例子中不会这样做。原因是由于必需的信息早已在其他地方指定了。服务器的主机名和数据库的文件名早已在 Web 部署描述符(web.xml)中定义了。UNID 是在查询字符串参数 unid 中隐式指定的。
如果由于某些原因,您不想在 URL 中暴露这个 UNID,那么就必须在 unid 属性中明确地说明文档标签。
<% String unid = [[code that obtains the document unid]]; %> <domino:document unid=’<%= unid %>’> |
<domino:item> 标签显示了在 name 属性中指定的项目的内容。例如,<domino:item name="make"/> 显示了保存在 make 项中的值。引用 specifications 字段的最后一个标签具有一个 format 属性。这个属性告诉标签库如何显示 JSP 中的值。为这个属性提供的值称为关键字(keyword)。在一个 format 属性中,可以使用多个关键字。
回想一下,specifications 字段是一个多值字段;它可以包含多个值。<li> 关键字告诉 <domino:item> 标签对 <li> 和 </li> 标签中的内容自动进行换行。
显示视图的内容
Domino 视图可以通过 <domino:view> 标签进行访问。例如,在我们的 car 的例子中,有一个简单的视图 Cars\By VIN,它有两列:vin 和 make。这个视图还有一个别名 vins,这就是我们在视图标签中要引用的内容。
图 5. Notes 客户机显示 VINs 视图
下面是用来将 VINs 视图显示为 HTML 文件的 JSP 代码。
<%@ taglib uri="domtags.tld" prefix="domino" %> <%@page import="lotus.domino.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <% String count = "30"; if(request.getParameter("count")!=null); count = (String)request.getParameter("count"); %> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Car List using Domino Tag Library</title> </head> <body> <h1>Car List using Domino Tag Library</h1> <domino:db> <table border="1"> <tr bgcolor="#ffcccc"> <th> VIN </th> <th> Make </th> <th> Model </th> </tr> <domino:view viewname="vins" max="<%= count %>"> <domino:viewloop> <tr> <td> <domino:formlink href="disptagcar.jsp" > <domino:viewitem name="vin" /> </domino:formlink> </td> <td> <domino:viewitem name="make" /> </td> <td> <domino:item name="model" /> </td> </tr> </domino:viewloop> </domino:view> </table> </domino:db> </body> </html> |
查看视图的 JSP
下面让我们考查一下上面这个 JSP。在下一节我们将使用这个 JSP 来构建一个搜索页面。
<domino:viewitem name="vin" />
<domino:viewitem name="make" />
<domino:item> 和 <domino:viewitem> 之间的区别如下:<domino:item> 必须打开文档才能检索值,而 <domino:viewitem> 则使用视图中显示的值。只要可能,在 viewloop 的上下文中就应该避免使用 item 标签,因为这样可能会造成严重的性能问题。
|
视图搜索
在本节中,我们将讨论如何修改所创建的视图 JSP,从而让它可以支持搜索功能。
要正确使用全文搜索功能,必须激活 Domino 数据库的全文索引。要查看一个数据库是否进行了索引,请打开 Database Properties 对话框,并点击 Search 选项卡。如果数据库没有进行索引,那么就点击 Create Index 按钮。Notes 客户机的状态条会告诉您这个请求是否已经排入了队列。全文索引通常很快就可以建好。
图 7. 数据库全文索引属性选项卡
我们的搜索表单会包含这三个字段用于一个可定制的搜索:查询,返回结果的最大个数,结果页面中每页显示的个数。我们使用上一节中的视图 JSP 作为这个 JSP 的基础。
下面是这个 JSP 代码中处理搜索功能的部分:
<domino:view viewname="vins" ftsearch='<%= query %>' max='<%= max %>'> <domino:page rows='<%= count %>'> <tr><td colspan="3" align="right">Go to page: <domino:pagebar navstyle="NextPrev" /> <domino:pagenext>Next></domino:pagenext></td></tr> <domino:viewloop> <tr> <td> <domino:formlink href="disptagcar.jsp" > <domino:viewitem name="vin" /> </domino:formlink> </td> <td> <domino:viewitem name="make" /> </td> <td> <domino:item name="model" /> </td> </tr> </domino:viewloop> <domino:novalues> <tr> <td> The search for <%= query %> found no matches. Use another keyword and try again. </td> </tr> </domino:novalues> <tr><td colspan="3" align="right">Go to page: <domino:pagebar navstyle="NextPrev" /> <domino:pagenext>Next></domino:pagenext></td></tr> </domino:page> </domino:view> |
查看 Search 视图的 JSP
下面让我们更详细地查看一下 Search 视图的 JSP。
|
表单
在这最后一节中,我们会创建一个 JSP 表单,用户可以使用这个表单来创建并修改 Notes 文档。出于简单性的考虑,我们的示例数据库允许匿名作者访问。在真实生活中的应用程序中,安全性实在是要关注的一个问题,更明智的方法是使用一个集中的用户注册(例如 LDAP),并采用单点登录(SSO)功能。将 WebSphere 设置为一个可信的容器,为 Lotus Domino 处理授权和认证的功能。有关 WebSphere 和 Lotus Domino 的 SSO 的更多信息,请参阅 WebSphere Application Server InfoCenter。
我们的表单提供了以下特性:
这个 Form JSP 的详细代码,请参阅“Form JSP 代码”。
form 标签
<domino:form> 标签提供了对指定文档的编辑访问能力。它可以支持很多用来支持高级操作主机的属性。在我们的例子中,使用了更通用的一些属性。下面让我们仔细查看一下:
现在,让我们来查看一下使用的 validation 标签:
document 标签
<domino:document> 标签提供了对 Notes 文档本身的访问能力。id 属性的存在标记着 taglib 分配一个名称为 id 标签中的值的 lotus.domino.Document 对象。在我们的例子中,这个对象是 doc。这为程序员提供了完全编程访问该对象的属性和方法的能力;在普通的 Java 代码中可以对 taglib 进一步地扩展使用。这个功能强大的工具在 taglib 中的大部分标签中都可以使用。要学习更多有关 Domino Java 类的知识,请参阅 Domino Designer Help。
|
结束语
在本文中,我们讨论了如何使用 Domino JSP 标签库进行编程,从而构建功能强大的启用 Domino 的 J2EE 应用程序。通过几个例子,我们讨论了最常用的标签,并详细介绍了它们背后的概念。本系列文章中介绍的内容应该可以帮助您在现有的 Domino 环境中采用 J2EE 技术。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者