blogspot.com-GA4

星期四, 6月 18, 2009

IIS+Tomcat 整合環境測試

目前還有問題仍在尋找關鍵點中,老實說可能還是卡在了 isapi吧!!
看了很多文章還是沒有用 開了.jsp 頁面,
還是變成直接開啟文字檔把程式碼給全都抓出來了,
卡在哪一點真的不曉得,
請客戶從防火牆下手看看吧!!
這樣子效能也比較好摟


一、安裝環境

測試環境
IIS 5.1
tomcat 6.0.20

1. 先安裝設定好 IIS Tomcat
※安裝Tomcat時把Tomcat旁邊的+號點開勾選Service和Native。

2. 安裝Tomcat Connector mod_jk

1.2

用預設安裝 C:\Program Files\Apache Software Foundation\Jakarta Isapi Redirector
※到tomcat.apache.org下載新版的isapi_redirect.dll,覆蓋掉上個步驟產生的檔案
isapi_redirect.dll
※這一步需要測試

3.新增一個環境變數,變數名稱輸入CATALINA_HOME,變數值輸入Tomcat的安裝路徑,例如我的內容是:C:\Program Files\Apache Software Foundation\Tomcat

6.0.20

二、開始設定 IIS、Tomcat

**1. 在點選你的WEB站台中新增一個虛擬目錄名叫 jakarta ,目錄請指到 isapi_redirect.dll,權限請選擇「讀取」、「執行指令檔」、「執行」三項

2. 啟動IIS點選你的WEB站台按右鍵,選「內容」進入「ISAPI篩選器」→新增,篩選器名稱輸入「Jakarta Redirector」,執行檔輸入「C:\Tomcat 4.1

\bin\iis\isapi_redirect.dll」(視你實際的位置而定)

3. 打開一個記事本輸入以下內容
[code]
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0]
"extension_uri"="/jakarta/isapi_redirect.dll"
"log_file"="C:\\Program Files\\Apache Software Foundation\\Jakarta Isapi Redirector\\log\\iis_redirect.log"
"log_level"="emerg"
"worker_file"="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0.20\\conf\\worker.properties"
"worker_mount_file"="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0.20\\conf\\uriworkermap.properties"
[/code]

※ 再看文章時 看到註冊檔如果為 "extension_uri"="/tomcat/isapi_redirect.dll" 此時他的 "虛擬目錄" 設定也是叫 tomcat 名稱相同
其中這兩項
"worker_file"="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0.20\\conf\\worker.properties"
"worker_mount_file"="C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0.20\\conf\\uriworkermap.properties"
為關鍵,其中的檔更為關鍵,內容和格式都很重要,用exe安裝這部份就可省略。


將該內容另存成iis_redirect.reg在任意位置,
檔案建好之後即可執行該檔案,按下確定後會將檔案內容註冊進windows裡頭
※記得在這個檔案中的 jakarta 要與 虛擬目錄 名稱相同

4. 到tomcat\conf下打開一個記事本輸入以下內容並將檔名存成worker.properties

# ************ Begin worker.properties **************
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=ajp13
worker.tomcat_home=C:\Program Files\Apache Software Foundation\Tomcat 6.0.20
#上面這一行指到你的tomcat目錄
worker.java_home=C:\Program Files\Java\jdk1.6.0_10
#上面這一行指到你的java的目錄
ps=\
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
# 這裡有說要改成主機功能變數名稱位址
# ************ End worker.properties **************


5. 到tomcat\conf下打開一個記事本輸入以下內容並將檔名存成uriworkermap.properties

