Top
首页 > 老文章 > 正文

WebSphere快速入门(34)

WebSphere快速入门(34)

WebSphere快速入门(34)
发布时间:2006-04-25 18:45        来源:        作者:
WebSphere快速入门(34)

・ 附录Ⅲ IBM WebSphere应用开发实验指导

Servlet 1A:创建一个简单的客户注册servlet

在这个练习里,你将创建一个简单的 servlet 。这个 servlet 的目的是确认一个新客户在 JKToys 站点的成功注册。

在这个练习里你将访问 JKToys 网站。你从主页选择 Kids Zone 区域,注册为一个新客户。注册表格和网站的余下部分已经由网站设计者为你提供。在注册表格上按 ReGISter me now! 按钮,将会调用服务器上的 JKRegistration servlet 。注册 servlet 将会用表格的信息注册一个用户,在 JKTOYS 数据库的 CUSTOMER 表创建一个新的条目。在注册时,指派一个唯一的客户号码。在下一个练习里你将用这个信息提供一个定制的 HTML 页面确认注册。

・ 第一部分

对所有的练习,确信你用了 id:USERID 和口令: PASSWORD 登录进系统。

这个练习的前 5 个步骤只是给你的信息,请花时间读它们。实际的代码从第二部分开始。

1. 你将用 IBM VisualAge for Java,version 2,EntERPrise Edition+Enterprise Update( 从现在开始用 VAJ 指代 ) 来编辑,编译和发表你的练习。现在双击桌面上的图标打开 VAJ 产品。如果你看到了 VAJ 的欢迎窗口,选择“取消”按钮,这将放上 Workbench 窗口。你将看到带有几个包的 WASDev 项目已经为你预先装载了。选择 com.ibm.waslab.servlet1 包。在这个包里你将能看到 RegistratonServlet 类。这个类包含 RegistrationServlet 和 startup methods required for you to complete this exercise. 在这个练习里,你将集中注意力于 doPost() 方法。

2.JKToys 网站已经布置到安装在你的机器上的 web server 上。这个站点的根目录是 :[x]:\www\HTML\JKToys ; [X] 是 web server 所在的驱动器字母。网站是用 NetObjects Fusion 创建的。这个站点的 HTML 页面在 html 子目录里。 JKToys 注册页面的完整的路径是: [x]:\WWW\HTML\JKToys\html\body_jktoys_kids_zone_registraiton.html

3. 你还记得在讲座里提到,当用户按了一个表格上的提交按钮,在我们这里按钮上写着“ Register me now!” ,浏览器调用 HTML <FORM> 标记的 ACTION 子句里规定的 URL 。看一下 HTML 文件你将看到 <FORM> 标记包含以下文字:

<FORM NAME=”RegistrationForm”

ACTION= http://127.0.0.1/servlet/JKRegister METHOD=POST>

向网站设计者提供 <FORM> 标记的正确的参数是你的责任。

在 ACTION 子句里的 URL 指向主机 127.0.0.1 ,这是一个指向本地主机的 IP 地址,换句话说,指向你自己的机器。网站设计者也许用“ localhost” 这个字代替 IP 地址。

注意:在某些情况下用 ”localhost” 会降低你的服务器的性能,为了避免这个问题,你必须在你的机器里的一个叫 HOSTS 的文件里加一行,把 localhost 和 IP 地址对应起来。

在 URL 里跟在 IP 地址后面的 servlet 应用键,使得 web server 调用 WebSphere Applicaiton Server( 把 HTTP 请求传给它 ) 。应用服务器在 servlet classpath 里配置的某个子目录或 jar 文件里定位 servlet 。 IBM WebSphere Application Server 的缺省 servlet classpath 是: [x]:\WebSphere\AppServer\servlets 目录, [x] 是 WebSphere 安装的目录。

JKRegister 是 servlet 名字。这不是 servlet 的真实名字,而是在 WebServer 里给 servlet 的名字。在实践中,给 servlets 名字是很常见的,它降低显示在浏览器上的 URL 的复杂性和混乱。它还允许你向 WebSphere 里的你的 servlet 提供初始参数。按我们的配置, JKRegister 被对应为:

com.ibm.waslab.servlet1.RegistrationServlet ,这是这个 servlet 的包和类的名字。

METHOD = POST 子句表示在 servlet 被调用时, servlet 的 doPost() 方法将被 service() 方法调用。

4. 正如上面提到的,你的 servlet 将在 doPost() 方法里取得控制。选择 RegistrationServlet 。定位 doPost() 方法。注意给 doPost 的两个参数, HttpServletRequest 和 HttpServletResponse 。这些对象让你找出你从哪里来,到哪里去,输入 HTML 表格的值是什么。在下面的步骤里你将学会怎样用它们。

5.doPost 的开头几行提取输入到表格中的值,在数据库里注册新客户。现在你不需要关心哪个方法实际在数据库里注册了用户,在以后的练习里,你将自己写这个方法,你将学几个访问数据库的方法。你将在这个练习的后半部分写 getFormImput() 方法。

//Get the input form contents
Properties formInput=getFormInput(req);
//Register new customer in the database

register(formInput);

・ 第二部分

在这个 servlet 里,当 doPost() 得到控制,第一个任务是取得用户输入和注册新客户。这是前面讨论的两行代码所作的。最后一步是通知客户注册成功了。

你在第二部分的任务是写 doPost() 方法的余下部分,通知用户注册成功。现在打开 doPost() 方法,看看有些什么:

public void doPost(HttpServletRequest req,HttpServletResponse res)

throws ServletException,jiava.io.IOException

{

//Get the input form contents

Properties formInput=getFormInput(req);

//Register new customer in the database

register(formInput);

//Obtain a PrintWriter from response object

//Set content type on the response header

//Output confirmation message

return;

}

