Servlet properties 文件
|
----Servlet可由两种方法装载:第一种是Servlet Manager 在HTTP启动时按servlets.properties 文件指定的参数装载Servlet,第二种是客户第一次调用Servlet时装载Servlet。Servlet在HTTP任务停止运行时从内存被清除。
|
----您应当尽可能使用第一种。在HTTP任务启动时就装载Servlet,以后用户请求不用再装载,相应时间和延迟就小。
|
----servlets.properties是一个TXT格式的配置文件,用来指定装载Servlet时的标准参数,位于Domino数据目录,例如:D:\r5server\data\servlets.properties。您可以使用TXT编辑器创建它。
|
----servlet properties 文件包括Servlet别名,初始化参数,URL扩展映射,WEB服务器启动时需装载的Servlet。
|
----本篇文章设想读者熟悉JavaScript,Java, Servlet, 了解Domino应用程序设计。
|
语法如下: |
----Servlet 别名------servlet.<alias-name>.code=<class-name> ----初始化参数------servlet.<alias or class name>.initArgs=<name1=value1>,<name2=value2> ----Servlet代码中可以使用ServletConfig.getInitParameter方法访问这些数据。 ----URL 扩展映射---servlet.<alias or class name>.extension=<extension> <extension> ... ----启动时装载------servlets.startup=<alias or class> <alias or class> ... |
----以下是一个servlets.properties 文件,这里指定Test为HelloWorld.class Servlet的别名,指定了初始化参数,启动时装载。 |
----# Example servlets.properties file ----servlet.Test.code = HelloWorld ----servlet.Test.initArgs = 1, 2, 3 ----servlets.startup = Test
|
----有关Servlet配置文件经常出现的错误有: |
- 文件目录放置错误,它必须是在您的Domino数据目录下。
- 文件扩展名错误,许多编辑器例如Notepad使用TXT扩展名
- 使用错误文件名,文件名必须是servlets.properties
- 大小写错误,文件名如同Servlet名字是大小写敏感的。
|
Domino Servlet开发示例 |
----Servlet只装载入内存一次。装载时运行init 方法,以后每一次客户请求Servlet时执行service 方法,按照用户的请求执行doPost 或 doGet方法。 |
Servlet结构 |
----编写Servlet,使用以下Servlet类: |
----Javax.servlet.http.HttpServlet ----Javax.servlet.GenericServlet |
----定义方法描述Servlet功能, 经常用到的方法如下: |
----doGet() and doPost() 处理 GET 和 POST 请求. ----getServiceInfo() 提供 servlet 描述 ----init() servlet 初始化代码 ----service() 处理请求 |
----HTTP请求可有两种:get 和 post。get方法在URL结尾附加信息,可从环境变量query_string中得到;post以“变量名/变量值”形式发送信息。 |
----Servlet代码开发时,get或 post方法使用到JSDK中两个包:javax.servlet和javax.servlet.http。代码中需引入它们。 |
----在您编译servlet 代码之前, 使用到的servlet 类需要增加到 CLASSPATH 环境变量中。然后您可以用您喜欢的JAVA编译器编译servlet 代码。 |
使用Servlet访问Domino对象示例1 |
----下面一个例子是Servlet和Domino的集成,Servlet访问Domino通信录中的对象。 |
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import lotus.domino.*; public class Example_2 extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContentType("text/html"); PrintWriter toBrowser = res.getWriter(); toBrowser.println("<HTML"); toBrowser.println("<HEAD>"); toBrowser.println("<TITLE>Example 2</TITLE>"); toBrowser.println("</HEAD>"); toBrowser.println("<BODY>"); toBrowser.println("<H1>Example 2</H1>"); |
----调用Domino对象的代码必须包含在try/catch 块中(见以下一段代码),首先创建一个NotesThread 对象,然后创建一个新的会话对象。此处创建会话对象的方法中没有参数,即是用服务器的ID访问Domino对象,您也可指定使用某一用户的Internet用户名和口令作为参数,用此用户身份访问Domino对象,从通信录(names.nsf) 数据库的People 视图取得第一个文档。 |
try { NotesThread.sinitThread(); /*创建NotesThread对象 Session s = NotesFactory.createSession(); /*创建新会话对象 Database db = s.getDatabase("","names.nsf"); /*访问通信录数据库 View vw = db.getView("People"); /*访问视图People Document doc = vw.getFirstDocument(); /*获得第一个文档
ToBrowser.println(db.getTitle()); /*获得数据库标题 toBrowser.println("<TABLE>"); while (doc != null) { toBrowser.println("<TR><TD>"); toBrowser.println(doc.getItemValueString("LastName")); toBrowser.println("</TD></TR>"); doc = vw.getNextDocument(doc); /*获得下一个文档 } toBrowser.println("</TABLE>"); vw.recycle(); db.recycle(); s.recycle(); } catch (NotesException n) { |
----toBrowser行代码发送数据库标题给请求的客户端浏览器。while (doc!=null) 行开始循环搜索视图中所有文档,将文档中的“Last Name ”值显示在浏览器上,完毕后释放Domino对象使用得内存。 |
----最后,显示任何Notes 错误并在finally 块中中止NotesThread对象。 |
System.out.println("Exception ID: " + n.id); System.out.println("Exception description: " + n.text); } finally { NotesThread.stermThread(); } toBrowser.println("</BODY></HTML>"); } }
下图显示了运行结果。 |