# ************ Begin uriworkermap.properties **************
default.worker=ajp13
/=$(default.worker)
/*=$(default.worker)
/ROOT/=$(default.worker)
/ROOT/*=$(default.worker)
/manager=$(default.worker)
/manager/*=$(default.worker)
/examples=$(default.worker)
/examples/*=$(default.worker)
/tomcat-docs=$(default.worker)
/tomcat-docs/*=$(default.worker)
/webdav=$(default.worker)
/webdav/*=$(default.worker)
#以上的目錄結構,視您webapps下的目錄結構自行增減,

#例如webapps目錄底下如果建立了一個ePOS的資料夾,
#那麼上面就得再加上
/ePOS=$(default.worker)
/ePOS/*=$(default.worker)
# ************ End uriworkermap.properties **************


三、模擬環境(視實際情況而定)
1. C:\WINDOWS\system32\drivers\etc\hosts

#127.0.0.1 localhost
127.0.0.1 www.frt.com
127.0.0.1 www.a.com

2. 打開IIS管理器,在左側網站一欄新建網站:www.frt.com,其目錄指向空目錄C:\Inetpub\frt\,讓網站有執行(如ISAPI應用程式或CGI)的許可權。
同時,在tomcat中也要建立相同的站點,修改conf/server.xml,添加:
unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
prefix="ovtch_vm_log." suffix=".txt" pattern="common" resolveHosts="false"/>

注意站點目錄與IIS中是不同的,這個會默認在ROOT中。


3. 在ROOT目錄底下建立了一個ePOS的資料夾,則在該資料夾中建立一個名為WEB-INF的資料夾,並在WEB-INF資料夾中建立兩個名為classes和lib的資料夾

4. 先將TOMCAT關閉,再將IIS重新啟動,再開啟TOMCAT

5. 將電腦關機幾秒鐘之後再開機

6. 開機後在IE裡輸入http://localhost/examples/jsp/dates/date.jsp,重新整理幾次確定JSP程式能正常執行

7. 將自己寫的*.jsp網頁放進ROOT以及ROOT中的目錄裡,假如目錄名稱為ePOS,檔案名稱為test.jsp

8. 在IE裡輸入http://localhost/test.jsp以及http://localhost/ePOS/test.jsp,若有正常執行程式的話就表示您已經成功了

9. 若是失敗的話請先檢查第10步及以後的步驟,再不成功的話就請將以上全部檢查一遍吧

10. 當其它目錄中的網頁要連結進您的JSP網頁時可用絕對路徑法或是URL




但或許此時還不行,這時你該確認以下幾點:
1.你的「Internet信息服務管理器」->「網站」->「默認網站」->「屬性」->「ISAPI篩選器」中的jakarta是否是向上的綠色箭頭?如果是紅色的,檢查一下你之前做

的配置有沒有少了或是寫錯了點什麼,再重新配置一遍
2.確認你的Tomcat安裝目錄下的common\lib目錄中是否有tools.jar文件(Tomcat5好像是有的,但Tomcat4中是沒有的,網上的文檔很少提到這件事,致使我多次配置

失敗),沒有的話從JDK的lib下拷一個過去。
3.IIS指向的目錄最好和Tomcat指向的目錄一致,不然會發生找不到圖像和其他資源文件的問題。(這點不影響執行,呵呵!)
4.英文文檔中還提到應該把IIS6設置為IIS5隔離模式,「Internet信息服務管理器」->「網站」->「屬性」->「服務」,把「以IIS5.0隔離模式運行WWW服務」打上勾

。不過我不打勾也能正常使用,如果你配置不成功也可以試試這個。



注意的問題:
1,注意你的兩個配置檔workers.properties和uriworkermap.properties和註冊表的新添加的內容,如用exe安裝版jk,則不用擔心這個了。
2,要注意IIS要對這個jakarta目錄有足夠的許可權.如果你的篩選器添加失敗很有可能是許可權的原因.
3,這裏有可能出現ISAPI篩選器不能載入的問題,狀態一欄是紅色箭頭,許可權問題。
4,添加新的Web 服務擴展jakarta之外還要使它允許。另外同樣要注意許可權的問題,因為涉及到Internet訪問,還有就是注意拼寫不要寫錯,比如把jakarta寫

成了jarkata。
5,如果你前面都對,只是你輸入http://www.test.cn/hello.jsp,沒有出現你要的頁面.那麼還請查看還有你有沒有開啟 Tomcat,並在Tomcat引擎中是否載入了和

IIS相對應的WEB應用?加上8080埠是否能訪問,如果能,那估計就是jk的連接出了問題。
 其實正常的話,整個過程是不需要重啟iis的。

補充:
上面的完成後,其實還有一個問題,就是index.jsp並不能當做默認頁面來處理,即訪問www.test.com是看不到效果的,必須加上index.jsp這樣的具體檔案名才行,怎

麼解決呢?
方法一:使用index.html來跳轉,方便,實用,但會影響一定速度,也不是本問題的根本解決辦法,因為,不可能每個有index.jsp的目錄,每個站點,都添加個

index.html吧?

方法二:首先在iis里加應用程式擴展.jsp找相應dll來處理,然後配置默認文檔為index.jsp,重啟服務後查看,結果是不可以的!!事實證明,這種常規的想法是不正

確的。
方法三:正是本文採取的方法,也是比較好的解決方法,其實就是弄明白一個問題,這所以能讓它行,是為什麼行呢?原因在於iis轉來的請求類型,即在檔

uriworkermap.properties這個中,打開後可以看到,
/admin/*=wlb
/manager/*=wlb
/jsp-examples/*=wlb
/servlets-examples/*=wlb
//以下兩行是經過處理後加的
/*.jsp=wlb
/*.do=wlb
//意為所有.jsp,.do的檔都交由tomcat來處理,還在上面的那些目錄,明確指出了尾碼名,所以要做修改:
/*.jsp=wlb
//即所有的請求都由tomcat來處理,這就出現了問題,那所有的asp,jpg等等所有檔都轉來處理,就失去了整合的意義,所以要做如下添加:
//意為如下格式的不用wlb處理,還是由iis來處理,就減少了tomcat處理的能效,並且 iis處理這些檔能效更高一些
!/*.jpg=wlb
!/*.asp=wlb
!/*.gif=wlb
!/*.js=wlb
!/*.swf=wlb
!/*.png=wlb
!/*.htm=wlb
!/*.html=wlb
!/*.rar=wlb
!/*.zip=wlb
!/*.avi=wlb
!/*.rmvb=wlb
//修改完畢
# Optionally filter out all .jpeg files inside that context
# For no mapping the url has to start with exclamation (!)
!/servlets-examples/*.jpeg=wlb
#
# Mount jkstatus to /jkmanager
# For production servers you will need to
# secure the access to the /jkmanager url
#
/jkmanager=jkstatus
這樣解決了JSP站點的問題,但如果所有的其他請求都轉過來了,肯定也不行了,因為,ASP,PHP的站點同時也需要在tomcat中設置相應站點 了,太麻煩,也不是整合

的目的,所以,把ISAPI篩選器 配置到每一個需要支援jsp的站點,而不是配置到IIS的全局設置中,這樣實現了,IIS中的沒有配置為支援JSP的站點,就會與ISAPI與

TOMCAT都沒有任何關係,這樣就很好的解決了此問題,要注意,做方法三時,方法二中所說的並不用做,也就是不用在IIS中所為實現index.jsp 為目的的任何設置。
總結:
說到底,這就是兩種服務的一種集成,使之外部看起來像一種服務,可以這麼理解:
外部訪問功能變數名稱-->解析後到IP-->IIS查找相應站點-->發現jsp文件-->轉至jk連接處理-->將相應檔解釋轉給Tomcat-->將頁面返回給IIS-

->展現給用戶端。
那麼哪出了問題,就查哪,一步一步來,一定能成功的,希望對大家有所幫助,另外多看官方手冊,多想其中的原理,網上流傳的各種文檔不一定就是正確的,包括本

文,只是儘量詳盡的給一種引導。




參考來源:
http://www.javaworld.com.tw/jute/post/view?bid=9&id=99459&sty=1&tpg=1&age=-1

http://www.atcns.com/blog/?p=179

http://www.diybl.com/course/4_webprogram/jsp/jsp_js/200889/135268.html

http://melinhunter.blogspot.com/2006/12/iis-tomcat-6.html

沒有留言: