📄 将 microsoft 的 internet information server 用作 java servlet 引擎(转).txt
字号:
作者:zergman
email: zergman@chinaasp.com
日期:2001-6-15 13:32:31
[b]将 Microsoft 的 Internet Information Server 用作 Java servlet 引擎[/b]
[b]用 Microsoft 的 IIS 运行 Java servlet -- 而不牺牲可移植性[/b]
Thomas E. Davis
Nutrio.com 首席技术官
2000 年 7 月
[TABLE][TR][TD][#ffffff][B]内容:[/B][/#][/TD][/TR][TR][TD][img]http://www.cn.ibm.com/developerWorks/i/c.gif[/img][/TD][/TR][TR][TD][img]http://www.cn.ibm.com/developerWorks/i/c.gif[/img][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#1]IIS[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#2]适配器设计模式[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#3]Servlet[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#4]ASP[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#5]Java SDK[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#6]请求适配器[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#7]会话适配器[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#8]响应适配器[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#9]结论[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#10]正式请求[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#resources]参考资料[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#author]作者简介[/url][/TD][/TR][TR][TD][img]http://www.cn.ibm.com/developerWorks/i/c.gif[/img][/TD][/TR][/TABLE]
[BLOCKQUOTE]您是陷在仅有 Microsoft 产品的商店中的 Java 狂热分子吗?仅使用 Microsoft 的 Internet Information Server 和纯 Java,您就可以运行 Java servlet,而无须任何第三方产品的帮助。请不要马上就放弃 Microsoft 产品 -- 不妨试试本文中说明的方法,并仍然保持为无专有权的可移植代码。[/BLOCKQUOTE]
您知不知道,无须第三方产品,就可以用 Microsoft 的 Internet Information Server (IIS) 运行 JavaServlet?您的全部所需仅仅是简明的旧式 IIS 和纯 Java。尽管您需要使用 Microsoft 的 Java SDK(原因我将在下面解释),但尽可放心,您的代码将不需要任何专用权扩展,同时又保持对其它 servlet 引擎的完全可移植性。
[b]Microsoft 的 Internet Information Server[/b]
但您为什么要做这样的傻事,让 Java servlet 运行在并非为它设计的环境中呢?首先,由于我们无法控制的情况,许多像我们这样顽固的 Java 狂热分子都陷在了仅有 Microsoft 产品的商店里。我们全都把 Linux 软件盒子藏在桌子下面,运行 IBM 最新的 JDK 和 Apache 最新的 servlet 引擎,但是,要是老板不让我们在这样一个系统上部署一些产品,这时可就真的不好过了。您当然可以找到运行于 Microsoft 平台上的商业性 servlet 引擎,但购买它们要花大把大把的钱。试一试向您的老板解释:您需要几千美金购买一种新的 Web 服务器,因为您想要废弃操作系统附带的那个免费产品(或者只将它用作简单的传递代理,这正是许多产品目前的工作方式)。然后,等您的老板诅咒完毕,您就不妨问一问自己,您是不是有点太急于放弃 Microsoft 的产品了?Microsoft 和 Sun 都有他们的问题,但这并不能改变这样一个事实:IIS 是一种值得尊敬的软件。并且既然您知道它可以运行 Java servlet,它的吸引力也就更大了一点。
[b]适配器设计模式[/b]
将这两种技术粘合在一起的魔法是适配器设计模式的一种简单的应用程序。不妨引用一下一个不大出名的四人团伙(Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides)所写的书《[I]Design Patterns: Elements of Reusable Object-Oriented Software[/I]》([url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#resources]参考资料[/url]),里面说:适配器模式的意图就是将一个类的接口转换为客户机期望的另一种接口。但哪些类是您必须[I]改编[/I]的呢?答案是 Java Servlet 用来与其环境交互的几个核心类 -- 尤其是 Request、Response 和 Session 对象。幸运的是,您不必改编 Cookie 类 -- 这一转换将由其它适配器内部处理。
IIS,或者更具体地说,它的 Active Server Page (ASP) 环境,包含了一组核心类,它们实际上反映了 Java Servlet 规范的类。事实上我应该说,servlet 反映了 ASP 的框架,因为 IIS 在 servlet 规范制定以前早就有了产品,但我不想在 Microsoft 与 Sun 之间的争论中推波助澜。
两种框架中都存在 Request、Response、Session 和 Cookie 对象。唯一的问题是,这些对象的接口在两种环境之间不兼容。这正是适配器设计模式起作用的地方。您必须改编(或包装)对象的 IIS 版本,使它们的外观和行为都类似于 servlet 版本。
[b]一个快捷而不够清晰的 servlet 概览[/b]
按最低要求,servlet 只须实现单个方法: [TABLE][TR][TD][PRE]public void doGet( HttpServletRequest request, HttpServletResponse response );[/PRE][/TD][/TR][/TABLE]
从技术上讲,如果 servlet 希望处理的客户机请求,使用的是 HTTP 的 POST 命令而不是 GET 命令,则 servlet 还必须实现 doPost 方法。但为了使本文保持简洁,您可以假定所有客户机请求都属于 GET 类型。
doGet 方法取得两个对象:请求和响应。请求对象将客户机发送给服务器的所有数据,以及有关客户机本身的一些元信息,都封装在一起。使用响应对象将数据发回客户机。这是非常抽象的说明,但本文并不是 servlet 的引论,所以我不想涉及更多的细节。有关 servlet 的优秀初级读本,我推荐 Jason Hunter,William Crawford 和 Paula Ferguson 合著的《[I]Java Servlet Programming[/I]》 (O'Reilly & Associates)。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -