?? 將 microsoft 的 internet information server 用作 java servlet 引擎(轉(zhuǎn)).txt
字號(hào):
作者:zergman
email: zergman@chinaasp.com
日期:2001-6-15 13:32:31
[b]將 Microsoft 的 Internet Information Server 用作 Java servlet 引擎[/b]
[b]用 Microsoft 的 IIS 運(yùn)行 Java servlet -- 而不犧牲可移植性[/b]
Thomas E. Davis
Nutrio.com 首席技術(shù)官
2000 年 7 月
[TABLE][TR][TD][#ffffff][B]內(nèi)容:[/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]適配器設(shè)計(jì)模式[/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]請(qǐng)求適配器[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#7]會(huì)話適配器[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#8]響應(yīng)適配器[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#9]結(jié)論[/url][/TD][/TR][TR][TD] [url href=http://www.cn.ibm.com/developerWorks/java/jw-iis/index.shtml#10]正式請(qǐng)求[/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]作者簡(jiǎn)介[/url][/TD][/TR][TR][TD][img]http://www.cn.ibm.com/developerWorks/i/c.gif[/img][/TD][/TR][/TABLE]
[BLOCKQUOTE]您是陷在僅有 Microsoft 產(chǎn)品的商店中的 Java 狂熱分子嗎??jī)H使用 Microsoft 的 Internet Information Server 和純 Java,您就可以運(yùn)行 Java servlet,而無(wú)須任何第三方產(chǎn)品的幫助。請(qǐng)不要馬上就放棄 Microsoft 產(chǎn)品 -- 不妨試試本文中說(shuō)明的方法,并仍然保持為無(wú)專有權(quán)的可移植代碼。[/BLOCKQUOTE]
您知不知道,無(wú)須第三方產(chǎn)品,就可以用 Microsoft 的 Internet Information Server (IIS) 運(yùn)行 JavaServlet?您的全部所需僅僅是簡(jiǎn)明的舊式 IIS 和純 Java。盡管您需要使用 Microsoft 的 Java SDK(原因我將在下面解釋),但盡可放心,您的代碼將不需要任何專用權(quán)擴(kuò)展,同時(shí)又保持對(duì)其它 servlet 引擎的完全可移植性。
[b]Microsoft 的 Internet Information Server[/b]
但您為什么要做這樣的傻事,讓 Java servlet 運(yùn)行在并非為它設(shè)計(jì)的環(huán)境中呢?首先,由于我們無(wú)法控制的情況,許多像我們這樣頑固的 Java 狂熱分子都陷在了僅有 Microsoft 產(chǎn)品的商店里。我們?nèi)及?Linux 軟件盒子藏在桌子下面,運(yùn)行 IBM 最新的 JDK 和 Apache 最新的 servlet 引擎,但是,要是老板不讓我們?cè)谶@樣一個(gè)系統(tǒng)上部署一些產(chǎn)品,這時(shí)可就真的不好過(guò)了。您當(dāng)然可以找到運(yùn)行于 Microsoft 平臺(tái)上的商業(yè)性 servlet 引擎,但購(gòu)買(mǎi)它們要花大把大把的錢(qián)。試一試向您的老板解釋:您需要幾千美金購(gòu)買(mǎi)一種新的 Web 服務(wù)器,因?yàn)槟胍獜U棄操作系統(tǒng)附帶的那個(gè)免費(fèi)產(chǎn)品(或者只將它用作簡(jiǎn)單的傳遞代理,這正是許多產(chǎn)品目前的工作方式)。然后,等您的老板詛咒完畢,您就不妨問(wèn)一問(wèn)自己,您是不是有點(diǎn)太急于放棄 Microsoft 的產(chǎn)品了?Microsoft 和 Sun 都有他們的問(wèn)題,但這并不能改變這樣一個(gè)事實(shí):IIS 是一種值得尊敬的軟件。并且既然您知道它可以運(yùn)行 Java servlet,它的吸引力也就更大了一點(diǎn)。
[b]適配器設(shè)計(jì)模式[/b]
將這兩種技術(shù)粘合在一起的魔法是適配器設(shè)計(jì)模式的一種簡(jiǎn)單的應(yīng)用程序。不妨引用一下一個(gè)不大出名的四人團(tuán)伙(Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides)所寫(xiě)的書(shū)《[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]),里面說(shuō):適配器模式的意圖就是將一個(gè)類的接口轉(zhuǎn)換為客戶機(jī)期望的另一種接口。但哪些類是您必須[I]改編[/I]的呢?答案是 Java Servlet 用來(lái)與其環(huán)境交互的幾個(gè)核心類 -- 尤其是 Request、Response 和 Session 對(duì)象。幸運(yùn)的是,您不必改編 Cookie 類 -- 這一轉(zhuǎn)換將由其它適配器內(nèi)部處理。
IIS,或者更具體地說(shuō),它的 Active Server Page (ASP) 環(huán)境,包含了一組核心類,它們實(shí)際上反映了 Java Servlet 規(guī)范的類。事實(shí)上我應(yīng)該說(shuō),servlet 反映了 ASP 的框架,因?yàn)?IIS 在 servlet 規(guī)范制定以前早就有了產(chǎn)品,但我不想在 Microsoft 與 Sun 之間的爭(zhēng)論中推波助瀾。
兩種框架中都存在 Request、Response、Session 和 Cookie 對(duì)象。唯一的問(wèn)題是,這些對(duì)象的接口在兩種環(huán)境之間不兼容。這正是適配器設(shè)計(jì)模式起作用的地方。您必須改編(或包裝)對(duì)象的 IIS 版本,使它們的外觀和行為都類似于 servlet 版本。
[b]一個(gè)快捷而不夠清晰的 servlet 概覽[/b]
按最低要求,servlet 只須實(shí)現(xiàn)單個(gè)方法: [TABLE][TR][TD][PRE]public void doGet( HttpServletRequest request, HttpServletResponse response );[/PRE][/TD][/TR][/TABLE]
從技術(shù)上講,如果 servlet 希望處理的客戶機(jī)請(qǐng)求,使用的是 HTTP 的 POST 命令而不是 GET 命令,則 servlet 還必須實(shí)現(xiàn) doPost 方法。但為了使本文保持簡(jiǎn)潔,您可以假定所有客戶機(jī)請(qǐng)求都屬于 GET 類型。
doGet 方法取得兩個(gè)對(duì)象:請(qǐng)求和響應(yīng)。請(qǐng)求對(duì)象將客戶機(jī)發(fā)送給服務(wù)器的所有數(shù)據(jù),以及有關(guān)客戶機(jī)本身的一些元信息,都封裝在一起。使用響應(yīng)對(duì)象將數(shù)據(jù)發(fā)回客戶機(jī)。這是非常抽象的說(shuō)明,但本文并不是 servlet 的引論,所以我不想涉及更多的細(xì)節(jié)。有關(guān) servlet 的優(yōu)秀初級(jí)讀本,我推薦 Jason Hunter,William Crawford 和 Paula Ferguson 合著的《[I]Java Servlet Programming[/I]》 (O'Reilly & Associates)。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -