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目录下。可以用来监视你的/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了.