转载自:http://liuyp2003.javaeye.com/blog/775352
1、 Q:DOMCFG登陆时在最下方出现登陆按扭
A:把<div style="display:none">加到最后面
2、 Q:新装了服务器,拷贝了DOMINO目录建其他服务器时仍然启动初始目录的服务器
A:要修改注册表以下项目:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LotusDomino
Server(LotusDominoData)
3、Q:启动时提示Received the following error performing a update server's
A:如果是启动SRV时报错,全限定主机名输入值,如果是启动客户端NAMES库缺省用户设置为读者。
4、Q:Lotus Domino在AIX上无法取出数据
unix下的""是个正常的字符.所有路径都是"/"分隔的.
5、Q:在web页面向用户发邮件时填<A href="mailto:[email protected]">[email protected]在用outlook收信时在收件人地址显示的是[email=test/[email protected]],怎么改成<A href="mailto:[email protected]">[email protected]
A:在names.nsf中把用户的电子邮件地址也写上
6、Q:R6以上数据库损坏
A:删除索引-重建-压缩-修复(向日志文件报告所有被处理的数据库\修复事务记录数据库)-更新索引
7、Q:在Domino服务器上安装LEI 6或7失败,没有任何错误信息
8、Q:邮件出现"No route found to domain"
9、Q:如果注册的用户登陆不了
10、Q:单独重启HTTP服务
11、Q:如提示服务器正在使用此文件
12、Q:改了文件夹名而引起的路径问题
13、Q:把Lotus的整个目录从一台服务器拷到另一台服务器时.HTTP服务有时出现莫名奇妙的问题.如页面无法显示,HTTP突然停止服务等.
14、Q:在Lotus里面如果把页面为作HTML时有时会出现空白的情况,但是打开页面重新保存一下就又没问题了.
15、Q:想从字符串中查找空格的位置,发现Instr和Instrbp都有问题。1.Instr("any string has space in it"," ")==0 2.代理中Instrbp("某些中文","")会让notes或domino蹦掉。
16、Q:在用Lotus iNotes的离线功能开发数据库的时候,发现Lotus iNotes一旦执行离线同 步后就会把数据库的所有代码,公式,视图列公式,代理等全部隐藏.打开表单时提示"隐藏的公式"但还可以看到表单的设计,但是公式等全不见了.再打开代理和视图看看发现均没有代码了部分代理却又没有问题.Lotus iNotes还有一个问题就是会把同名的处于不同文件夹下面的数据库一 起执行同步.但是在本地 的Lotus iNotes Data目录下却找不到这个数据库.查看Dolslog.nsf日记库确实发现有iNotes同步了不同目录下的同名数据库(即使是不同名只要是同一数据库的拷贝就会被同步).这样造成了多个备份在Lotus\domino\data目录下的数据库设计被全部被隐藏.
17、 Q:当你用另一个表单来显示一文档的时候(如:用A表单创建的文档用B表单来显示时),当文档处于编辑状态下时且把RTF域设置为计算.这时会发现RTF域的格式混乱.无端多出N个< UL>标签来,而文档中的RTF域值并无< UL >标签.也就是说在RTF域计算显示时出现的.
18、 Q:在表单或页面中的JS Header中带有try
19、Q:在Lotus如果把JS文件放在页面中,如test.js然后再在其它页面中包含此js文件,经常会出现test.js文件内容被清空的bug即test.js文件不明不白的被清空了,在ie中访问test.js看到的也是空白。
20、Q:如果一个页面中的隐藏条件太多或者过于集中都将造成隐藏条件或公式失效,特别是对表格进行隐藏时表现为连动的方式,即:修改一个单元格的隐藏条件,其它单无格的隐藏条件也产生相应变化.
A:解决方法是:修改一处隐藏条件后关闭表单或页面,关闭后再次打开,然后再查看隐藏条件.再设置相应的隐藏条件一般都可以解决问题. 如果同一文档中 有相同域名的域超过一个以上(一 般由程序或代理产生).隐藏条件 在读状态下无效.第二个同名域的内容无法隐藏.
21、Q:bs模式下,表单中有一个复选框域,选中其中的某些值然后提交,这时候你的提交按钮如果是@command([filesave]);@command([fileclosewindow]),则没问题,如果是用js写的:document.forms[0].submit(),嘿嘿,问题来了。看下面:然后在编辑模式下打开刚才这
个文档,取消所有选中项,再保存,下次打开的时候,呵呵,修改结果没变化
22、Q:在对数据库进行签名时经常碰到数据库签名成功0个错误,签名时间很快一闪而过。
23、Q:当你使用set doc=NotesDatabase.GetDocumentByUNID(uid)
方法时,如果uid文档不存在,那么Lotus直接报错为无效的文档ID号,而不是返回一个空对像.这样我们就无法用
set doc=NotesDatabase.GetDocumentByUNID(uid)
then
来忽略这个错误.当然你也可以进行错误跳转,可以看到Return value中没有说明当参数错误时返回一个什么值?事实上是直接报错了.
24、Q:把domino设置成一个用来发信的smtp服务器(可以不收信).按照缺省设置,发信的时候总是说地址当中包含非ASCII字符.
25、Q:怎样屏蔽文档保存冲突当文档保存冲突时,怎样屏蔽掉系统的信息框,而弹出自己的消息框?
26、Q:当Notes异常退出时,系统信息通常提示要重新启动计算机。是否有办法不重启计算机而马上开始Notes?
27、LOTUS已知限制数据库的最大大小是多少?
28、怎样最大限度的提高Domino下Web应用的速度(公式篇)
29、Q:全文索引特定的词"Topic"会产生错误,在一个已经创建了全文索引的数据库中,无论是通过视图中的索引框,还是LotusScript中的程序索引,当针对"Topic"这个词进行索引时,都会返回错误信息:"Query not understandable."或者中文报错
30、Q:将自己从管理员中删除了,有难度的挑战!
的口令,然后打开要操作的数据库,直接修改acl。
31、Q:当管 理员被开除后带走所有的ID,你该怎么办?
32、我们做为管理员应该做些什么?
此表列出了系统管理员每天、每周或每月应当完成的服务器维 护任务,以确保服务器高效运行。任务频率
备份服务器每天、每周、每月
监控文件路由每天
运行Fixup任务以修复所有被毁坏的数 据库*
服务器启用和需要时
监控共享邮件数据库(MAILOBJ.NSF)每天
监控Administration Requests数据库
(ADMIN4.NSF)每周
监控需要维护的数据库每周
监控复制每天
监控调制解调器通讯每天
监控内存每月
监控磁盘空间
每天、每周、每月
监控服务器负载每月
监控服务器性能每月
监控Web服务器请求每月
监控服务器群集每天
*
如果数据库为Domino R5格式数据库并且没有使用事务记录,则可以使用Fixup任务修复损坏的数据库。如果数据库为Domino R5格式数据库并且使用了事务记录,则无法在此数据库上运行Fixup任务,这是因为Fixup任务干扰事务记录保持数据库跟踪。必须从备份恢复损坏的数据库。仍可以在Domino R4.x和更低格式的数据库上运行Fixup任务。
33、关于定时关闭服务器的方法
34、id被盗记录
35、怎样设计表单来跟踪文档的作者?
@If(@IsNewDoc ;@UserName; From),这样这个域就记录了这片文档的作者了。
36、在调试Lotus Domino程序时,经常会触发执行qnc.exe程序并退出Notes,如何解决?
答:在调试Lotus Domino/Notes程序时,由于程序设计的问题,我们经常会触发执行qnc.exe程序,并提示错误。其实qnc.exe执行目的只是Notes的内存保护性措施,并不一定是程序本身有错误。为了便于调试程序,我们可以在LotusDomino指令窗口内键入qnc _u,使其暂停运行。如果想恢复时可以再用qnc _i指令装载它。
37、在R5中如何将一个DominoWeb服务器配置为多个Web站点--虚拟服务器
**注意:在R4.6中每个虚拟服务器必须有自己单独的IP地址.
下面介绍如何创建虚拟服务器文档:
如何显示虚拟服务器文档:管理员启动Domino
38、怎么记录用户退出
39、将一个普通html中的表单提交给notes数据库,用html中form的Action可以指定notes的某个代理。
html的表单这样写:
<form.
name=form1 action="<A
href="http://servername/path/dbname.nsf/agentname">http://servername/path/dbname.nsf/agentname"
method=get>
<!--method必须是get!-->
<><INPUT id=text1
name=openagent></P>
<!--第一个的name必须是openagent!-->
<><INPUT
id=text2
name=text2></P>
<!--可以在加若干个input!-->
<><INPUT
id=submit1 type=submit value=Submit
name=submit1></P>
</form>
代理这样写:
Dim
s As NotesSession
Set s = New NotesSession
Dim str as
String
str=s.documentcontext.query_string_Decoded(0)
'这个得到html表单中提交的所有域(文本匡等)输入的数据,包括域名称和 域的内容
Print
str
'你可以根据这个str生成一个new document,根据内容加入域
40、Notes数据库中文件夹和视图的限制
句柄(handle)数目的上限是10495.当库中的文件夹和视图数目接近限制时,Notes会报内存溢出方面的错误,类似下面的这些错误信息:
对于Notes
R5.X
"Maximum number of memory segments that Notes can support has been
exceeded"
对于NotesR6.X
"Insufficient memory - too many design elements
(Desk Design Pool)."
当如果一个数据库中包含了很多文件夹, Notes将会为每一个视图或者文件夹分配内存.最终,
Notes将无法获得足够的内存,因为它无法跟踪获得所有内存的位置信息.(根本原因就是最大句柄数的限制.)可选择的规避办法就是在数据库中将文件夹和视图的数目维持在合理的范围之内.或者缩短文 件夹或者视图名字的长度.
41、服务器备份范围保存
原始Domino\Data目录的cert.id
应用数据库 mail目录等数据库内容、保存原始Notes\Data目录的user.id。
备份domino\notes.ini文件、备份数据库(在domino\data下):
*.dsk、names.nsf、admin4.nsf、bookmark.nsf、busytime.nsf、catalog.nsf、certlog.nsf、certsrv.nsf、events4.nsf、log.nsf
mail*.box、mail\*.*、nntppost.nsf、statmail.nsf、statrep.nsf、webadmin.nsf、所有IDs:*.id\备份
42、HTTP提交附件限制(在ADMINISTRATOR中的INTERNET协议中)
43、实现批量刷新数据库设计
( Byval dbName As String, hdb As Long) As Integer
( Byval hdb As Long ) As Integer
(Byval Server As String, Byval hdb As Long, Byval dwFlags As Long, _
44、对门户网站邮件拒收的确认信
尊敬的用户pennykristy:
您好!
十分抱歉给您带来的不便,您的问题可以用以下方法解决:
如果您是别的网站的邮箱管理员,贵网站的邮箱给新浪发邮件发不过来,请您用贵网站的邮箱给我们的工程师发一封邮件,主题是:有关给新
浪免费邮箱发信问题
在邮件内容中,请写明:单位名称、发件服务器IP地址、联系方法、联系人、邮件地址、电话、地址,发送给<A
href="mailto:[email protected]">[email protected]
工程师会和您联系的。
希望我们的回答能令您满意!
若还有问题,请您注意回信的时候一定要将上次回信附上,以 便解决您的问题。
更多 常见问题答疑请见:<A
href="http://tech.sina.com.cn/focus/sinahelp.shtml">http://tech.sina.com.cn/focus/sinahelp.shtml
谢谢您对新浪的支持
<A href="mailto:[email protected]">[email protected]
2005-05-18
17:22:42
13号客服专员竭诚为您服务
新浪全国统一服务热线95105670(免长途费)
45.批量刷新邮件设计
46、如何更改验证者标识符(Cert.id)的口令
47、管理单个数据库中的多语言输入可以向任意的URL命令中添加charset=[MIME charset name]参数来返回指定字符集中所要求的表单或页面,而不管浏览器中设置的首选语言。服务器不能自动生成charset=[MIME charset name]参数。它必须内置在应用程序中。
语法
这里:
用法
样例
参数,则销售人员可以使用同一数据库中的英语、日语和俄语字符集。服务器接到命令后,它将返回指定字符集中的目标表单。将返回使用日语字符集的目标表单的URL
命令显示如下。
<A href="http://www.mercury.com/sales.nsf">http://www.mercury.com/sales.nsf...
m&charset=Shift_JIS
48、修复损坏数据库的方法
如果在数据库中遇到损坏,可以使用以下任何一种方法来尝试 修正问题。由于损坏对记录的
R5数据库并不是大问题,这些方法主要用来解决
R4数据库和未记录的R5数据库中的损坏问题。
运行Fixup
修正损坏的视图和文档。
运行Updall修正损坏的视图和全文索引;如果视图损坏,请在运行Fixup之前运行Updall。
运行
Compact修正Fixup没有纠正的损坏问题;如果数据库是R5数据库,使用-C选项。
按SHIFT+F9键重建一个视图;按
CTRL+SHIFT+F9键重建数据库中的所有视图。
49、为Web定制“表单已处理”确认信息
Web
用户提交文档后,Domino使用缺省的“表单已处理”的确认信息回应用户。要重新设置缺省答复,可将计算文本域添加到表单中,给此域
命 名为
$$Return,并使用HTML作 为计算值来创建定制的批准。
显示个人化答复
下面的$$Return公式返回答复“Thank
you”,并附加上用户姓名:
who:= @If(@Left(From; " ") = ""; From; @Left(From; "
"));
@Return("<h2>Thank you, " + who +
"</h2><br><h4>
<a
href=/register.nsf/Main+View?OpenView>Main
View</a>");
50、显示定制的错误消息
要定制显示给Web
用户的错误消息外观,向数据库中添加定制的错误消息表单。 如果发生错误条件,且其定制表单存在,则Domino
使用定制
表单来显示错误消息。否则,Domino
使用缺省错误消息表单。添加到数据库的消息表单将覆盖由管理 员设置的服务器范围内的消息。
要在表单和错误条件之间创建关联,创建拥有下列名称之一的表单。然后创建名为
MessageString的可编辑的文本域来保存错误消息。添加要
与错误消息一起显示的其他文本、链接以及其他表单对象。表 单名称
条件
$$ReturnAuthenticationFail
$$ReturnAuthorizationFailu
用户对该数据库没有足够的存取级别。
$$ReturnDocumentDeleted成功删除文档。
$$ReturnGeneralError
出现了其他错误条件。
链接到另一页面
根据提交文档中的域值,在HTML中包括链接到另一页面的URL。下面的$$Return
公式根据用户选择的范围返回答复。例如:如果用户选择
欧洲,则消息“在意大利访问我们的站点”将显示一个链接,可链接到意大利的Web
站点(假定公式中的“stdAnswer”和“stdFooter”已预
先定义。)。
@If(Region="Asia"; stdAnswer +
"<h2>Visit our site in <a href="<A
href='http://www.japan.lotus.com">Japanhttp://www.japan.lotus.com">Japan</a></h2>"
+ stdFooter;
Region="Europe"; stdAnswer + "<h2>Visit our site in <a
href="<A
href='http://www.lotus.com\it_ciao/it_ciao.htm">Italyhttp://www.lotus.com\it_ciao/it_ciao.htm">Italy</a></h2>"
+
stdFooter;
stdAnswer + stdFooter);
返回另一页面
要跳转到不同的Web页 面,可将页面的
URL用 括号括起来放入页面。当用户提交文档时,Web客户机将显示引用的文档。例如:下面的
$$Return公式显示Lotus
**站点的主页。
"[http://www.japan.lotus.com]"
51、如果希望帮助用户快速创建和阅读文档,请在设计表单时参 照以下指导进行:
设计 表单
避免 使用大的位图或图形。
避 免使用表单属性“自动刷新域”。
相反,请对所选的域使用“按关键字变化刷新域”,或者编写一个
LotusScript.域事件,当用户从特定域移出时重新计算文档或更新其他域。
避免使用包含大量计算域的长表格。
设计域
尽量少用
@DbColumn或@DbLookup公式,或者将它们替换为更快的并支持查错的LotusScript.
程序。
在“条件隐藏”的条件中使用简单公式。
可能的话,避免重新计算域。否则,将这些域修改为“填写时计算”,使它们仅在文档被编写时计算,但是需要的话,可以在将来通过按钮、
操作 或代理更新。
在域 中使用
LotusScript.表单事件而不使用条件公式来设置域值。
例如:要在文档被保存时重新设置状态域,可以为QuerySave事件创建一个
Script,而不必编写一个使用@If(@IsDocBeingSaved;"x";"y")
的公式。
精简域的数目,特别是隐藏域的数目,使用表单事件而不是域 公式来执行逻辑处理并避免不必要的重新计算。
例如:假如表单包含一个隐藏的计算域
State,该域确定文档处于工作流中何处以及需要被发送到何处。通过 在QuerySave表单事件中设置域
值的LotusScript.
程序来替换此域,可以仅在文档被保存时设置域值,而在文档 打开或刷新时不设置域值。
52、代理、servlet和CGI程序的比较
代理、servlet和CGI程序都允许对Domino Web应用程序的功能进行扩展。代理可以通过表单WebQueryOpen和
WebQuerySave事件与Web
应用程序紧密集成。Servlet通过Servlet API类可以获得一些特殊功能,如会话和Cookie
管理。由于Java日益受到人们的青睐,现今使
用servlet而不是CGI程序来开发新产品已成为大势所趋。但是,许多现有的CGI
程序仍在使用。
如果正在编写自己的应用程序并需要为服务器上的某些功能编程,则需对使用哪种类型的程序的选项作出选择。每种类型的程序均有各自的优
点而且可能成为特定情形下的最佳选择。以下是对每种程序类 型的使用建议:
程序 类型
最佳 用途
代理读取或邮寄文档时执行Domino操作的程序。需要按预定时间或当数据库操作发生(如新邮件到来)时运行的 程序。
Servlet
使用标准Java接口(如JDBC)的程序。使用HTTP会话维护或Cookie的程序。复杂或资源密集型Java程序。
CGI程序
需要对系统资源进行低级别访问的程序。通过非Java API与其他产品连接的程序。
以下对这些程序的属性所作的比较对程序的选用很有帮助。
程序可使用哪种语言进行编写?
代理:Java、LotusScript.或Notes
公式语言。这些语言本身均可跨平台使用。
Servlet:Java。本身可以跨平台使用。
CGI
程序:平台脚本语言,即任何能够编译为可执行文件的语言或 跨平台的语言(如Java或Perl)。
程序存储在什么位置?
代理:存储在Domino
数据库中,这意味着代理可以利用数据库复制和群集服务器的 功能。
Servlet:存储在文件系统中,通常是domino\servlet目录。
CGI
程序:存储在文件系统中,通常是domino\cgi-bin目录。
程序以什么方式被Web用户调用?
代理:由WebQueryOpen或
WebQuerySave事件自动调用,或者由OpenAgent
URL(如“http://acme.com/sales.nsf/results?OpenAgent”)
直接调用。代理还可由服务器事件(如新邮件的到来)或预先 的定时安排来触发。
Servlet:直接由
URL调 用。Domino可 识别两种类型的servlet的URL。第一种类型通过名称指定
servlet(例如:
“http://acme.com/servlet/SQLDatabaseQuery?month=june”)。第二种类型指定一个
Domino管理员已经映射到servlet
的文件扩展名(
例如:“http://acme.com/sqlquery.esp?month=june”)。
CGI程序:直接由URL
调用(例如:“http://acme.com/cgi-bin/filesearch?string=widget”)。
服务器何时将程序载入或卸载?
代理:每次调用时装入,执行完毕后卸载。
Servlet:一次性装入;HTTP
任务关闭或重新启动时卸载。与代理或CGI程序相比,这一性能使servlet具有很大的优越性。但是,这也意
味着可以通过多个请求同时访问
servlet类,因此必须保证servlet代 码的线程安全性。
CGI程序:每次调用时装入,执行完毕后卸载。
程序与Domino
的交互方式
代理:LotusScript.和Java代理可使用Domino对象类。公式代理可使用大多数
@function。
Servlet:可通过CORBA (Common Object Request Broker Architecture)接口访问
Domino。
CGI程序:可通过CORBA接口或通过Domino C或C++ API访问
Domino。
程序可获得哪些安全性保障?
代理:要调用代理,Web
用户必须对包含该代理的数据库具有“存放者”或更高存取级别。代理可以以其创建者或用户的身份运行。Domino
的
所有安全特性均适用于由代理执行的操作。
Servlet:对服务器小程序的访问可由“Domino目录”中的文件保护文档来控制。如果小程序通过
CORBA接口访问Domino,则可以指定一个
Domino用户名和Internet口令。Domino的安全性适用于所有CORBA
操作。
CGI程序:对该程序的访问可由“Domino目录”中的文件保护文档来控制。如果程序通过C API来访问
Domino,则会使用服务器标识符。如
果程序使用CORBA接口,则可以指定用户名和Internet口令。两种情况下,均可应用Domino
的安全性。
53、在Domino中运行servlet
样例
编写servlet
要编写servlet,需要一个
Java编译器和servlet的API。二者均可从Sun Microsystem的网站<A
href="http://java.sun.com">http://java.sun.com上获得。可下载
Java Development
Kit (JDK)(其中包含编译器和其他基本工具)和Java Servlet Development Kit (JSDK)(其中包含servlet API
的规范
、servlet的.JAR文件(jsdk.jar)和样例服务器小程序)。Sun站点还提供到Web上其他servlet
资源的链接。
还可以使用各种流行的Java开发环境来编写servlet。为了提供方便,Domino服务器和Designer安装程序中包含
jsdk.jar文件的拷贝。
这与Sun的JSDK提供的文件是完全一样的。
Sun定期更新JDK和JSDK。Domino 5.0
支持JDK 1.1.6和JSDK 2.0。Domino的季度维护版(QMR)经常会结合Sun的升级内容,因此应
该检查QMR
的版本注释以检验被支持的JDK和JSDK版本。
启用Domino支持的servlet
Servlet是由Domino Java
Servlet Manager(HTTP服务器任务的一部分)来装入和调用的。Java支持servlet的运行时间是由Domino
Java
Virtual Machine (JVM)提 供的。HTTP任务启动时,可以自动启动服务器小程序管理者并装入JVM。HTTP
任务将把这些操作的状态信息
写入服务器控制台和日志文件中。
Servlet管理者是由“Domino
目录”的“服务器”文档中的设置来控制的。此设置位于“服务器”文档的“Internet协议”“Domino Web
引
擎”附签上。设置内容如下:
设置选项
Java servlet支持无:(缺省)HTTP任务不装入服务器小程序管理者或
JVM。
Domino servlet管理器:HTTP任务同时装入JVM和servlet管理器。
第三方Servlet支持:HTTP
任务装入JVM,但不装入Domino servlet管理器。这允许使 用第三方servlet管 理器,如IBM公司
的WebSphere
Application Server。
Servlet URL路径URL中的路径,通知Domino此URL指向一个
servlet。缺省路径为/servlet。
类路径一个或多个路径的列表,servlet管理器类加载程序将搜索此列表来查找servlet
及其相关类。此设置允许添加其他路径。可以指定
目录、JAR文件和ZIP文件。路径可以是绝对路径也可以是Domino数据目录的相对路径。缺省为
domino\servlet。
样例:
相对目录路径:domino\servlet
绝对目录路径:
c:\apps\MyServlets
JAR文件:c:\javamail\mail.jar
ZIP
文件:domino\servlet\sql.zip
Servlet文件扩充URL文件扩展的列表,示意Domino某个URL引用了
servlet。列表中的每个扩充必须通过servlets.properties
文件中的指令映射到单一的
servlet。缺省为无扩充。
以下设置控制Java Servlet API HttpSession接 口的Domino Servlet
Manager的运行时间支持。不使用此接口的服务器小程序不受这些设
置的影响。
注释
Domino中的“HTTP会话验证”功能是完全独立的。
设置选项
会话状态跟踪启用:(缺省)servlet管理器定期检查所有
HttpSession实例的用户活动。给定时间段内空闲的会话将被自动终止。
servlet管理器调用实例的
HttpSession.invalidate()成员函数通知servlet该会话已被终止。
禁用:不检查会话的活动状态。
空闲超时时间
等待用户不执行操作的分钟数,此后将终止会话。缺省为30分钟。
最大活动会话允许同时进行的活动的会话数。缺省为1,000
个会话。达到此限制时,空闲时间最长的会话将被终止。
会话持续启用:退出HTTP任务时,servlet管理器将把会话数据保存到Domino
数据目录中一个名为sessdata.ser的磁盘文件中
。会话数据将在HTTP任务再次启动时重新载入。Servlet
已经固定在会话中的对象如果执行
保存。
禁用:(缺省)退出HTTP
任务时放弃所有会话数据。
用JVM加载程序装入servlet类
servlet
管理器类加载程序不会装入使用自身代码、创建定制类加载程序或执行其他某些受限制的操作的类。如果servlet所要求的类不能通
过servlet
管理器装入,可以试用Domino JVM类加载程序进行装入。JVM加载程序通常用于从与Domino一起安装的Java归档系统(特别
是
java.*和lotus.*软件包)中装入类。通过将servlet从Servlet管理者类路径移到JVM类路径,可以强制使用JVM
加载程序而不使
用servlet管理器加载程序来装入服务器小程序。JVM类路径由NOTES.INI变量JavaUserClasses
指定。
设置servlet的属性
单个servlet的特殊属性可以在位于Domino数据目录中名为
servlets.properties的文本文件中指定。可以指定以下属性:
别名
初始化参数
URL映射扩展
servlet
管理器启动时装载
这些属性是由servlets.properties
文件中的指令来指定的。指令的通用语法是:
servlet(s).<name>.<property>=<value(s)>
指令是区分大小写的。servlets.properties
文件还可以包含空行和以“#”号开头的注释行。servlets.properties
文件不是必须进行设置的
。Servlet的缺省属性是:无别名、无初始化参数、无映射扩展并按需要 装入Servlet。
Servlet
别名
别名指令的语法是:
servlet.<alias-name>.code=<class-name>
例如:
servlet.SQLQuery.code=sql.database.query.Servlet
出于安全性的考虑,Domino
不允许servlet名包含将要在servlet URL中使用的周期。这样能够防止恶意用户通过servlet管理器任意加
载Java
包和类。如果服务器小程序有一个包名,则必须为其指定一个 别名。以上的例子允许sql.database.query.Servlet servlet被诸如
“http://acme.com/servlet/SQLQuery?month=june”等URL调用。别名在将servlet
的实际名称对用户隐藏方面也很有用。
可以为servlet指定多个别名。servlet管理器在收到第一个指向所有别名的URL时会创建
servlet的一个新实例。新实例创建时,
servlet管理器将调用servlet的init()
成员函数。由于别名可用在属性文件的其他指令中,因此实例 可以被赋予不同的属性。例如:可以
为每个别名指定相互独立的初始化参数。同样,由于即使创建了多个实例,servlet
类也只装入一次,因此servlet的实例可以通过使用静态
类变量来共享数据。
为安全起见,如果给servlet指定了别名,则该
servlet在URL中就不能通过类名来引用。这样可以隐藏servlet的真名。
初始化参数
可以在属性文件中指定为servlet
指定初始数据。Servlet可使用ServletConfig.getInitParameter
成员函数来访问这些数据。初始化指令
的语法是:
servlet.<alias or class
name>.initArgs=<name1=value1>,<name2=value2>,...
可以指定多个参数并以逗号进行分隔。例如:
servlet.SQLQuery.initArgs=target=db2,user=Domino,cacheSize=30
URL
映射扩展
URL映射扩展指令的语法是:
servlet.<alias or class
name>.extension=<extension> <extension> ...
可以给servlet
指定多个扩展,相互之间以空格分隔。所有扩展都必须包含在“服务器”记录的“Servlet file extensions”设置中。例如
:无 论何时URL
指 定扩展“sql”或“sq”,都能使Domino调用SQLQuery
servlet,请将“sql,sq”添加到服务器设置中,并将这一指令添
加到属性文件中:
servlet.SQLQuery.extension=sql
sq
这允许用户调用含有类似以下URL的servlet:
<A
href="http://acme.com/query.sql?month=june">http://acme.com/query.sql?month=june
启动时装入
缺省情况下,servlet
管理器在第一次接收到引用某个servlet的URL时将此servlet的类文件装入内存。但是,可以指定servlet
管理器
启动时就同时装入一个或多个servlet。这样可以防止用户在URL
首次要求装入小程序时被延误。
启动指令的语法如下:
servlets.startup=<alias or class>
<alias or class> ...
请注意“servlets”(服务器小程序)是复数形式,servlet
的名称必须使用空格分开。
如果给小程序指定了一个或多个别名,则可以在启动指令中包 含这些别名。这样会使servlet
管理器装入小程序类然后为每个别名创建一个实
例。
servlet管理器装入servlet类之后,只要不是Domino HTTP
任务由控制台命令"tell http quit"终止或由控制台命令"tell http
restart"
重新启动,这些类将一直驻留在内存中。卸载服+
务器小程序之前,servlet管理器将为servlet的每个实例调用destroy()
成员函数,以使其有机会清理资源。
由JVM类加载程序装入的类在HTTP任务终止之前将一直保持加载状态。“tell http
restart”命令不会将类卸载。
属性文件样例
以下是servlets.properties文件的样例:
# Properties
for the sql
servlet
servlet.SQLQuery.code=sql.database.query.Servlet
servlet.SQLQuery.initArgs=cache=30
servlet.SQLQuery.extension=sql
#
Properties for the mail
servlet
servlet.MailServlet.initArgs=mime=enabled,smime=disabled
# Both
servlets should be loaded at startup
servlets.startup=SQLQuery
MailServlet
# end of file
样 例:Java servlet
此servlet样例返回一个HTML
页面,上面显示浏览器与服务器小程序请求一起发送的所有HTTP标头。
import java.util.*;
import
java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public
class ExampleServlet extends HttpServlet {
public void doGet
(HttpServletRequest request, HttpServletResponse response) throws
IOException
{
response.setContentType("text/html");
response.getOutputStream();
out.println("<HTML><B>Headers sent with the
request:</B><BR>");
request.getHeaderNames();
headers.hasMoreElements();)
String headerName = (String)
headers.nextElement();
out.println("<BR>" + headerName + ": " +
request.getHeader(headerName));
} //
end of method
} // end of class
编好此代码后,请将ExampleServlet.class文件拷贝到服务器的
domino\servlet中。由于此文件不需要特殊属性,因此不必创建
servlets.properties文件。输入下面的
URL(请使用自己的服务器名)即可从浏览器运行小程序:
<A
href="http://www.yourserver.com/servlet/ExampleServlet">http://www.yourserver.com/servlet/ExampleServlet
由服务器小程序返回的页面上的信息是由浏览器决定的。以下 是使用
Netscape浏览器返回的HTML页面:
<HTML><B>Headers received with the
request:</B><BR>
<BR>ACCEPT-LANGUAGE:
en
<BR>CONNECTION: Keep-Alive
<BR>ACCEPT: image/gif,
image/x-xbitmap, image/jpeg, image/pjpeg, image/png,
*/*
<BR>USER-AGENT: Mozilla/4.05 [en] (Win95; U
;Nav)
<BR>ACCEPT-CHARSET: iso-8859-1,*,utf-8
<BR>HOST:
test1
54、Domino应用程序和XML
XML最明显的优点之一就是因为这种新兴的技术建立在HTML和SGML
的标准之上,所以它代表数据共享技术的发展,这种发展不要 求新的硬
件和 软件。XML与Domino应用程序结合得非常好。在XML
提供了描述数据并通过网络共享功能的应用程序中,Domino提供了使数据共享安
全、可靠且有效而需要的所有其他工具。除了提供用来编写XML数据和向
XML parser供应XML数据的媒体外,Domino Designer
还提 供:
强大 的开发环境,包括一套可用于建立协作性的电子商务应用程序的编程工具
保护数据所需的安全层
从数据库访问控制到单个域加密;使用户有效定位数据的搜索能 力;工作流操作的消息处理,如定单确认、电子邮件
通知和文档评阅,除Domino Designer
提供的开 发工具之外,还可以得到连接服务,允许您将应用程序与以下主后端系统连接起来:
ERP系统,如SAP、PeopleSoft、Oracle和JD
Edwards
关系数据库,如DB2、Sybase和Oracle
事务系统,如IBM CICS、MQ Series、WebSphere和
BEA Tuxedo
使用XML增强的应用程序
为了说明如何在Designer应用程序中集成
XML,可以考虑一个售书的联机站点,其中:描述每本书的数据的XML标记是标准标记,如
<bookTitle>和
<bookAuthor>。处理书的数据的所有应用程序都可使用这些标准标记描述书的特定数据。应用程序可使用这种标准数据格式与
书的供应商以及购买者进行交互。
您可构思的任何应用程序都可使用
XML。例如,可以构思一个自动供应商店,它维护具有自动部件的 联机目录的一个电子商务站点。使用XML
作为描述部件信息的公共语言,购买代理商可以从不同的供应商处将关于部件价格和可用性的信息直接放入Domino
数据库。用户可以访问此
数据库来查找他们可联机定购的部件的最新信息。Domino
然后提供所有必要工具来完成定购部件和管理库存的安全联机 事务处理。
另一 个样例是人力资源的“自助式服务”应用程序,雇员可使用它访问并管理自己的个人数据。例如, 公司可以在
Intranet站点上发布福利
信息,允许雇员使用Notes客户机或Web浏览器 联机选择自己的福利。选择之后,雇员以XML
格式将数据提交给服务器(如IBM的
WebSphere Application Server)。服务器使用Java servlet将数据传递到
HR后端系统(例如:Peoplesoft数据库),并在事务完成后通
知Domino。XML标记描述被传递的数据,使该数据在Peoplesoft
数据库中代表的意义与在Domino应用程序中代表的相同。
在Designer应用程序中包括XML的方法
有几种方法可将XML包括在
Designer应用程序中并将数据供应给XML parser。
可以在表单或页面上输入描述数据的XML标记。通过将表单或页面的内容作为HTML
处理,可以向能够解释标记的XML parser供应XML。
XML
描述正在显示的数据。要为表单或页面上的数据定义格式和样 式,可以使用通过扩展样式表语言(XSL)创建的样式表将数据转换为
HTML
,或者可以使用级联样式表(CSS)以直接在客户机上定义XML的样式。
还可以通过在列公式中包括XML标记以使用视图产生XML
数据。要将视图传递到服务器,必须将它嵌入页面或视图以便 在正确的XML文档定
义标记中覆盖整个视图。
可以使用代理或servlet
动态生成或存储XML。代理用于在Domino应用程序中运行预定的过程。Servlet基于来自Web浏览器的请求在服
务器上运行。
关于
Domino DTD和如何使用Java方法生成XML的详细信息,请参阅《Programming
Guide》中的第三章。
应用设计
在表单或页面中放入XML
表单是用于XML的最好工具。可以输入XML
标记,并在数据的标记中包括域。结果是XML文档,带有传递到XML parser时非常有意义的数
据。还可以将XML放到页面上。Domino
Designer中的页面是显示信息的数据库设计元素。可对传统的应用程序 内容使用页面(如主页),或
使用XML
标 记来描述页面上的数据。您将在关于在视图中使用XML一节中了解到,页面有助于嵌入视图并添加处理视图所需的XML
标记。页
面还有助于创建可扩展的样式表(XSL)或级联样式表(CSS)以指导服务器或浏览器如何格式化使用XML标记描述的数据。
使用
XML元素定义表单上的数据
当在表单或页面上使用XML元素时,必须遵循一定的规则以构建有效的XML,而且必须正确格式化XML
标记。
XML标记与HTML标记非常相似。但有一些不同的规则用于构建XML标记,当标记数据时必须遵循它们。例如,嵌入XML的要求比嵌入
HTML
标记的要求更严格。关于使用XML标记来标记数据的详细信息,请参阅IBM XML Web站点:<A
href="http://www.ibm.com/xml">http://www.ibm.com/xml
作为在表单上使用XML
的样例,联机手册目录中每本书的输入项都可能是如下所示:
<?xml version="1.0"
encoding="UTF-8"?>
<BOOK>
<bookTitle>Chess for the
Master</bookTitle>
<bookCategory>Games</bookCategory>
<bookAuthor>Alice
B.
Charles</bookAuthor>
<bookPrice>10</bookPrice>
<bookListPrice>12</bookListPrice>
<bookISBN>0-980-38475-81</bookISBN>
<bookDatePublished>April
1997</bookDatePublished>
<bookAbstract>The authority on all the
latest chess moves, including the entire Big Blue
arsenal.</bookAbstract>
</BOOK>
以XML格式创建文档
新建一个表单或页面。
<?xml version="1.0" ?>
可以选择性地添加编码参考,如下所示:
<?xml version="1.0" encoding="UTF-8"
?>
标记的数据的域。
HTML”。
该属性通知Domino将所有文档文本传递给HTTP请求者,而不必生成HTML标记。
保存并关闭表单。
使用 样式表格式化
XML数 据
XML
的属性之一是它只描述数据而不提及数据的外观。对于计算机 到计算机的事务,外观并不重要,但如果要将数据显示给用户时(例如:将
其贴在Web
站点上),外观就很重要。XML文档通常是依靠样式表来确定数据的布局和外观。一些浏览器为通俗元素(如<;Para>、<List>和
<Item>)提供简单的缺省样式,但通常情况下必须使用样式表来描述数据格式。随XML可以使用两种类型的样式表:
扩展样式表语言
(XSL)描述如何将XML转换为HTML或另一种版本的XML。
级联样式表(CSS)直接在支持CSS的浏览器上定义XML
的样式。
要使用样式表,可在文档类型声明之后和根元素之前直接插入 样式表参考。例如:
<?xml version="1.0"
encoding="UTF-8"?>
<?xml-stylesheet type="text/css"
href="bookdisplay.css"?>
<BOOK>
如果在页面上创建了一个样式表,可设置页属性为“将页面内容作为
HTML”。
将关于书的信息转换为HTML的XSL样式表可能如下所示:
<?xml version="1.0"
?>
<xsl:stylesheet xmlns:xsl="<A
href="http://www.w3.org/TR/WD-xsl">http://www.w3.org/TR/WD-xsl" >
<xsl:template
pattern="BOOK">
<HTML>
<HEAD>
<TITLE><xsl:value-of
select="BOOKTITLE" /></TITLE>
</HEAD>
<BODY
bgcolor="F0FFF8">
<B><xsl:value-of
select="BOOKAUTHOR"/></B>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
<?xml:stylesheet
type="text/xsl" href="/roibooks.nsf/bookform.xsl"?>
级联样式表(CSS)并不将XML
转换为HTML,而是直接向服务器提供如何格式化每个XML元素的指令。书的CSS可能如下所示:
BOOK {
block;
}
BOOKTITLE {
display:
block;
float: left;
margin-right: 10px;
padding:
5px;
}
BOOKAUTHOR {
italic;
}
相关主题
在Designer应用程序中包括XML
Domino应用程序和XML
XML
术语
应用设计
使用视图生成XML
视图使用户可以控制哪些文档以XML显示并可以跟踪信息和将其转换到XML中以通过
Intranet或万维网分发。可以在Lotus Web站点
<A
href="http://www.lotus.com/xml">http://www.lotus.com/xml上的ROI Books
应用程序中找到此部分中描述的视图。
将XML标记映射到视图
为了使用视图产生XML,必须将XML标记从DTD
映射到视图列中。一旦创建了视图并将XML标记映射到其中后,就可以将视图嵌入到页面中
。嵌入到页面中的视图在Web上保持了其在Notes
客户机应用程序中的同样功能,并使用户可以控制视图显示的 大小及外观。对于显示XML
的视图,页面包含了XML声明和根元素。
样例
ROI
Books应用程序使用列公式将文档中的每个元素和域分配给“XML
视图”中的列。第一个子元素的列公式还包含打开父元素标记,而最 后
一个子元素的列公式包含关闭父元素标记。例如,第一列的列 公式为:
"<BOOK><BOOKTITLE>"+bookTitle+"</BOOKTITLE>"
父元素是
<BOOK>,子元素是<BOOKTITLE>,bookTitle是包含<BOOKTITLE>
标记内容的域名。<BOOK>中有多个子元素包括在此视图中,所以
<BOOK>元素直到添加了最后一个子元素后才关闭。在ROI
Books
应用程序中,最后一个子元素被分配给视图的最后一列。最后 一列的公式为
:
"<BOOKPUBLISHDATE>"+bookDatePublished+"</BOOKPUBLISHDATE></BOOK>"
“XML
视图”被嵌入到包含XML声明和根元素<BOOKCATALOG>的页面中。
将XML映射到视图
创建一个视图并打开。
4.在“Web访问”中,选择“将视图内容作为HTML”。如果未选择此属性,Domino为视图内容生成
HTML。另外,如果未选择此属性,
则嵌入页面中的视图内容不可见。
Selection”并添加选择公式以定义哪些文档将包括在视图中。例如:用于 联机书店的应用程序包含已
批准定单的视图。使用以下公式为视图选择文档:
SELECT
status="Approved"
7.将列添加到视图中。
区域中输入列公式。
"<;PARENT><CHILD>"+fieldname+"<\CHILD>"
如果某列中有多个元素,在第一个列公式末尾添加一个分号
(;),并在下面为下一个元素添加列公式。
"<;PARENT><CHILD>"+fieldname+"<\CHILD>";
"<CHILD>"+fieldname+"<\CHILD>";
"<CHILD>"+fieldname+"<\CHILD>"
提示
使用以下语法使域成为元素的一个属性。
"<CHILD
attributeName=""+fieldname+"">"+fieldname2+"</CHILD>
10.
单击第二列并使用以下语法将列公式键入到Script.
区域中。
"<CHILD>"+fieldname+"<\CHILD>"
11.对每个XML元素(最后一个除外)重复步骤
10。
12.对最后一个子元素使用以下语法。
"<LASTCHILD>"+fieldname+"<\LASTCHILD></PARENT>"
在页面中嵌入视图
1.打开或创建一个页面。
在“Web访问”中,选择“将页面内容作为HTML”,然后关闭“页面”属性框。
声明。
(可选)如果不希望在所有环境中显示相同的视图,请单击“选择基于公式的视图”。单击“确定”关闭对话框后,在“编程”窗格
中编写公式以便显示适当的视图。
9.(可选)单击嵌入视图,并选择“元素”“视图属性”,更改对齐方式或样式,或在某个条件下隐藏此元素。
10.
在视图下键入一个闭合的根标记。
要删除嵌入视图,请单击“工作”窗格中的嵌入视图并选择“编辑”“清除”。
相关主题
在Designer
应用程序中包括XML
Domino应用程序和XML
XML术语
在表单或页面中放入XML
应用设计
使用代理生成
XML
使用代理生成XML的最大优点之一是具有灵活性。可以基于事件或对URL命令的响应设置代理定时运行。这种灵活性对于创建自动
XML应用
程序是很有必要的。例如:书店的Web
站点包含一个数据库,其客户向每月一次的新闻简报投稿。其 中有一个编辑和批准工作流进程,负责在
稿件被批准后将它们移到系统中。代理每小时都要运行以收集可以发表的稿件并将稿件转换成
XML。然后该代理将稿件作为静态XML文档置于
另一个数据库中,订阅者可在此收集文档。
ROI Books应用程序包含一个称为
createXML的代理,此代理为视图中的每个文档生成XML并基于浏览器或服务器的请求将其发送出去。要
查看此代理的输出,在Microsoft
Internet Explorer 5中打开ROI Books应用程序并单击XML Agent链接,或使用OpenAgent URL
命令
运行代理:
<A
href="http://host/roiBooks.nsf/createXML?OpenAgent">http://host/roiBooks.nsf/createXML?OpenAgent
编写的代理不仅可以打印输出,也可使用
LSO或DECS连接器API将XML输出保存在字符串变量中并将其写入静态XML文档或另一个数
据库系统中。
样例:XML
代理
此样例是LotusScript.代理,它在称为XML的视图中提取每个文档、根据其内容创建XML并打印输出。
Dim s As
New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim
view As NotesView
Set db = s.currentDatabase
Set view = db.GetView( "XML"
)
Set doc = view.GetFirstDocument
Print "Content-type:
text/xml"
'Prevents Domino from sending default headers.
Print
"<BOOKCATALOG>"
'BOOKCATALOG is the root element of the XML
document.
While Not ( doc Is Nothing )
'Loop as long as there are document
objects available.
'Send the parent element for each book document.
"<bookTitle>"+doc.bookTitle(0)+"</bookTitle>"
"<bookAuthor>"+doc.bookAuthor(0)+"</bookAuthor>"
Print
"<bookPrice>"+doc.bookDiscountPrice(0)+"</bookPrice>"
Print
"<bookCategory>"+doc.bookCategory(0)+"</bookCategory>"
Print "</BOOK>"
tag.
the next document in the view.
Wend
Print
"</BOOKCATALOG>"
'Closes the root element.
相关主题
在Designer
应用程序中包括XML
Domino应用程序和XML
XML术语
应用设计
使用Java servlet生成
XML
Servlet是为响应Web浏览器的请求而运行的Java程序。与代理不同,当Web服务器启动且驻留在服务器上时
Servlet才装载。它们通常
用于动态生成和更新Web页以及在不同的应用程序之间交换数据。可以扩展Servlet的功能,以使用XML
作为应用程序之间的通用语言在应
用程序之间架起一座桥梁。Java servlet不仅能产生XML标记并传递到服务器以进行处理,Servlet
还可以与LotusXSL处理器进行交互作
用以格式化XML标记描述的数据。XML与XSL
配合使用,将为您提供一种定制数据传输的强大工具。
XML Servlet应用程序的样例
作为Servlet如何促进XML
传送定制数据包的样例,可考虑一个组织,其中的域销售代表 使用不同的设备(如Notes客 户机、浏览器或PDA
) 从Domino
数据库下载信息。销售代表可向Domino应用程序请求所有与特定客户有关的信息。Servlet将来自不同数据源的信息集合到一
起并使用合适的XML
标记将数据打包。Servlet还可以使用LotusXSL processor将样式应用于 使用XML
标 记的数据并以最适合于连接设备
的格式传送数据。这种情况下,通过窄带电话线与PDA连接的销售代表比通过宽带网络连接与Notes
客户机连接的销售代表获取的信息要少
。以下图形显示连接设备、运行Servlet的Domino
应用程序以及后端数据库之间的关系:
在另一个关于Servlet如何提供有意义的定制数据的样例中,可考虑一个房地产应用 程序,其所售房屋的数据存储在
Domino数据库中。一个
房地产代理商或潜在的购买者使用Web浏览器向Domino
应用程序请求所售房屋的信息。用户指定搜索标准,如所需的 卧室间数。Servlet在
Domino
应用程序中运行,查找并装配与指定标准匹配的所有文档。Servlet动态折叠它在正确的XML标记(如<HOUSE>和
<HOUSETYPE>)中
找到的数据。然后使用LotusXSL processor来应用XSL样式表