servlets是java编程环境中一个非常有生命力的新鲜事物,本文描述了servlets,并介绍如何用visualage for java迅速开发servlets。servlets开发中应用到的visualageforjava的关键技术是visualageforjava的模拟多种虚拟机环境的能力,以及代码增加编辑并连接到运行中的程序中的能力。
背景
在www的初期,程序员们很快就意识到,通过使用公共网关界面(cgi),www可以成为一个引人注目的应用开发平台。事实上,一个cgi程序就是把各种能力扩展到web服务器中的一个插入模块。然而,cgi的最初设计要求为每一个请求服务创建一个单独的进程,从而增加了性能和资源的消耗。为改进cgi的性能和可扩展性,web服务器厂商引进了专有的apis,例如网景公司的nsapi、微软公司的isapi和ibm的gwapi,同时,网景公司还为navigator引人了一个web浏览器插入api。这样一来,web客户机和服务器都可以通过插入而加以扩展。不幸的是,这一插入要求使用专用的apis,对于不同的操作系统版本也不同。
sun公司推出的java和定义的appletapi带来了www的第二次进步,appletapi为开发者提供了一个扩展web浏览器的标准和与平台无关的方式。现在,sun公司使java成为建立n层企业级应用软件又推出了servletapi,为web服务器带来了同样的优点。热心者可以通过访问http://java.sun.com了解servlet,还可以从这里下载文档和javaservlet开发工具包(jsdk)。在下面的讨论中,我们将会提到jsdk1.0.1。
运行servlet
运行servlet的最好开端是下载jsdk和运行范例,并在web服务器上配置servlet。使用者可以用servletrunner(srun)测试servlet,servletrunner是一个包含在jsdk中的小程序,是一个简化的web服务器,与appletviewer相似,只要applet一连接上,它就能够成为一个简化的web浏览器。
假设使用者正在windowsnt平台上工作,并已安装了jsdk1.1.x或jsdk1.0.1,打开一个命令提示符,并转到jsdk目录,例如,e:/jsdk。在这个目录中,bin子目录中包含了servletrunner,servlet子目录中包含了servlet范例。然后进入servlet子目录,键入下面命令:
e:/jsdk/servlet>../bin/srun-v
现在,就有了一个监听8080端口的web服务器,"-v"选项向命令提示符窗口产生详细的输出。下面,打开任意一个web浏览器,例如网景的navigator,并打开http://127.0.0.1:8080/servlet/helloworldservlet。servletrunner加载了helloworldservlet类,为它构造一个环境,调用其init()方法,然后调用它的service()方法,service()方法有一个请求参数和响应参数。helloworldservlet对象简单地给响应对象写一个html主页,该响应对象被返回到web浏览器并显示。在第一次服务请求之后,该servlet保持激活状态,并处于待命状态,可以处理进一步的请求。servlet的构造必须能够处理多个并发服务请求,因为每一请求都是从自己的线程开始的。当servletrunner终止时,它调用servlet的destroy()方法。
在servlet生命周期的最后阶段,使用者必须停止并重新启动servletrunner(或web服务器),以得到一个更新的servlet类文件。在开发过程中,使用者会经常改变servlet代码,所以使用servletrunner可能会很单调乏味,特别是在servlet开始运行了一段时间以后,不得不调试一个问题的时候。幸运的是,来自ibm的visualageforjava提供了一个效率更高的开发servlet软件的方式。
要停止servletrunner,在命令提示符窗口中键入ctrl-c即可。
visualage for java有两个关键技术,使开发servlet非常方便:一个是多种虚拟机环境模拟,另一个是代码增加编辑并连接到运行中的程序。
jsdk包含了servletrunner源代码(srun.c),如果仔细考察一下,就会看到servletrunner只是简单地运行sun.servlet.http.httpserver类。由于servletrunner是一个java程序,可以在visualageforjava中把它当作一个模拟虚拟机环境来运行。启动visualageforjava,并创建一个叫做jsdk的新项目。下面,解压缩e:/jsdk/lib/classes.zip文件,输出到一个temp目录(或简单地拷贝到classes.jar),并把类文件(或jar文件)输入到jsdk项目下。这时会产生几个问题,因为classes.zip文件丢失了某些用于netscapeweb服务器支持的类。删除sun.servlet.netscape软件包来清除这些问题,选择sun.servlet.http.httpserver类并运行它(提供-v参数来把详细结果输出到控制台窗口)。现在,开发环境就是一个web服务器!
下一步,对于范例sevlets,把这些源代码从e:/jsdk/servlrts目录输入到jsdk项目,在workbench窗口中的项目制表符中扩展helloworldservlets类,并选择dogeto方法。在源窗格中,在该行的起始处放入一个插入点,内容如下:out.printin(helloworld);插入一个断点,在web浏览器中重新载入helloworldservletsurl。将命令改成:out.print("hello visualage");然后,存储这一变更。visualageforjava仅仅编辑这个修改的类方法,并将其连接到运行程序中。其重要之处在于:认识到增加编辑只是事情的一半,真正的效率在于不必重新启动正在调试的程序,也不必重新创建引起问题的程序执行状态,正是这种程序执行状态产生了这些问题,而使用者正在设法处理。
通过几行程序代码,检测任何感兴趣的变量,单击resume按钮来完成服务请求,修改后的html页将在web浏览器中出现。
使用visualageforjava,可以修改运行中的servlet,因此没有必要重复性地停止和启动web服务器。此外,当服务器运行时,使用者仍会拥有所有希望的开发环境。
结论
servlet是web应用开发中的一个重要进步。visualageforjava通过servletrunner对开发servlet、增加编辑和连接到运行中的程序有很好的支持。将来,ibm还会通过将web连接技术扩展到smalltalk和c++对java的连接,进一步来加强对servlet的支持。在ibm软件技术的帮助下,使用者将能够从htmljavabean中使用visualageforjavacompositioneditor,进而可视化地创建servlets。
闽公网安备 35060202000074号