作者環境:
Windows 2000 SP4 + IIS 5.0 + JDK 1.4.2
Tomcat安裝路徑:C:\Tomcat 5.0
Jdk1.4 安裝路徑:C: \j2sdk1.4.1_02
JAVA_HOME :C: \j2sdk1.4.1_02
CLASSPATH :.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\LIB\DT.JAR;
前期準備:
?在整合之前作者假定您已經成功的安裝好了JDK1.4.2(現在SUN已經發行了JDK5.0,這里我只以JDK1.4.2為例,因為具體使用什么JDK并不影響服務器的配置,JDK的作用是在IIS已經將HTTP請求轉發給Tomcat以后才起作用,所以等你完全配置好了您的服務器之后再重新安裝更高的JDK也不會有什么大的問題。:),并配置好了JAVA_HOME和CLASSPATH環境變量。
開始安裝:
1.安裝Tomcat5.0
安裝模式不用normal,而是選擇full(這樣會把Tomcat安裝成服務模式啟動,而且還有tomcat的源代碼),然后按照提示進行。我的Tomcat裝在C:\Tomcat 5.0下,安裝路徑您可以自行設置,但如果你修改了安裝目錄,那我后面介紹到的配置文件的相應目錄您也必須一并修改。
2.設置環境變量TOMCAT_HOME
在桌面上“我的電腦”圖標上點右鍵選“屬性”->“高級” -> “環境變量” -> “系統變量”-> 新建變量名:TOMCAT_HOME,變量值:C:\Tomcat 5.0,點“確定”保存。
3.拷貝isapi_redirector2.dll
在C:\Tomcat 5.0\conf下新建“jk2”文件夾(這個目錄您可以自行設置,但這將影響到后面相關配置文件的參數),然后復制isapi_redirector2.dll到C:\Tomcat 5.0\conf\jk2下面。
4.創建workers2.properties
創建workers2.properties到C:\Tomcat 5.0\conf下,文件內容如下:
[shm]
file= C:/Tomcat 5.0/logs/jk2.log
size=1048576
# Example socket channel, override port and host.
[channel.socket:localhost:8009]
port=8009
host=127.0.0.1
# define the worker
[ajp13: localhost:8009]
channel=channel.socket:localhost:8009
# Uri mapping
[uri:/*.jsp]
[uri:/servlets-examples/*]
worker=ajp13:localhost:8009
# define the worker
[status:status]
# Uri mapping
[uri:/jkstatus/*]
worker=status:status
使用前請將文件的第二行:file= C:/Tomcat 5.0/logs/jk2.log 中的C:/Tomcat 5.0改成您的Tomcat安裝路徑。
5.創建jk2.properties
創建jk2.properties到C:\Tomcat 5.0\conf下。其內容如下:
## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED
## WHEN YOU EDIT THE FILE.
## COMMENTS WILL BE _LOST_
## DOCUMENTATION OF THE FORMAT IN JkMain javadoc.
# Set the desired handler list
# handler.list=apr,request,channelJni
#
# Override the default port for the socketChannel
# channelSocket.port=8019
# Default:
# channelUnix.file=${jkHome}/work/jk2.socket
# Just to check if the the config? is working
# shm.file=${jkHome}/work/jk2.shm
# In order to enable jni use any channelJni directive
# channelJni.disabled = 0
# And one of the following directives:
# apr.jniModeSo=/opt/apache2/modules/mod_jk2.so
# If set to inprocess the mod_jk2 will Register natives itself
# This will enable the starting of the Tomcat from mod_jk2
# apr.jniModeSo=inprocess
#request.tomcatAuthentication=true
request.tomcatAuthentication=false
6.創建并導入注冊表文件isapi_redirect.2.0.reg
?創建并導入注冊表文件isapi_redirect.2.0.reg,其內容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi ?Redirector]
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\2.0]
"serverRoot"="C:\\Tomcat 5.0"
"extensionUri"="/jakarta/isapi_redirector2.dll"
"workersFile"="C:\\Tomcat 5.0\\conf\\workers2.properties"
"logLevel"="DEBUG"
導入之前請先修改注冊表文件,把serverRoot 和workersFile的“C:\\Tomcat 5.0”替換成您的Tomcat安裝路徑。
7.設置IIS的ISAPI篩選器
點擊“開始菜單” -> “設置” -> “控制面板” ->“ 管理工具” -> “Internet 服務管理器”,然后找到 你的站點(我的計算機名是BBBear,“默認 Web 站點”)。點右鍵 -> “屬性”->“ISAPI篩選器”->“添加”->篩選器名稱:jakarta,可執行文件:C:\Tomcat 5.0\conf\jk2\isapi_redirector2.dll。點“確定”保存。(這里的jk2是第3步使用的文件夾。)
8.配置用于重定向的虛擬目錄(非常關鍵的一步)
在“默認 Web 站點”點右鍵 -> “新建” ->“ 虛擬目錄” -> “下一步” -> 別名填:jakarta ->下一步->目錄選擇為:C:\Tomcat 5.0\conf\jk2 -> 下一步 -> “執行(例如ISAPI應用程序或CGI)”一項一定要打上勾 -> 下一步 -> 完成。(一定要注意jakarta的名字不能改變,因為這個名字對應這注冊表里jakarta對應,如果名字拼寫錯誤將導致失敗。)
9.檢查篩選器配置
重新啟動“默認 Web 站點”。然后在“默認 Web 站點”點右鍵 ->“屬性”->“ISAPI篩選器”,如果“jakarta”前面的箭頭是綠色的而且優先級為“高”,那么表明配置已經成功了。如果箭頭是紅色,那么請您重新檢查整個配置過程,看看有沒有弄錯的地方。如果確認一切正確無誤,那就請您重新啟動機器,注意一定是重新啟動機器而不是重新啟動IIS,再重新查看其狀態,這樣一般可以解決這個問題。
10.設置環境變量TOMCAT_HOME
桌面上,“我的電腦”點右鍵 ->“屬性”-> “高級”->“環境變量”->“系統變量”->新建變量名:TOMCAT_HOME, 變量值:C:\Tomcat 5.0 -> 點“確定”保存。
11.拷貝JAVA編譯工具包Tools.jar
把C: \j2sdk1.4.1_02\lib目錄下的tools.jar復制到Tomcat安裝目錄下的common\lib的目錄下(C:\Tomcat 5.0\common\lib\下)。
12.添加默認文檔
“開始菜單” -> “設置” -> “控制面板” -> “管理工具” -> “Internet 服務管理器” -> 找到你的站點(我的計算機名是BBBear ,“默認 Web 站點”)-> 點右鍵 -> “屬性” -> “文檔”->添加->輸入“index.jsp”-> 確定 -> 再添加“index.html”-> 確定(因為著這是Tomcat的默認起始頁面)-> 。
13.設置網站根路徑
“主目錄”-> “本地路徑”一欄,選擇“C:\Tomcat 5.0\webapps\ROOT”。
14.重新啟動Tomcat和IIS
重新啟動Tomcat 然后再重新啟動IIS,
15.檢驗我們的成果
首先,打開http://localhost/。您看到了什么,對,Tomcat的默認頁面。熟悉的“貓”的形象是不是讓您感覺到激動呢。嗯,不慌,好戲還在后面呢。其實到看到了Tomcat起始頁面您不應該感到驚奇,因為您仔細看看這個頁面的后綴您就明白了,“HTML”對,它只是一個靜態頁面,而且是由IIS解析的。
然后,您現在試著打開http://localhost/jsp-examples看看,返回“該頁無法顯示”的錯誤頁面,為什么?嗯,其實原因很簡單,因為我們的IIS的默認目錄在/webapps/root下,而jsp-examples目錄是與root屬于同一級別的子目錄。所以當您使用上述路徑訪問的時候IIS無法在root目錄下找到jsp-examples。怎么辦?嗯,如果您對IIS很熟悉的話,您一定能想到,對,在IIS中的當前站點建立虛擬目錄就好了。
接著,我們現在在IIS中建立名為jsp-examples,路徑為C:\Tomcat 5.0\webapps\jsp-examples的虛擬目錄(這個目錄是Tomcat自帶的Jsp例子程序),同時建立一個名為servlets-examples,路徑為C:\Tomcat 5.0\webapps\servlets-examples的虛擬目錄(這個目錄對應的為Tomcat自帶的Servlet的例子程序)。為什么要這么做?待會您就知道了。
現在您再使用http://localhost/ 這個路徑來訪問,然后在出現的Tomcat起始頁面的左下方找到JSP Examples 和 Servlet Examples 的鏈接,您點擊其中的 JSP Examples 后您就可以看到一個 JSP Samples 的頁面,在這里有許多的JSP例程,您隨便找一個,然后單擊“Execute”,看看結果是什么?如果是正常的返回結果頁面,嗯,恭喜您,這代表我們可以開始驚呼了,因為這代表我們前面的努力都得到了回報,IIS已經成功的將JSP頁面交給Tomcat來解析。
最后,現在讓我們來看看讓IIS轉發Servlet請求,我們先回到Tomcat起始頁面,然后試著點擊Servlet Examples 鏈接,嗯,同樣您將看到一個Servlet Samples頁面,現在您也隨便找一個Servlet程序然后點擊“Execute”看看,如果不出意外,您應該看到正確的返回結果。嗯,我現在鄭重的宣布,您已經成功完成了Tomcat與IIS的完美結合。恭喜!!
16.還需要羅嗦幾句
當您在調試的時候配置都沒有問題,但是就是出現“該頁無法顯示”的頁面?為什么?在這里您需要注意以下幾點:
第一,Tomcat的啟動是需要一些時間的,尤其是您在Tomcat上使用Struts構建的站點,這個問題尤其突出。要看Tomcat是否成功啟動,您可以查看Tomcat的日志文件:c:\tomcat\logs\stdout.log,如果已經包含“Server startup in 1125 ms”,則證明Tomcat服務已經啟動成功。
第二,在調試中容易出現一些很奇怪的現象,例如:改變了配置,但是執行的結果頁面卻沒有任何變化。嗯,這個問題在開發Web程序最容易出現的問題,在這里我也根據自己開發Web程序的經驗告訴你一些避免的方法,當你在改變配置后,您最好不要在以前的打開頁面上繼續嘗試,應該重新打開一個窗口,因為IE在訪問有頁面緩存,他會保存一些已經被打開的頁面來提高性能,但這個性能對于開發者來說可能就是惡夢了。
第三,您在更改workers2.properties這個文件后,如果想讓其生效您必須重新啟動IIS,注意是完全啟動,而不是在IIS管理器中停止,而是要讓IIS進程重新啟動,當然如果您也可以啟動您的計算機。
第四,workers2.properties中的[URI]部分很值得注意,這部分的功能是告訴IIS,什么后綴的文件請求將轉發給Tomcat來解釋,在本文中您可以看到這部分的內容如下:
[uri:/*.jsp]
[uri:/servlets-examples/*]
[uri:/*.jsp],這句話的意思是所有的JSP文件將 由Tomcat來解釋。
[uri:/servlets-examples/*] ,而這句話的意思是專門針對servlet的,因為在執行servlet的時候沒有擴展名,所以如果沒有此條語句,那么當您在執行servlet的時候就會出現找不到頁面的錯誤。而此處使用的/servlets-examples正好為Tomcat自帶的Servlet例子程序的目錄。同時它也對應著IIS的虛擬目錄servlets-examples。如果您在[URI]字段中使用如下的語法,[uri:/*],那就意味著IIS會將當前虛擬站點中的所有文件都交給Tomcat來解釋。
第五,IIS中的虛擬目錄并不等于Tomcat的Server.xml中配置的上下文(Context)。而且您必須注意的是,如果您的IIS中為包含JSP或者Servlet的目錄配置了虛擬目錄,您不要忘記要在Tomcat中配置與目錄名相同的上下文,當然,Tomcat 會自動的將主機根目錄下的目錄配置成為上下文,這當然也是可以實現的,但是畢竟這并不可控,所以建議大家都為專門的目錄建立對應的上下文。