Apache和Tomcat的整合原理及例子.docx

上传人:b****4 文档编号:3812719 上传时间:2022-11-25 格式:DOCX 页数:15 大小:23.48KB
下载 相关 举报
Apache和Tomcat的整合原理及例子.docx_第1页
第1页 / 共15页
Apache和Tomcat的整合原理及例子.docx_第2页
第2页 / 共15页
Apache和Tomcat的整合原理及例子.docx_第3页
第3页 / 共15页
Apache和Tomcat的整合原理及例子.docx_第4页
第4页 / 共15页
Apache和Tomcat的整合原理及例子.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Apache和Tomcat的整合原理及例子.docx

《Apache和Tomcat的整合原理及例子.docx》由会员分享,可在线阅读,更多相关《Apache和Tomcat的整合原理及例子.docx(15页珍藏版)》请在冰豆网上搜索。

Apache和Tomcat的整合原理及例子.docx

Apache和Tomcat的整合原理及例子

Apache和Tomcat的整合,原理及例子

这类文档很多很多,但是大多是由不明原理的人拘泥于具体版本写出来的,有很多错漏或多余的部分。

最后找到一篇写得很很不错的,

我修正了其中的错误然后加了一些自己的理解

原理

tomcat为一个jsp的容器,apache为一个webserver,两者之间通信通过worker进行(由Tomcat使用Server.xml文件中Connector的标签来定义其端口和协议),通过mod_jk的模块(由web服务器像apache、iis等使用)和WebServer通信。

通信协议有很多,其中jk2已经被抛弃了,现在就用jk就好了。

整个过程其实就是让apache的httpd.conf文件调用mod_jk.conf,mod_jk.conf调用workers.properties,最后配置虚拟主机。

文件说明

mod_jk.conf

主要定义mod_jk模块的位置以及mod_jk模块的连接日志设置,还有定义worker.properties文件的位置。

worker.properties

定义worker的参数,主要是连接tomcat主机的地址和端口信息。

如果Tomcat与apache不在同一台机器上,或者需要做多台机器上tomcat的负载均衡只需要更改workers.properties文件中的相应定义即可。

第一部分:

安装配置tomcatapachemod_jkj2sdk

准备下载下列文件

Jdk1.5

下载地址:

tomcat5.5.9

下载地址:

http:

//jakarta.apache.org

apacheapache_2.0.59

下载地址:

http:

//httpd.apache.org/download.cgi

jakarta-tomcat-connectors-jk2.0.43-win32-apache2.0.49(根据Apache版本决定)

下载地址:

http:

//archive.apache.org/dist/jakarta/tomcat-connectors/

把上面所有组件都安装到D:

\Server目录下,这样也方便日常管理配置和将来移植到别的服务器上去。

1:

安装j2sdk

安装到D:

\server\j2sdk\目录下,注意安装成系统服务

2:

安装tomcat

安装到D:

\server\tomcat\目录下,注意安装成系统服务

可能遇到的问题

问题1:

在解析JSP页面时,提示无法找到javacompiler

请拷贝j2sdk\lib\tools.jar到tomcat\common\lib下面。

使用tomcat作为service启动后总是这样,当然用startup.bat脚本启动倒是完全正常。

主要原因分析起来是以service方式启动的Tomcat无法读取JAVA_HOME和CLASS_PATH等环境变量。

问题2:

如何解决通过服务方式启动tomcat时log中提示ZoneInfo:

d:

\server\j2sdk\lib\zi\ZoneInfoMappings(系统找不到指定的路径。

从d:

\server\j2sdk\jre\lib目录拷贝所有文件放到d:

\server\j2sdk\lib\,jre\lib中的文件和j2sdk\lib\中的文件没有一个重复的,不用担心会覆盖掉j2sdk\lib中原有的任何文件。

3:

安装apache到d:

\server\(会自动生成apache2文件夹)

配置index.jsp为默认页配置GB2312为默认语言

不只Apache的httpd.conf中定义了默认页面文件,连Tomcat的web.xml配置文件的结尾处也定义了默认页面文件,而且Tomcat中定义的的优先级还高于原有的Apache中所定义的默认页。

4:

加入mod_jk连接模块

拷贝mod_jk-1.2.10-apache-2.0.43.so到d:

\server\apache2\modules\改名为mod_jk.so

5:

修改apache的配置文件

为了保持httpd.conf文件的简洁,把jk模块的配置放到单独的文件中来,就在httpd.conf中增加一行调用代码

includeD:

\server\Apache2\conf\mod_jk.conf

6:

配置mod_jk.conf

请注意使用绝对路径

其实最关键的就是第一条第二条和最后一条,如果要精简,就保留这三条内容就可以了。

代码

#Loadmod_jkmodule

LoadModulejk_modulemodules/mod_jk.so

#Wheretofindworkers.properties

JkWorkersFileconf/workers.properties

#Wheretoputjklogs

JkLogFilelogs/mod_jk.log

#Setthejkloglevel[debug/error/info]

JkLogLevelinfo

#Selectthelogformat

JkLogStampFormat"[%a%b%d%H:

%M:

%S%Y]"

