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了.

参考文章:
installing tomcat on apache
Tomcat How-to
Using Apache Tomcat 4
Deploying Web Applications to Tomcat

Deploying Web Applications to Tomcat