注释说明了你的代码将要执行的任务。第一个任务是从 response 取得一个 PrintWriter. 看看你的课堂笔记,找个例子。如果你还是不懂,看最后的答案部分。得到一个 PrintWriter 后,你将需要设置 response header 的内容类型为 ”text/html” 。你再看以下课堂笔记,找个例子吧。

最后,你将需要输出确认消息。页面的标题应该是 ”Registration Complete”, 包含以下文字:

Greetings:

Your registration has been recorded in the database.

Thank you for your interest in JKToys.

We look forward to serving you in the future!

你的课堂笔记给出了在一个 Servlet 里打印文字的例子。如果你不懂,看最后的答案部分。

按 Ctrl-s ,或从右键选项选择 ” “保存” ” ,保存 doPost(). 记住,在 VAJ 保存你的方法的时候也编译了你的方法。如果你在编译时得到错误, VAJ 会警告你,有时会提供正确的方法名或正确的语法来建议你怎样改正错误。改正你的错误,保存它。如果你不能解决错误,请向你的辅导员请求帮助。

一旦编译完成而没有错误,你可以试试你的 servlet 。为了调试的目的,你将在 VAJ 里运行你的 servlet 。你的 workspace 已经用 IBM WebSphere Application Server libraries 配置过了。用这个配置你可以在 VAJ 里使用 HTML 和 servlets 。这将允许你在 VAJ 环境里调试你的 servlets.

・ 测试你的第一个 servelt 的步骤

1. 在 VAJ 里启动 web server 。打开 IBM WebSphere Test Enviroment 项目,在包 com.ibm.servlet 里,选择 SERunner 类,按 Run 按钮来启动服务器。你可以看控制台来确定 web server 是否在运行。它将打印许多行输出。

2. 然后,启动你的浏览器,在 URL 输入域输入 http://127.0.0.1/JKToys/index.html ,按 enter 。这将显示 JKToys 的主页。从 banner 选择 Kids Zone 。在 kids zone, 单击拖着标语的飞机,这将把你带到注册页面。填入表格的信息,按注册按钮,几秒钟之后你应该得到 servlet 的回应,表示一个成功的注册。

如果你真的要确信你的记录已经在数据库里,你可以在 JKTOYS 数据库的 CUSTOMER 表上执行一个查询,来看看你自己。你可以在 DB2 命令行里,或 DB2 文件夹里的 Control Center 工具作这个。

・ 在这个练习里你作了些什么

在这个练习里你创建了一个将被 JKToys 的新客户注册表格调用的 servlet 。你在 doPost() 方法里增加代码,来提供给客户的反馈,告诉他们注册成功。你现在理解了表格, servlet 和回应 HTML 页面之间的控制流。

你在你的 servlet 里动态创建一个 HTML 页面。在下一个练习里你将使用客户提供的信息进一步定制 servlet 给客户的回应。你还将检查错误,如表格信息遗漏或数据库问题。

・ 答案

在你能向客户送回信息以前,你需要创建一个输出流,你将用这个同浏览器通信。 HttpServletResponse 对象有一个方法来获取这样一个流。把下面的代码加到 doPost() 方法里 register() 调用的下面:

//Obtain output stream form response object

PrintWriter out=res.getWriter();

也可以创建别的类型的流,要看什么会回到浏览器。 PrintWriter 尤其适用于送字符串,因为它有打印新行和在一个现存行后面打印的方法,分别是 println() 和 print() 。

现在你已经有一个输出流,你可以开始把你的消息送回浏览器。记住,你实际作的是编辑一个 HTML 页面,它将被在用户的浏览器上显示。任何有效的 HTML 页面都可以送回。

在你送实在的文字以前,你应该设置回应的 MIME 类型。你用 setContentType() 方法在回应头里设置内容类型。输入以下行:

//Set content type on the response header

res.setContentType(“text/html”);

你可以输入这些行完成你的 HTML 页面。

//Output confirmaiton message

out.println(“<html>”);

out.println(“<head><title>Registration Complete</title></head>”);

out.println(“<body>”);

out.println(“<h2><br><br>Greetings:</h2>”);

out.println(“<br>Your registration has been recorded in the database”);

out.println(“<br>Thank you for your interest in JKToys”);

out.println(“<br>”);

out.println(“<h2>We look forward to serving you in the future!</h2>”);

out.println(“</body></html>”);

最后,你可以刷新和关闭流。在一个 servlet 的末尾这么作是可以的,只要你知道这个 servlet 将不会被另一个 servlet 调用来提供输出到流。你会在以后的练习里看到,一个 servlet 可以调用另外的 servlets ,每一个 servlet 的输出只是要完成一个 HTML 页面的所有的信息的一部分。如果任何一个 servlet 关闭流,主调 servlets 将不能使用这个流来完成页面的变换。所以当你关闭输出流时要小心。输入以下的行来完成 servlet 的编码。

outflush();

//Closing the output stream is not really necessary

out.close();

注意 :在设置和在这些练习的指导里,你将会被要求编辑 .properties 文件。确信你没有使用 Notepad 。用 Wordpad 或别的编辑器,保存你的操作系统的原始的句子结束符。

所有的练习从 JKToysDBInfo.properties 文件获得访问数据库所需要的参数。在这个文件里,你会看到 USERID 和 PASSWORD 等等的定义。如果你需要改变这个文件来适应你的配置,可在以下目录找到:

d:\IBMVJava\ide\project_resources\WASDev

d:\WebSphere\AppServer\servlets

第一个在运行在 VAJ 里是用,第二个在运行在一个网络服务器时用。

(未完待续)

加载更多

专题访谈

合作站点
stat