Tomcat 4.0+apache 1.3完美整合
板橋里人 jdon.com 2001/10
1.Tomcat缺省的jsp文件必須放置在examples目錄下,難道jsp文件只能放在examples下嗎?
2. 訪問jsp只能用xxxx.com:8080訪問嗎?
本文討論如何結合Tomcat和Apache及其他腳本程序如PHP混合使用情況,如果一臺服務器只運行jsp,那解決辦法很簡單:只要將server.xml中8080端口改成80就可以,或將apache中的httpd.conf的80改成8080也可以.可以參考: Using Apache Tomcat 4
Tomcat 3.23中很好做,相關文章介紹不少,Tomcat 4.0就不一樣了,本人經過試驗,摸索出解決這兩個問題的簡單方式,這種方式可以和apache結合在一起,假設域名主機是sign.jdon.com 可以實現http://sign.jdon.com/訪問所有JSP文件,這一結果是很多朋友希望達到的,我下面介紹一下.
分兩步: 配置server.xml 和 配置httpd.conf:
配置server.xml
首先介紹一下tomcat conf下的server.xml 我們的動作主要是在這里面操作:
server.xml有兩部分組成:
1. service=Tomcat-Standalone 這是Tomcat標準啟動服務,使用端口8080訪問
2. service=Tomcat-Apache 這是和apache整合部分,使用80008端口訪問 ,同時需要在httpd.conf中加載mod_webapp.so
在上面兩個service段中加入(在哪個service加入取決于你需要是以sign.jdon.com:8080 還是以sign.jdon.com/訪問):
我們是想以后者訪問,就在service=Tomcat-Apache中加入:
<Host name="虛擬主機域名" debug="0" appBase="應用基本目錄" unpackWARs="true"> <Context path="容器URL路徑" docBase="容器目錄" debug="0" reloadable="true"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="自己的log文件名." suffix=".txt" timestamp="true"/> </Context> </Host> |
1. reloadable="true"確保你每次上傳bean或servlet到WEB-INF/classes時,系統自動裝載最新的.
2. docBase="" 是你自己jsp目錄的實際位置 ,如果是winNT, 可以是c:/jserv
3. Logger 是用來將/jserv的啟動狀態單獨輸出一個log文件中 這里是localhost_jserv_log,這個文件在Tomcat 的logs目錄下??梢杂脕肀O視你的/jserv啟動了沒有。
4.欠缺servlet或bean是放置在自己目錄下的WEB-INF/classes中,建議你將eamples目錄下的WEB-INF原封不動的拷貝過來,省事。你要修改這個,就修改web.xml 這些 上面推薦的英文文章中有介紹.
我的server.xml是這樣:
<Service name="Tomcat-Apache">
<Connector className="org.apache.catalina.connector.warp.WarpConnector" port="8008" minProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="10" debug="0"/>
<!-- Replace "localhost" with what your Apache "ServerName" is set to --> <Engine className="org.apache.catalina.connector.warp.WarpEngine" name="Apache" debug="0" appBase="webapps">
<!-- Global logger unless overridden at lower levels --> <Logger className="org.apache.catalina.logger.FileLogger" prefix="apache_log." suffix=".txt" timestamp="true"/>
<!-- Because this Realm is here, an instance will be shared globally --> <Realm className="org.apache.catalina.realm.MemoryRealm" />
<!--下面是我加入的--> <Host name="sign.jdon.com" debug="0" appBase="/home/bqlr" unpackWARs="true"> <Context path="/" docBase="/home/bqlr/sign" debug="0" reloadable="true"> <Logger className="org.apache.catalina.logger.FileLogger" prefix="jdon.com_log." suffix=".txt" timestamp="true"/> </Context> </Host>
</Engine>
</Service> |
配置httpd.conf
設定sign.jdon.com 對應我的目錄/home/bqlr/sign/ sign.jdon.com是虛擬主機名,我的部署方法可以為特定虛擬主機域名提供JSP功能:
在自己的apache 的conf下的httpd.conf加入:
LoadModule webapp_module libexec/mod_webapp.so AddModule mod_webapp.c WebAppConnection conn warp sign.jdon.com:8008
<VirtualHost 61.119.57.108> ServerAdmin webmaster@jdon.com DocumentRoot /home/bqlr/sign ServerName sign.jdon.com # WebAppDeploy examples conn /examples/ WebAppDeploy sign conn / </VirtualHost>
|
1.本方法是適合apache 1.3版本的 適合glibc2.1 我在RedHat 7.2 7.1 7.0 6.2 6.1都測試通過
2.如果你的linux安裝的是glibc2.1 就要自己下載mod_webapp.src自己編譯,編譯前,要先安裝其目錄下的APR.
這里是我編譯好正在使用的 mod_webapp.so ,可以下載直接copy到apache的libexec目錄下
3.使用httpd configtest 測試httpd.conf可否啟動,如果出現無效LoadModule提示 是因為你的apache沒有使用module=so編譯,重新編譯apache 網絡上其他有介紹.
4.在/home/bqlr/sign下安裝WEB-INF/classes目錄 最簡單的辦法是copy -R tomcat/wepapps/examples/WEB-INF 到/home/bqlr/sign下,以后自己編譯的bean或servlet放在這個目錄下 以后我有空 我公布我的jsp/bean的編程舉例.
最后 重新啟動Tomcat 和 apache 你可以使用sign.jdon.com訪問所有的Jsp 和servlet了.