摘要:目前在企業應用級開發領域,J2EE應用極其廣泛,在開發中一般采用Tomcat作為Web服務器,該服務器能夠良好支持Servlet/JSP,但和windows平臺下的IIS服務環境兼容性較差。而windows平臺原有的IIS服務器雖然能夠良好處理靜態頁面,但無法接收Servlet/JSP請求。因此這篇文章對IIS和Tomcat的機理進行了研究,通過IIS本身具有的ISAPI篩選器技術,實現來自客戶端請求的重定向,將Tomcat和IIS的Web服務共同集成在本機上,以兼顧雙方的優勢。
關鍵詞:Tomcat;IIS;ISAPI;Servlet/JSP;JDK;集成;Web服務器
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)36-2761-03
Research on Web Service Integration of Tomcat and IIS
YUE Ting
(Tongji University,Shanghai 201804,China)
Abstract: Nowadays, J2EE is quite widely used in enterprise application development. In this method, developers always use web server \"Tomcat\", which is capable of Servlet/JSP but not well compatible in IIS environment of Windows platform. On the other hand, IIS service is accomplished in static HTML page but not able to deal with Servlet/JSP request. Therefore, this paper analyzes the mechanism of Tomcat and IIS, discuss about how to makes use of ISAPI in IIS to do redirection of Servlet/JSP request which leads to the nice integration of Tomcat and IIS.
Key words: tomcat; IIS; ISAPI; servlet/jsp; JDK; integration; web server
1 引言
隨著時代的進步,SUN公司的Java2 Enterprise Edition(J2EE)網絡技術已經成為了目前使用最廣泛的Web應用開發技術,它是一種利用Java2平臺來簡化企業解決方案的開發、部署和管理相關復雜問題的體系結構,包括客戶層技術、網絡層技術(Servlet/JSP)、Struts架構、服務器層技術(EJB)、數據事務與安全、打包和部署等,涵蓋的領域十分廣闊。而在J2EE的開發過程中,需要一個穩定的應用服務器。在通常的情況下,我們使用開源服務器Tomcat來作為web(Servlet/JSP)的開發容器,這也是SUN公司官方推薦的服務器。
而針對Windows的系統平臺,微軟公司也開發了一款架設web服務器的工具IIS,即Internet Information Services(網絡信息服務),這款工具通過超文本傳輸協議(HTTP)傳輸信息,并可通過配置來提供文件傳輸協議(FTP)和其他服務,如NNTP服務、SMTP服務等。
由于是官方開發,因此IIS和Windows系統具有天然良好的兼容性,并可以支持系統中大量的基本網絡服務,如論壇服務。但是因為設計功能的不同,IIS不支持Servlet/JSP機制,因此不能作為J2EE的網絡服務容器。在這種情況下,為了使得J2EE開發平臺和windows的網絡服務能夠同時共存,我們可以試著進行雙方的配置整合,將功能有機地集成在一起。
2 Servlet/JSP機制和Tomcat服務器概述
Servlet/JSP是J2EE提供的一套跨平臺的高效機制,用來作為客戶機/服務器的解決方案,有著強大而獨特的功能。
2.1 Servlet介紹
Servlet是供服務器端加載的程序,在客戶端通過超文本傳輸協議(HTTP)發出請求后,服務器端檢查對應Servlet的狀態,如果尚未被加載,則服務器將其加載到Java虛擬機并且將請求發給該程序,Servlet接受請求后便執行某種過程作業,然后向服務器返回相應的結果,最后,服務器將結果的應答發送給客戶端。
由于Servlet程序是在服務器上加載和執行,客戶端瀏覽器并不直接和Servlet通信,因此就不會出現那些和Applet機制相關的安全性問題。而且Servlet是用Java編寫的,所以一開始就具有平臺無關性,具有一次編寫就可以隨意移植運行(Write Once, Run Anywhere)的特性。除此之外,Servlet還具有以下幾個優點:
運行效率高。在傳統的CGI中,每個請求都要啟動一個新的進程,如果CGI程序本身的執行時間較短,啟動進程所需要的開銷很可能反而超過實際執行時間。而在Servlet中,每個請求只是加載一個輕量級的Java線程進行處理,并且處理請求的數個線程只需要加載一份Servlet類代碼,大幅度提高了運行效率。
擴展性和安全性良好。Servlet程序是用Java語言編寫的,因而具備Java的所有優點。Java是一種健壯的、面向對象的編程語言,很容易擴展以適應各種需求。并且在運行時,編寫好的Servlet程序是存在于服務器端的,因此從外界運行Servlet程序的唯一方法是通過服務器調用,因此在服務器防火墻的保護下,Servlet程序能夠得到高水平的安全性保障。
成本經濟,節省投資。由于Servlet技術的廣泛使用,市場上有許多廉價甚至免費的Web服務器可供個人或小規模網站使用,對于其余的現有服務器,即使它不支持Servlet技術,也往往可以免費或通過極少的投資來追加這部分功能。
2.2 JSP介紹
在Servlet機制的基礎上,J2EE架構同時提供了一種更加簡易的JSP(Java Server Pages)機制。JSP是一種腳本語言,它包裝了Servlet系統的界面,簡化了Java和Servlet的使用難度,同時通過擴展JSP標簽(TAG)提供了網頁動態執行的能力。在運行時,JSP引擎會按照JSP的語法,將JSP文件轉換成Servlet代碼源文件,然后調用Java編譯器,按照正常Servlet的方式進行編譯,最后在服務器載入運行。
使用JSP技術,開發人員無需了解Servlet機制,也可以使用HTML語法和標簽來設計和開發動態網頁,并且由于JSP引擎的自動機制,JSP頁面在修改之后能立刻看到更新結果,而無需手動重新編譯,這樣大大地簡化了網頁的開發流程。同時JSP頁面也具有Java的語言特點,幾乎可以運行于所有平臺,具有極其廣泛的市場。
2.3 Tomcat服務器介紹
Tomcat是SUN公司官方推薦的Servlet/JSP服務器。它是一個免費開源的Servlet容器,也是Apache組織的Jakarta項目中一個核心項目,不但具有輕量級和靈活嵌入系統的優點,并且可以支持Servlet/JSP的最新規范,因此得到廣泛的應用。
在安裝Tomcat服務器之前,系統必須先安裝JDK,即Java Develop Kit(Java開發工具包),這是SUN公司免費提供的Java語言的開發包,包含了編寫、運行Java程序所需要的全部工具。
3 Tomcat和IIS的集成配置
Tomcat本身具有Web服務器的功能,因此可以單獨運行,但Tomcat處理靜態HTML頁面的速度較慢,并且和目前Windows系統的IIS環境下開發的程序兼容性較差,而IIS服務器則不能解析Servlet/JSP頁面,因此我們將Tomcat和IIS集成在同一個Web服務器上,這樣既能支持強大的Servlet/JSP,又能完全兼容原有IIS環境下開發的各種軟件。
3.1 安裝IIS
如果使用的Windows系統是服務器(Server)版本,如Windows 2000 Server,大多已經自動安裝了IIS,因此可以略過這一步。如果使用的是其他版本的Windows系統,則需要首先安裝IIS。安裝的過程非常簡單,將Windows系統的安裝盤插入光驅中,然后在系統桌面的控制面板中運行“添加刪除程序”,選擇“添加/刪除Windows組件”,在打開的對話框中選中“Internet信息服務(IIS)”,然后單擊“下一步”即可進行安裝。注意不同Windows系統的安裝盤的IIS版本可能不同,比如Windows 2000安裝盤中是IIS 5.0,Windows 2003安裝盤中是IIS 6.0。
3.2 安裝和配置JDK
JDK可以在SUN公司的官方網站上免費下載,目前最新的JDK 1.6版本的安裝程序名稱為jdk-6-windows-i586.exe,點擊運行即可進行安裝。接下來需要設置環境變量,在桌面的“我的電腦”圖標點擊鼠標右鍵,依次選擇“屬性”——“高級”——“環境變量”,在上方用戶變量的窗口中點擊“新建”,新建一個名稱為JAVA_HOME的變量,值為JDK的安裝目錄(默認為C:\\Program Files\\Java\\jdk1.6.0)。然后再按同樣方法新建一個名稱為CLASSPATH的變量,值為JDK安裝目錄下lib目錄下dt.jar文件的地址(默認為C:\\Program Files\\Java\\jdk1.6.0\\lib\\dt.jar)和tools.jar文件的地址(默認為C:\\Program Files\\Java\\jdk1.6.0\\lib\ools.jar),兩個地址之間以分號隔開。最后在用戶變量窗口中選擇系統變量“PATH”,點擊“編輯”,在該變量值的尾部添加JDK安裝目錄下bin目錄地址(默認為C:\\Program Files\\Java\\jdk1.6.0\\bin)。完成這些環境變量的設置后,可以試著在命令行(運行——cmd)窗口輸入“Java”,如果出現Java命令參數等信息,則表明JDK的安裝和配置成功。
3.3 安裝Tomcat
Tomcat服務器的安裝程序可以在apache組織的官方網站上免費下載,目前最新的Tomcat 6.0版本的安裝程序名稱為apache-tomcat-6_0_10.exe,點擊運行即可進行安裝。安裝完畢后啟動Tomcat服務進程,然后在瀏覽器(如Internet Explorer)中輸入“http://localhost:8080/”進行測試,如果出現Tomcat的默認頁面,則表示Tomcat服務器和JDK的安裝配置已經成功。
3.4 獲取JAKARTA連接器
為了能夠集成IIS和Tomcat服務器,我們可以使用IIS服務管理器中的ISAPI篩選器,該篩選器是IIS對外的一個接口,可以調用各種擴展插件。我們可以在接口上安裝一個Tomcat重定向插件,這樣IIS在每次得到Servlet/JSP請求時,ISAPI篩選器就能通過ajp13協議,調用外部的該插件,對Servlet/JSP請求重定向至Tomcat服務器。
使用最為廣泛的重定向插件是isapi_redirector.dll,同樣可以在apache組織的官方網站上免費下載,下載之后應選擇一個合適的位置保存,通常我們會在Tomcat安裝目錄的conf目錄下新建一個connector來保存和集成相關的文件,因此默認地址為C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\connector\\isapi_redirector.dll。
3.5 配置Tomcat服務器
接下來打開Tomcat安裝目錄的conf目錄下的配置文件Server.xml,可以看到五個嵌套元素:Server,Service,Engine,Host和Context,其中Server級別最高,代表整個Java虛擬機,Service代表虛擬機中的一個服務,Engine代表服務中的一個請求處理機,Host表示一個虛擬主機,Context則表示一個Web應用程序。
Service元素中的Connector子元素,表示客戶端和該服務之間的連接,具有兩個常用屬性:Port屬性指定服務器端創建的端口,并在該端口監聽來自客戶端的請求,默認為8080。EnableLookups屬性指定是否進行DNS查詢得到遠程客戶端的實際主機名,默認為True。
明確了該元素的數據結構,我們可以編輯該文件,將Service元素層中的第二個Connector元素改為如下內容:
經過這樣的配置,Tomcat服務器就會在端口8009監聽AJP13請求,并在接受請求后由類org.apache.ajp.tomcat6.Ajp13Connector進行處理。我們隨后要相應地配置IIS,使得它用該端口和該協議來發送請求。
3.6 配置IIS
按照慣例,IIS的重定向配置文件也會放在Tomcat安裝目錄下,所以在Tomcat目錄的conf目錄(默認為C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\)新建兩個文本文件,命名為workers.properties和uriworkermap.properties。
workers.properties文件的正文如下:
workers.tomcat_home=C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0(這是默認值,請修改為自己的Tomcat安裝目錄)
workers.java_home= C:\\Program Files\\Java\\jdk1.6.0(這是默認值,請修改為自己的JDK安裝目錄)
worker.list=ServletWorker
worker.ServletWorker.port=8009(默認8009端口,和Tomcat的配置一致)
worker.ServletWorker.host=local
worker.ServletWorker.type=ajp13(協議名稱,和Tomcat的配置一致)
按照文件的配置,IIS將會在需要的時機,將來自客戶端的請求通過ajp13協議,8009端口,發給名為ServletWorker的worker。
接下來uriworkermap.properties文件的正文如下:
/examples/*=ServletWorker
/examples/*.jsp=ServletWorker
/examples/servlet/*=ServletWorker
其中example是假設的JSP工程名稱,在輸入時請修改為自己的工程名稱,這三句代碼分別表示該工程下所有的靜態頁面文件,所有的JSP頁面文件,servlet文件夾下的所有頁面文件均由ServletWorker來處理。可以根據不同的需求范圍來更改這些代碼。
3.7 修改注冊表
為了讓IIS配置生效,我們打開注冊表HKEY_LOCAL_MACHINE\\SOFTWARE,在下面新建目錄Apache Software Foundation\\Jakarta Isapi Redirector\\1.0,然后添加五個主鍵:
Extension_uri=Jakarta/isapi_redirector.dll(Jakarta為接下來要創建的IIS虛擬目錄名)
Log_file= C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\logs\\isapi_redirect.log(請根據安裝位置修改)
Log_level=debug
Worker_file= C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\workers.properties(請根據安裝位置修改)
Worker_mount_file= C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\uriworkermap.properties(請根據安裝位置修改)
3.8 配置ISAPI篩選器
這是Tomcat和IIS集成的最后一步。打開本機的Internet服務管理器,用右鍵點擊“默認Web站點”,選擇“新建”——“虛擬目錄”,篩選器的“應用程序名”設置為Jakarta(必須和2.7步的Extension uri吻合),“本地路徑”設置為isapi_redirector.dll文件所在的目錄(這里為C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\connector),并且將“執行許可”設置為“腳本和可執行程序”。
新建完畢后,在Internet服務管理器主窗口的目錄樹中,用右鍵點擊IIS主機節點,選擇“屬性”,在出現的屬性窗口中,在主屬性的“WWW服務”區域點擊“編輯”,增加新的ISAPI篩選器,篩選器名稱為“Jakarta”,可執行文件為“C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\conf\\connector\\isapi_redirector.dll”。
最后重新啟動IIS,查看WWW服務主屬性的窗口,如果配置正確,在ISAPI篩選器子窗口中,新添加的Jakarta篩選器的狀態現在應該變為綠色向上的箭頭。
3.9 集成配置測試
到這里,IIS和Tomcat服務器的集成已經完畢,我們在啟動IIS和Tomcat之后,在瀏覽器里輸入http://localhost/index.jsp,如果出現和2.3步相同Tomcat的默認頁面,表明這個地址可以不再使用端口8080,而使用缺省的IIS端口80,再通過IIS的篩選器重定向到Tomcat服務器,也即集成的效果已經成功。
4 結束語
使用ISAPI技術集成了IIS和Tomcat的Web服務器,既能夠處理原有IIS環境下的靜態頁面請求,又可以接受Servlet/JSP機制的請求,充分發揮該機制運行速度快、安全、跨平臺等諸多優勢,具有很好的實用價值。
參考文獻:
[1] 蔡劍,景楠.Java Web應用開發:J2EE和Tomcat[M].2版.北京:清華大學出版社,2005:43-250.
[2] 孫鑫.Servlet/JSP深入詳解:基于Tomcat的Web開發[M].電子工業出版社,2008:2-20.
[3] Microsoft Corpararion.IIS 5.0使用參考手冊——IIS 6.0新增功能詳解[M].北京:科學出版社,2003.
[4] 李澗,李爽,杜瑞慶.JSP環境配置[J].現代企業教育,2006,11(2):144-145.
[5] 陳曦,鄒桂章.Tomcat服務器架設技術的探討[D].廣東:廣東省計算中心,2003.
[6] 梁田,倪少權,葉利華.ISAPI在Web服務器中的應用[D].四川:成都信息工程學院學報,2005.