#JkOptionsindicatetosendSSLKEYSIZE,

JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories

#JkRequestLogFormatsettherequestformat

JkRequestLogFormat"%w%V%T"

#Sendservletforcontext/examplestoworkernamedajp13

#JkMount/servlet/*ajp13

#SendJSPsforcontext/examplestoworkernamedajp13

JkMount/*.jspajp13

上面这一行我们设置了了/*.jspajp13就是说把所有.jsp结尾的文件都由ajp13这个worker交给tomcat处理了,如果应用被映射为一个.do的URL,这样就会出错.解决方法是再添加如下一行:

代码

JkMount/*.doajp13

7:

配置apache2\conf\workers.properties

代码

worker.list=ajp13

worker.ajp13.port=8009

worker.ajp13.host=localhost#本机,若上面Tomcat主机不为localhost,作相应修改

worker.ajp13.type=ajp13#类型

worker.ajp13.lbfactor=1#代理数,不用修改

第二部分:

虚拟主机的配置

举例配置2个vhost网站一个是localhost,另一个是

当然是虚拟的,本地测试时,应该修改系统中的hosts文件,添加一行127.0.0.1

1:

Apache虚拟主机配置:

Httpd.conf文件最后添加

代码

includeD:

\server\Apache2\conf\vhost.conf

而vhost.conf内容写

代码

NameVirtualHost*:

80

80>

ServerAdminwebmasteratlocalhost

DocumentRoot"D:

/server/Tomcat/webapps/ROOT"

ServerNamelocalhost

ErrorLoglogs/localhost-error_log

CustomLoglogs/localhost-access_logcommon

80>

ServerAdminwebmaster@dummy-hostdot

DocumentRootD:

/server/www/

ServerName

ErrorLoglogs/-error_log

CustomLoglogs/-access_logcommon

#这样我可以看到apache服务器状态

SetHandlerserver-status

Orderdeny,allow

Denyfromall

Allowfromlocalhost

Allowfrom

2:

Tomcat虚拟主机配置

添加新的虚拟主机,在tomcat安装路径\conf\server.xml的最后,找到段,改为

代码

/server/www/"unpackWARs="true"autoDeploy="true"xmlValidation="false"xmlNamespaceAware="false">

3:

测试虚拟主机效果

访问http:

//localhost/应该可以看到原来的tomcat默认页面。

写一个index.jsp

代码

</p><p>testjsp</p><p>

<%

StringshowMessage="OhMyGod!

";

out.print(showMessage);

%>

放在d:

/server/www下面,访问

页面显示HelloWorld!

就成功了

第三部分,部分相关性能优化及其它问题

如何使用server版jvm?

Jvm动态库有client和server两个版本,分别针对桌面应用和服务器应用做了相应的优化,client版本加载速度较快,server版本加载速度较慢但运行起来较快。

在开始菜单tomcat5->tomcatconfig的java属性中有一项jvm路径指向server目录下的jvm就行了。

更改默认java.exe调用的jvm.dll,这个由jvm.cfg决定。

编辑%JAVA_HOME%\jre\lib\i386\jvm.cfg

里面第一行写的是-client默认就是client版本,把第二行的-serverKNOWN放到第一行,如下面所示

代码

-serverKNOWN

-clientKNOWN

-hotspotALIASED_TO-client

-classicWARN

-nativeERROR

-greenERROR

改完保存,然后看看默认版本:

C:

\java-version

javaversion"1.4.2_07"

Java(TM)2RuntimeEnvironment,StandardEdition(build1.4.2_07-b05)

JavaHotSpot(TM)ServerVM(build1.4.2_07-b05,mixedmode)

关于JAVA_HOME与CATALINA_HOME、CLASSPATH

ClassPath网上有人说在j2sdk1.3开始就不需要配置了,而本例中实际是不需要配置JAVA_HOME和CATALINA_HOME的,因为tomcat以service模式启动根本不认你的java_home,当然为了让你能够在命令行运行startup.bat时也能顺利启动Tomcat,可以配置也建议配置上JAVA_HOME与CATALINA_HOME,ClassPath就免了吧,连Resin都不需要这个了。

有关路径设置

Path=d:

\server\jdk\bin;……放到最前,避免有多个jdk时的很多问题

关于apache2在win平台上的一个小问题

可能apache的日志中常出现类似如下的提示

[error](730038)Anoperationwasattemptedonsomethingthatisnotasocket.:

winnt_accept:

AcceptExfailed.Attemptingtorecover.

这是由于apache使用了微软的AcceptEx()调用的缘故,禁用掉即可,此问题只会出现在win平台且apache的2.0.49和更高版本上,出现错误的大概原因是防火墙和防病毒软件所导致,导致结果也有好几种,像apache占用很高cpu资源或者网站页面无法打开。

解决方法修改d:

\server\apache2\conf\httpd.conf中的mpm部分

代码

ThreadsPerChild250

MaxRequestsPerChild0

Win32DisableAcceptEx#添加这一行即可,做过压力测试,对性能影响很小,可以忽略

tomcat集群和负载均衡的实现(session同步)

(一)环境说明

(1)服务器有4台,一台安装apache,三台安装tomcat

(2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2

(3)ip配置,一台安装apache的ip为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2/4

(二)安装过程

(1)在三台要安装tomcat的服务器上先安装jdk

(2)配置jdk的安装路径,在环境变量path中加入jdk的bin路径,新建环境变量JAVA_HOME指向jdk的安装路径

(3)在三台要安装tomcat的服务器上分别安装tomcat,调试三个tomcat到能够正常启动

(4)tomcat的默认WEB服务端口是8080,默认的模式是单独服务,我的三个tomcat的WEB服务端口修改为7080/8888/9999

修改位置为tomcat的安装目录下的conf/server.xml

修改前的配置为

maxThreads="150"minSpareThreads="25"maxSpareThreads="75"

enableLookups="false"redirectPort="8443"acceptCount="100"

connectionTimeout="20000"disableUploadTimeout="true"/>

修改后的配置为

maxThreads="150"minSpareThreads="25"maxSpareThreads="75"

enableLookups="false"redirectPort="8443"acceptCount="100"

connectionTimeout="20000"disableUploadTimeout="true"/>

依次修改每个tomcat的监听端口(7080/8888/9999)

(5)分别测试每个tomcat的启动是否正常

http:

//192.168.0.1:

7080

http:

//192.168.0.2:

8888

http:

//192.168.0.4:

9999

(三)负载均衡配置过程

(1)在那台要安装apache的服务器上安装apache2.0.55,我的安装路径为默认C:

\ProgramFiles\ApacheGroup\Apache2

(2)安装后测试apache能否正常启动,调试到能够正常启动http:

//192.168.0.88

(3)下载jk2.0.4后解压缩文件

(4)将解压缩后的目录中的modules目录中的mod_jk2.so文件复制到apache的安装目录下的modules目录中,我的为C:

\ProgramFiles\ApacheGroup\Apache2\modules

(5)修改apache的安装目录中的conf目录的配置文件httpd.conf,在文件中加LoadModule模块配置信息的最后加上一句LoadModulejk2_modulemodules/mod_jk2.so

(6)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下

修改前

--AnEnginerepresentstheentrypoint(withinCatalina)thatprocesses

everyrequest.TheEngineimplementationforTomcatstandalone

analyzestheHTTPheadersincludedwiththerequest,andpassesthem

ontotheappropriateHost(virtualhost).-->

--YoushouldsetjvmRoutetosupportload-balancingviaAJPie:

-->

--Definethetoplevelcontainerinourcontainerhierarchy-->

修改后

--AnEnginerepresentstheentrypoint(withinCatalina)thatprocesses

everyrequest.TheEngineimplementationforTomcatstandalone

analyzestheHTTPheadersincludedwiththerequest,andpassesthem

ontotheappropriateHost(virtualhost).-->

--YoushouldsetjvmRoutetosupportload-balancingviaAJPie:

-->

--Definethetoplevelcontainerinourcontainerhierarchy

-->

将其中的jvmRoute="jvm1"分别修改为jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3"

(7)然后重启三个tomcat,调试能够正常启动。

(8)在apache的安装目录中的conf目录下创建文件workers2.propertie,写入文件内容如下

#finethecommunicationchannel

[channel.socket:

192.168.0.1:

8009]

info=Ajp13forwardingoversocket

#配置第一个服务器

tomcatId=tomcat1#要和tomcat的配置文件server.xml中的jvmRoute="tomcat1"名称一致

debug=0

lb_factor=1#负载平衡因子,数字越大请求被分配的几率越高

#Definethecommunicationchannel

[channel.socket:

192.168.0.2:

8009]

info=Ajp13forwardingoversocket

tomcatId=tomcat2

debug=0

lb_factor=1

#Definethecommunicationchannel

[channel.socket:

192.168.0.4:

8009]

info=Ajp13forwardingoversocket

tomcatId=tomcat3

debug=0

lb_factor=1

[status:

]

info=Statusworker,displaysruntimeinformation.

[uri:

/jkstatus.jsp]

info=Displaystatusinformationandcheckstheconfigfileforchanges.

group=status:

[uri:

/*]

info=Mapthewholewebapp

debug=0

(9)在三个tomcat的安装目录中的webapps建立相同的应用,我和应用目录名为TomcatDemo,在三个应用目录中建立相同WEB-INF目录和页面index.jsp,index.jsp的页面内容如下

<%@pagecontentType="text/html;charset=GBK"%>

<%@pageimport="java.util.*"%>

ClusterAppTest

ServerInfo:

<%

out.println(request.getLocalAddr()+":

"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1