你所需要做的就是:按照你的需求配|TomcatQ只要你正确配置QTomcat一般都能适合你的要求。下面是一pd关于Tomcat的配|技巧,q些技巧源自于我的书:《Tomcat权威指南》,希望对你有所帮助?? Jason Brittain
1Q?配置pȝ理QAdmin Web ApplicationQ?
大多数商业化的J2EE服务器都提供一个功能强大的理界面Q且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的理工具Qƈ且丝毫不逊于那些商业化的竞争Ҏ(gu)。Tomcat的Admin Web Application最初在4.1版本时出玎ͼ当时的功能包括管理context、data source、user和group{。当然也可以理像初始化参数Quser、group、role的多U数据库理{。在后箋的版本中Q这些功能将得到很大的扩展,但现有的功能已经非常实用了?
Admin Web Application被定义在自动部v文gQCATALINA_BASE/webapps/admin.xml ?
Q译者注QCATALINA_BASE即tomcat安装目录下的server目录Q?
你必ȝ辑这个文Ӟ以确定Context中的docBase参数是绝对\径。也是_CATALINA_BASE/webapps/admin.xml 的\径是l对路径。作为另外一U选择Q你也可以删除这个自动部|文Ӟ而在server.xml文g中徏立一个Admin Web Application的contextQ效果是一L(fng)。你不能理Admin Web Applicationq个应用Q换而言之,除了删除CATALINA_BASE/webapps/admin.xml Q你可能什么都做不了?
如果你用UserDatabaseRealmQ默认)Q你需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文g中。你~辑q个文gQ添加一个名叫“admin”的role 到该文g中,如下Q?
< role name="admin"/ >
你同样需要有一个用Pq且q个用户的角色是“admin”。象存在的用户那Pd一个用P改变密码使其更加安全Q:
<user name="admin" password="deep_dark_secret" roles="admin"/ >
当你完成q些步骤后,请重新启动TomcatQ访问http://localhost:8080/adminQ你看C个登录界面。Admin Web Application采用Z容器理的安全机Ӟq用了Jakarta Struts框架。一旦你作ؓ“admin”角色的用户d理界面Q你能够用这个管理界面配|Tomcat?
2Q配|应用管理(Manager Web ApplicationQ?
Manager Web Application让你通过一个比Admin Web Application更ؓ单的用户界面Q执行一些简单的Web应用d?
Manager Web Application被被定义在一个自动部|文件中Q?
CATALINA_BASE/webapps/manager.xml ?
你必ȝ辑这个文Ӟ以确保context的docBase参数是绝对\径,也就是说CATALINA_HOME/server/webapps/manager的绝对\径?
Q译者注QCATALINA_HOME即tomcat安装目录Q?
如果你用的是UserDatabaseRealmQ那么你需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文g中。接下来Q编辑这个文Ӟd一个名为“manager”的角色到该文g中:
< role name=”manager?>
你同样需要有一个角色ؓ“manager”的用户。像已经存在的用户那Pd一个新用户Q改变密码其更加安全)Q?
< user name="manager" password="deep_dark_secret" roles="manager"/ >
然后重新启动TomcatQ访问http://localhost/manager/listQ将看到一个很朴素的文本型理界面Q或者访?a href="http://localhost:port/manager/html/list">http://localhost:port/manager/html/listQ将看到一个HMTL的管理界面。不是哪种方式都说明你的Manager Web Application现在已经启动了?
Manager application让你可以在没有系l管理特权的基础上,安装新的Web应用Q以用于试。如果我们有一个新的web应用位于/home/user/hello下在Qƈ且想把它安装?/hello下,Z试q个应用Q我们可以这么做Q在W一个文件框中输入?hello”(作ؓ讉K时的pathQ,在第二个文本框中输入“file:/home/user/hello”(作ؓConfig URLQ?
Manager applicationq允怽停止、重新启动、移除以及重新部|一个web应用。停止一个应用其无法被讉KQ当有用户尝试访问这个被停止的应用时Q将看到一?03的错???03 - This application is not currently available”?
U除一个web应用Q只是指从Tomcat的运行拷贝中删除了该应用Q如果你重新启动TomcatQ被删除的应用将再次出现Q也是_U除q不是指从硬盘上删除Q?
3Q部|一个web应用
有两个办法可以在pȝ中部|web服务?
1 > 拯你的WAR文g或者你的web应用文g夹(包括该web的所有内容)?CATALINA_BASE/webapps目录下?
2 > Z的web服务建立一个只包括context内容的XML片断文gQƈ把该文g攑ֈ$CATALINA_BASE/webapps目录下。这个web应用本n可以存储在硬盘上的Q何地斏V?
如果你有一个WAR文gQ你若想部v它,则只需要把该文件简单的拯到CATALINA_BASE/webapps目录下即可,文g必须以?war”作为扩展名。一旦Tomcat监听到这个文Ӟ它将Q缺省的Q解开该文件包作ؓ一个子目录Qƈ以WAR文g的文件名作ؓ子目录的名字。接下来QTomcat在内存中徏立一个contextQ就好象你在server.xml文g里徏立一栗当Ӟ其他必需的内容,从server.xml中的DefaultContext获得?
部vweb应用的另一U方式是写一个Context XML片断文gQ然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断q一个完整的XML文gQ而只是一个context元素Q以及对该应用的相应描述。这U片断文件就像是从server.xml中切取出来的context元素一P所以这U片断被命名为“context片断”?
举个例子Q如果我们想部v一个名叫MyWebApp.war的应用,该应用用realm作ؓ讉K控制方式Q我们可以用下面这个片断:
< !--
Context fragment for deploying MyWebApp.war
-- >
< Context path="/demo" docBase="webapps/MyWebApp.war"
debug="0" privileged="true" >
< Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/ >
< /Context >
把该片断命名为“MyWebApp.xml”,然后拯到CATALINA_BASE/webapps目录下?
q种context片断提供了一U便利的Ҏ(gu)来部|web应用Q你不需要编辑server.xmlQ除非你x变缺省的部vҎ(gu),安装一个新的web应用时不需要重启动Tomcat?
4Q配|虚拟主机(Virtual HostsQ?
关于server.xml中“Host”这个元素,只有在你讄虚拟L的才需要修攏V虚拟主机是一U在一个web服务器上服务多个域名的机ӞҎ(gu)个域名而言Q都好象独n了整个主机。实际上Q大多数的小型商务网站都是采用虚拟主机实现的Q这主要是因拟主直接q接到Internetq提供相应的带宽Q以保障合理的访问响应速度Q另外虚拟主能提供一个稳定的固定IP?
Z名字的虚拟主机可以被建立在Q何web服务器上Q徏立的Ҏ(gu)是通过在域名服务器QDNSQ上建立IP地址的别名,q且告诉web服务器把d不同域名的请求分发到相应的网늛录。因文章主要是讲TomcatQ我们不准备介绍在各U操作系l上讄DNS的方法,如果你在q方面需要帮助,请参考《DNS and Bind》一书,作者是Paul Albitz and Cricket Liu (O'Reilly)。ؓ了示范方便,我将使用一个静态的L文gQ因是测试别名最单的Ҏ(gu)?
在Tomcat中用虚拟主机,你需要设|DNS或主机数据。ؓ了测试,为本地IP讄一个IP别名p够了Q接下来Q你需要在server.xml中添加几行内容,如下Q?
< Server port="8005" shutdown="SHUTDOWN" debug="0" >
< Service name="Tomcat-Standalone" >
< Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"/ >
< Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0" scheme="https" secure="true"/ >
< Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
clientAuth="false" protocol="TLS" / >
< /Connector >
< Engine name="Standalone" defaultHost="localhost" debug="0" >
< !-- This Host is the default Host -- >
< Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true" >
< Context path="" docBase="ROOT" debug="0"/ >
< Context path="/orders" docBase="/home/ian/orders" debug="0"
reloadable="true" crossContext="true" >
< /Context >
< /Host >
< !-- This Host is the first "Virtual Host": http://www.example.com/ -- >
< Host name="www.example.com" appBase="/home/example/webapp" >
< Context path="" docBase="."/ >
< /Host >
< /Engine >
< /Service >
< /Server >
Tomcat的server.xml文gQ在初始状态下Q只包括一个虚拟主机,但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的server.xml版本Q其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素Q所包含的context元素中必L一个是默认的contextQ这个默认的context的显C\径应该ؓI(例如Qpath=””)?
5Q配|基验证QBasic AuthenticationQ?
容器理验证Ҏ(gu)控制着当用戯问受保护的web应用资源Ӟ如何q行用户的n份鉴别。当一个web应用使用了Basic AuthenticationQBASIC参数在web.xml文g中auto-method元素中设|)Q而有用户讉K受保护的web应用ӞTomcat通过HTTP Basic Authentication方式Q弹Z个对话框Q要求用戯入用户名和密码。在q种验证Ҏ(gu)中,所有密码将被以64位的~码方式在网l上传输?
注意Q用Basic Authentication通过被认为是不安全的Q因为它没有强健的加密方法,除非在客L(fng)和服务器端都使用HTTPS或者其他密码加密码方式Q比如,在一个虚拟私人网l中Q。若没有额外的加密方法,|络理员将能够截获Q或滥用Q用L(fng)密码。但是,如果你是刚开始用TomcatQ或者你惛_你的web应用中测试一下基于容器的安全理QBasic Authenticationq是非常易于讄和用的。只需要添?lt;security-constraint > ?lt;login-config >两个元素C的web应用的web.xml文g中,q且在CATALINA_BASE/conf/tomcat-users.xml 文g中添加适当?lt; role > ?lt; user > 卛_Q然后重新启动Tomcat?
下面例子中的web.xml摘自一个俱乐部会员|站pȝQ该pȝ中只有member目录被保护v来,q用Basic Authenticationq行w䆾验证。请注意Q这U方式将有效的代替Apache web服务器中?htaccess文g?
< !--
Define the Members-only area, by defining
a "Security Constraint" on this Application, and
mapping it to the subdirectory (URL) that we want
to restrict.
-- >
< security-constraint >
< web-resource-collection >
< web-resource-name >
Entire Application
< /web-resource-name >
< url-pattern > /members/*< /url-pattern >
< /web-resource-collection >
< auth-constraint >
< role-name > member< /role-name >
< /auth-constraint >
< /security-constraint >
< !-- Define the Login Configuration for this Application -- >
< login-config >
< auth-method > BASIC< /auth-method >
< realm-name > My Club Members-only Area </realm-name >
< /login-config >
6Q配|单点登录(Single Sign-OnQ?
一旦你讄了realm和验证的Ҏ(gu)Q你需要进行实际的用户d处理。一般说来,对用戯言dpȝ是一件很ȝ的事情,你必d量减用L(fng)录验证的ơ数。作为缺省的情况Q当用户W一ơ请求受保护的资源时Q每一个web应用都会要求用户d。如果你q行了多个web应用Qƈ且每个应用都需要进行单独的用户验证Q那q看h有点像你在与你的用h斗。用户们不知道怎样才能把多个分ȝ应用整合成一个单独的pȝQ所有他们也׃知道他们需要访问多个不同的应用,只是很迷惑,Z么总要不停的登录?
Tomcat 4的“single sign-on”特性允许用户在讉K同一虚拟L下所有web应用Ӟ只需d一ơ。ؓ了用这个功能,你只需要在Host上添加一个SingleSignOn Valve元素卛_Q如下所C:
< Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/ >
在Tomcat初始安装后,server.xml的注释里面包括SingleSignOn Valve配置的例子,你只需要去掉注释,卛_使用。那么,M用户只要dq一个应用,则对于同一虚拟L下的所有应用同h效?
使用single sign-on valve有一些重要的限制Q?
1 > value必须被配|和嵌套在相同的Host元素里,q且所有需要进行单炚w证的web应用Q必通过context元素定义Q都位于该Host下?
2 > 包括׃n用户信息的realm必须被设|在同一UHost中或者嵌套之外?
3 > 不能被context中的realm覆盖?
4 > 使用单点d的web应用最好用一个Tomcat的内|的验证方式Q被定义在web.xml中的< auth-method > 中)Q这比自定义的验证方式强QTomcat内置的的验证方式包括basic、digest、form和client-cert?
5 > 如果你用单点登录,q希望集成一个第三方的web应用C的网站中来,q且q个新的web应用使用它自q验证方式Q而不使用容器理安全Q那你基本上没招了。你的用hơ登录原来所有应用时需要登录一ơ,q且在请求新的第三方应用时还得再d一ơ。当Ӟ如果你拥有这个第三方web应用的源码,而你又是一个程序员Q你可以修改它,但那恐怕也不容易做?
6 > 单点d需要用cookies?
7Q配|用户定制目录(Customized User DirectoresQ?
一些站点允怸别用户在服务器上发布|页。例如,一所大学的学院可能想l每一位学生一个公共区域,或者是一个ISP希望l一些webI间l他的客P但这又不是虚拟主机。在q种情况下,一个典型的Ҏ(gu)是在用户名前面加一个特D字W(~Q,作ؓ每位用户的网站,比如Q?
http://www.cs.myuniversity.edu/~username
http://members.mybigisp.com/~username
Tomcat提供两种Ҏ(gu)在主Z映射q些个h|站Q主要用一对特D的Listener元素。Listener的className属性应该是org.apache.catalina.startup.UserConfigQuserClass属性应该是几个映射cM一。如果你的系l是UnixQ它?yu)有一个标准的/etc/passwd文gQ该文g中的帐号能够被运行中的Tomcat很容易的dQ该文g指定了用L(fng)ȝ录,使用PasswdUserDatabase 映射cR?
< Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/ >
web文g需要放|在?home/users/ian/public_html 或?/users/jbrittain/public_html一L(fng)目录下面。当然你也可以改变public_html 到其他Q何子目录下?
实际上,q个用户目录Ҏ(gu)不一定需要位于用户主目录下里面。如果你没有一个密码文Ӟ但你又想把一个用户名映射到公q?home一L(fng)录的子目录里面,则可以用HomesUserDatabasecR?
< Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html" homeBase="/home"
userClass="org.apache.catalina.startup.HomesUserDatabase"/ >
q样一来,web文g可以位于像/home/ian/public_html 或?/home/jasonb/public_html一L(fng)目录下。这UŞ式对Windows而言更加有利Q你可以使用一个像c:homeq样的目录?
q些Listener元素Q如果出玎ͼ则必dHost元素里面Q而不能在context元素里面Q因为它们都用应用于Host本n?
8Q在Tomcat中用CGI脚本
Tomcat主要是作为Servlet/JSP容器Q但它也有许多传lweb服务器的性能。支持通用|关接口QCommon Gateway InterfaceQ即CGIQ就是其中之一QCGI提供一l方法在响应览器请求时q行一些扩展程序。CGI之所以被UCؓ通用Q是因ؓ它能在大多数E序或脚本中被调用,包括QPerlQPythonQawkQUnix shell scripting{,甚至包括Java。当Ӟ你大概不会把一个Java应用E序当作CGI来运行,毕竟q样太过原始。一般而言Q开发Servlet总要比CGIh更好的效率,因ؓ当用L(fng)M个链接或一个按钮时Q你不需要从操作pȝ层开始进行处理?
Tomcat包括一个可选的CGI ServletQ允怽q行遗留下来的CGI脚本?
Z使Tomcat能够q行CGIQ你必须做如下几件事Q?
1. 把servlets-cgi.renametojar Q在CATALINA_HOME/server/lib/目录下)改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下?
2. 在Tomcat的CATALINA_BASE/conf/web.xml 文g中,把关?lt; servlet-name > CGI的那D늚注释LQ默认情况下Q该D位于第241行)?
3. 同样Q在Tomcat的CATALINA_BASE/conf/web.xml文g中,把关于对CGIq行映射的那D늚注释LQ默认情况下Q该D位于第299行)。注意,q段内容指定了HTML链接到CGI脚本的访问方式?
4. 你可以把CGI脚本攄在WEB-INF/cgi 目录下(注意QW(xu)EB-INF是一个安全的地方Q你可以把一些不惌用户看见或基于安全考虑不想暴露的文件放在此处)Q或者你也可以把CGI脚本攄在context下的其他目录下,qؓCGI Servlet调整cgiPathPrefix初始化参数。这指定的CGI Servlet的实际位|,且不能与上一步指定的URL重名?
5. 重新启动TomcatQ你的CGI可以运行了?
在Tomcat中,CGIE序~省攄在WEB-INF/cgi目录下,正如前面所提示的那PW(xu)EB-INF目录受保护的Q通过客户端的览器无法窥探到其中内容Q所以对于放|含有密码或其他敏感信息的CGI脚本而言Q这是一个非常好的地斏Vؓ了兼容其他服务器Q尽你也可以把CGI脚本保存在传l的/cgi-bin目录Q但要知道,在这些目录中的文件有可能被网上好奇的冲浪者看到。另外,在Unix中,L(fng)定运行Tomcat的用h执行CGI脚本的权限?
9Q改变Tomcat中的JSP~译器(JSP CompilerQ?
在Tomcat 4.1Q或更高版本Q大概)QJSP的编译由包含在Tomcat里面的AntE序控制器直接执行。这听v来有一点点奇怪,但这正是Ant有意Z的一部分Q有一个API文档指导开发者在没有启动一个新的JVM的情况下Q用Ant。这是用Antq行Java开发的一大优ѝ另外,q也意味着你现在能够在Ant中用Q何javac支持的编译方式,q里有一个关于Apache Ant使用手册的javac page列表。用v来是Ҏ(gu)的,因ؓ你只需要在< init-param >元素中定义一个名字叫“compiler”,q且在value中有一个支持编译的~译器名字,CZ如下Q?
< servlet >
< servlet-name > jsp </servlet-name >
< servlet-class > org.apache.jasper.servlet.JspServlet < /servlet-class >
< init-param >
< param-name > logVerbosityLevel < /param-name >
< param-value > WARNING </param-value >
< /init-param >
< init-param >
< param-name >compiler </param-name >
< param-value > jikes < /param-value >
< /init-param >
< load-on-startup > 3 </load-on-startup >
< /servlet >
当然Q给出的~译器必dl安装在你的pȝ中,q且CLASSPATH可能需要设|,那处决于你选择的是何种~译器?
10Q限制特定主问(Restricting Access to Specific HostsQ?
有时Q你可能想限制对Tomcat web应用的访问,比如Q你希望只有你指定的L或IP地址可以讉K你的应用。这样一来,只有那些指定的的客L(fng)可以讉K服务的内容了。ؓ了实现这U效果,Tomcat提供了两个参C你配|:RemoteHostValve 和RemoteAddrValve?
通过配置q两个参敎ͼ可以让你qo来自h的主机或IP地址Qƈ允许或拒l哪些主?IP。与之类似的Q在Apache的httpd文g里有Ҏ(gu)个目录的允许/拒绝指定?
例如你可以把Admin Web application讄成只允许本地讉KQ设|如下:
< Context path="/path/to/secret_files" ... >
< Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1" deny=""/ >
< /Context >
如果没有l出允许L的指定,那么与拒l主机匹配的L׃被拒l,除此之外的都是允许的。与之类|如果没有l出拒绝L的指定,那么与允怸机匹配的L׃被允许,除此之外的都是拒l的?/p>
2004.5 臧士?qq:10743383
|络转蝲请保留作者声明,盈利性印刷刊物{载请联系 zself@vip.cc163.com
本文中所有操作都已经在Window2000 Advance Server和W(xu)indow2000 Professional下测试通过
所有内?New IIS5.0+Tomcat5.0.x HowTo
专题讨论区:http://hh.cc163.com/form/cgi-bin/forums.cgi?forum=4
主页Q?a target="_blank">http://hh.cc163.com/
最q遇C个项目,无法避免的需要将IIS和Tomcat协调h协同工作Q同时解析asp和jsp两种脚本语言?br />查看Tomcat官方HowToQ几l操作ƈ未成功。查看网上讨论,发现中文资料介绍的都是tomcat4.x版本的配|方法,老旧已经不适用。后来对照多英文资料,学习、操作之后获得成功?br />
鉴于讨论此问题的中文资料之匮乏,遂决定将我的配置q程整理Q但愿对同好者有所帮助?br />
此文章论q内宏V书写格式仿照了http://virtualict.net/support/kb/iis6-Tomcat5-JK2.htmlQƈ引用了其中部分文字?br />
在我配置、翻阅资料的q程当中Q感觉到了IIS、Apache Tomcat、JK2{官Ҏ(gu)档对此问题论q的不详,甚至有时候感觉到了被误导Q以臛_加了解决问题的难度,期待与大家讨论?/p>
本h的配|环?br />Window2000 Professional+sp4
(Window2000 Advance Server+sp4)
IIS 5.0
j2sdk1.4.2_04
jakarta-tomcat-5.0.24
jakarta-tomcat-connectors-jk2.0.4
配置q程中涉及的路径如果没有Ҏ(gu)说明Q则都不是系l要求,大家可以修改以适应自己机器的环境?/p>
q里是另一个自动安装程序,使用Ҏ(gu)本文不做讨论
Isapi redirector jk2.02 Installer - Integrating Tomcat with IIS
q是一讲q如何安装、配|Tomcat 5 Java Servlet & JSP服务到微软IIS 5.0服务器的文章Q这文章是本h自己配置q程和经验的ȝQƈ推荐了一些给q本人极大帮助的文档?br />掌握Ҏ(gu)的朋友只需?5分钟p完成整个配置q程?/p>
Microsoft Windows 2000 professional, IIS5 已经安装q工作正?/p>
需要下载的软g:
׃版本更新的问题,q里没有l出软g的准下载地址Q但Ҏ(gu)下面的链接用户可以很Ҏ(gu)扑ֈ所需软g的确切地址?/p>
来自 java.sun.com/downloads/ 选择 the J2SE 1.4.2 (或更高版? All platforms
然后按照提示q入文g列表面Q下载文?/p>
来自Apache Jakarta的for Win的编译版本。Tomcat 5.x 应该在页面的底部。写此文章的时候Tomcat已经发布?.0.25版,不过配置q程是一L(fng)?/p>
选择 5.0.24 可执行文?/b> (或更高版?
同样?a target="external">Apache Jakarta下蝲面。Tomcat Web Server q接器就在Tomcat 5.0.24链接的下?/p>
选择 JK2 ~译版本
选择 win32, 然后选择下蝲jakarta-tomcat-connectors-jk2.0.4-win32-IIS.zip
注意 q个目录列表昄的文件名U被截断Q所以你需要观察浏览器状态栏中的提示Q确认你准备下蝲的文件应该是?...iis.zip"为结
大家把下载的文g攑֜同一个文件夹里?/p>
q行j2sdk-1_4_2_04-windows-i586-p.exe 按照提示安装
可以更改安装路径C习惯的地?/p>
q行jakarta-tomcat-5.0.24.exe 按照提示安装.
如果要改变安装\径,可以在这个步骤操作?/p>
可以更改臛_它\径,?C:\Tomcat 5.0
讑֮密码Q妥善保密码,不推荐空密码?/p>
q个步骤是选择本地机器的jdk路径Q一般情况下Q安装文件会自动搜烦q显C,如果没有正确昄Q也可以手动更改?/p>
成功安装后,E序会提C启动tomcatq查看readme文档?/b>
注意: 启动Tomcat之前要确定系l没有其它服务已l占?080端口(Tomcat默认端口)?009端口( Tomcat's AJP13 q接器端?
Tomcat正常启动后会在系l栏加蝲图标
在图标上右键鼠标可以看到一些设|项?/p>
![]()
点击Configure...看到如下昄Q选择Startup type为automatic自动启动?/p>
解压~?b>jakarta-tomcat-connectors-jk2.0.4-win32-IIS.zip得到如下文g?/p>
q入\bin\后可?/p>
剪切/复制isapi_redirector2.dll 文g到Tomcat's bin\目录?/p>
新徏目录win32\i386\ q粘?b>isapi_redirector2.dll?/p>
Cq个路径Q稍后配|IIS的时候还会用到。这个\径不是系l要求的Q可改变Q?/p>
现在可以删除jakarta-tomcat-connectors-jk2.0.4-win32-IIS目录Q这里面的文件已l没用了。实际上?b>jakarta-tomcat-connectors-jk2.0.4-win32-IIS.zip中我们只用到?b>isapi_redirector2.dll一个文?/p>
q入 Tomcat's conf\ 文g?
要支?JK2 q接? 你可能需要修?b>jk2.properties文g. 大多数情况下保留此文件的默认状态即可,本h的多ơ配|过E都没有修改q这个文件?/p>
## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED ## WHEN YOU EDIT THE FILE. ## COMMENTS WILL BE _LOST_ ## DOCUMENTATION OF THE FORMAT IN JkMain javadoc. # Set the desired handler list # handler.list=apr,request,channelJni # # Override the default port for the socketChannel # channelSocket.port=8019 # Default: # channelUnix.file=${jkHome}/work/jk2.socket # Just to check if the the config is working # shm.file=${jkHome}/work/jk2.shm # In order to enable jni use any channelJni directive # channelJni.disabled = 0 # And one of the following directives: # apr.jniModeSo=/opt/apache2/modules/mod_jk2.so # If set to inprocess the mod_jk2 will Register natives itself # This will enable the starting of the Tomcat from mod_jk2 # apr.jniModeSo=inprocess
现在轮到workers2.propertiesQ?/b>q个文g需要自己创建,内容如下(附g中有一?a target="_blank">copy)
U色的这行要注意了,?C:\Tomcat 5.0\work\"q个路径修改成你自己的\径,而jk2.shmq个文g不用担心Q它现在不存在也没有关系Q它会在需要的时候自动被创徏?br />
[shm:]
info=Shared memory file. Required for multiprocess servers
file=C:\Tomcat 5.0\work\jk2.shm
size=1000000
[channel.socket:localhost:8009]
info=Ajp13 worker, connects to tomcat instance using AJP 1.3 protocol
tomcatId=localhost:8009
[uri:/jsp-examples/*]
info=JSP examples, map requests for all JSP pages to Tomcat.
context=/jsp-examples
[uri:/servlets-examples/*]
info=Servlet examples, map requests for all servlets to Tomcat.
context=/servlets-examples
看过|上的讨论,有些朋友配置q程中的问题出现在q里Q所以多讲几句:
q个文g中指定了解析jsp的目录,也就?http://xxxxx/dir/aa.jsp"q个url中的"dir"Q比如我们的|站中要增加/dir/q个路径Qƈ使这个\径下面的jsp能够被解析,那你需要在workers2.properties文g中增加这样一D话
[uri:/dir/*]
info=JSP examples, map requests for all JSP pages to Tomcat.
context=/dir
q且在Tomcat的工作目录中建立"/dir/"q个目录。比如我们到现在为止QTomcat的工作目录是默认?/ROOT/"Q那我们需要在"/ROOT/"路径下新?/dir/"目录Qƈ攄a(chn)a.jsp文g。重h务之后,我们才能?http://xxxxx/dir/aa.jsp"q样的url来访问a(chn)a.jsp文g?br />q去有的朋友误以?dir"是IIS工作目录中的路径Q运行时无法昄面Q或者jsp代码没有解析Q其实就是这个\径设|的问题?br />值得注意的是如果IIS和Tomcat的工作目录同时存?/dir/"Q那么服务器会把此\径连接至Tomcat处理?
当你的Tomcat和IIS一h常工作后Q你可以随时修改q个文g以增加新的目录来支持jsp的运行?/p>
q里是关?a >worker2.propertiesq个文g更多的规则?/p>
右键pȝ栏中的Tomcat服务图标Q选择"Stop service"Q关闭服务?/p>
?理工具-服务"中找?Apache Tomcat"服务Qƈ定它已l启动?/p>
你已l放|?b>isapi_redirector2.dll在你的\径下Q本例子中是
C:\Tomcat 5.0\bin\win32\i386
现在需要添加一些必要的注册信息到注册表Qredirector被IIS调用时会d。徏立一?reg文g
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\2.0]
"workersFile"="C:\\Tomcat 5.0\\conf\\workers2.properties"
"extensionUri"="/jakarta/isapi_redirector2.dll"
"logLevel"="debug"
"serverRoot"="C:\\Tomcat 5.0\\"
在记事本中写入上面的文字Qƈ保存?reg.reg (附g中有一?a target="_blank">copy)
双击.reg文g
成功则显C如?
注册表中可以看到:
现在可以删除q个.reg文g?
d两个pȝ环境变量Q他们是CATALINA_HOME?b>JAVA_HOME.
在桌面上右键"我的?sh)?Q选择"属?高-环境变量"
CATALINA_HOME 指向你的Tomcat安装目录,本例子中?C:\Tomcat 5.0
JAVA_HOME 指向Java SDK安装目录Q本例子中是 C:\j2sdk1.4.2_04
q入ISAPI{选器 界面
点击 d 按钮Q键入一个新的筛选器名称Q名U可以随意v
再点?览 按钮Q选择isapi_redirector2.dll?/b>本例子中?
C:\Tomcat 5.0\bin\win32\i386\isapi_redirector2.dll
点击定?/strong>IIS重v之后新的{选器才会生效Q我们先不重PE后再做?/p>
点击定保存修改Q退出站点属性对话框?/b>
注意Note: 你可以选择特定的站点进行设|,增加{选器Q也可以Ҏ(gu)有站点同时增加筛选器
调出d?/strong>对话框,d{选器?/strong>
选择需要加载Tomcat服务站点Q右键选择新徏,再选择虚拟目录
创徏虚拟目录Q别名ؓjakarta。注意这个名字是固定|不要拼写错误Q?/p>
指定目录?b>isapi_redirector2.dll所在目? 本例子中?C:\Tomcat 5.0\bin\win32\i386
选择执行Q之可?/p>
成功建立虚拟目录之后Q你应该在管理其中看到如下显C?/p>
选择计算?/strong>Q右键,选择重新启动IIS
选择重新启动Internet服务Q点ȝ?/p>
操作pȝ?strong>理工具 启动之后在IIS控制収ͼ站点属?/strong>中的ISAPI{选器的列表中Q可以看到Tomcatq接器的状态,有绿色向上箭头就对了
首先试Tomcat安装的例子能否运行,使用Tomcat自己的服务器和端?/p>
试服务器中的servlets: http://localhost:8080/servlets-examples/ 试服务器中的JSP: http://localhost:8080/jsp-examples/ 试Tomcat理界面: http://127.0.0.1:8080/admin/ 现在我们讉KIIS中的同一个例子,来测试连接器是否工作Q注意修改地址和端口跟你的IIS相符?/p>
http://localhost/servlets-examples/
http://localhost/jsp-examples/
如果一切正常,则你已经使得IIS5在Tomcat JK2 IIS q接器的工作下可以解析jsp&servletE序了,贺你?br />q乐意得C的经验和Ҏ(gu)文章的反馈?http://hh.cc163.com/form/cgi-bin/forums.cgi?forum=4) 希望大家到讨论区发表你的成功l验Q以帮助别h?http://hh.cc163.com/form/cgi-bin/forums.cgi?forum=4)
JK Documentation(iishowto)
原文完整?br />http://hh.cc163.com/java/NewIIS5+TomcatHowTo/NewIIS5+Tomcat5HowTo.htm ----------------------------------------------------------------
在IIS树中右键左侧?计算?/strong>"Q调?strong>属?/strong>Q选择"~辑"调出d?/strong>对话?/p>
创徏{选器所需要的虚拟目录
重新启动IIS服务
试
Tomcat
IIS
参考文?a name="credits">
http://virtualict.net/support/kb/iis6-Tomcat5-JK2.html
Email: zself@vip.cc163.com
http://hh.cc163.com
Oicq:10743383
]]>
6、Apache与多个Tomcat服务器集成时的负载^?/p>
在实际应用中Q如果网站的讉K量非常大Qؓ了提高访问速度Q可以将多个Tomcat服务器与Apache集成Q让它们共同分担q行Servlet/JSPlg的Q务?JK插g的loadbalancerQ负载^衡器Q负责根据在workers.properties文g中预先配|的lbfactorQ负载^衡因敎ͼ些Tomcat服务器分配工作负P实现负蝲q?/p>
假定Apache和两个Tomcat服务器集成,一个Tomcat服务器和Apacheq行在同一台机器上Q用的JK端口?009Q还有一个Tomcat服务器运行在另一台机器上Q主机名为anotherhostQ用的JK端口?009。以下是把Apache和这两个Tomcat服务器集成的步骤?/p>
Q?Q把mod_jk_2.0.46.dll拯?lib目录下?br />Q?Q在
|
以上文g创徏了两个workerQworker1和worker2分别代表两个Tomcat服务器,它们由worker.loadbalancer来分配工作负荗?
Q?Q修?apache_home>/conf/httpd.conf文gQ在文g末尾加入如下内容Q?
|
当客戯?/*.jsp"?/helloapp/*"形式的URLQ该h都由loadbalancer来负责{发,它根据在workers.properties文g中ؓworker1和worker2分配的lbfactor属性,来决定如何调度它们?
只有在用了loadbalancer的情况下Qworkers.properties文g中worker的lbfactor属性才有意义,lbfactor取D大,表示分配lTomcat服务器的工作负荷大?
Q?Q修改两个Tomcat服务器的JK端口Q确保它们和workers.properties文g中的配置对应。此外,在用了loadbalancer后,要求worker的名字和Tomcat的server.xml文g中的
所以应该分别修改两个Tomcat的sever.xml文gQ把它们?engine>元素的jvmRoute属性分别设为worker1和worker2。以下是修改后的两个Tomcat服务器的
Tomcat服务?:
|
Tomcat服务?:
|
Q?Q在完成以上步骤后,分别启动两个Tomcat服务器和Apache服务器,然后讉Khttp://localhost/index.jspQ会出现Tomcat服务器的默认主页。由于此时由loadbalancer来调度Tomcat服务器,因此不能断定到底讉K的是哪个Tomcat服务器的index.jspQ这对于Web客户来说是透明的?
如果在进行以上实验时Q两个Tomcat服务器都在同一台机器上q行Q应该确保它们没有用相同的端口。在Tomcat的默认的server.xml中,一共配|了以下3个端口:
|
如果两个Tomcat服务器都在同一台机器上q行Q则臛_应该对其中一个Tomcat服务器的以上3个端口号都进行修攏V?
此外Q如果把Tomcat和其他HTTP服务器集成,Tomcat主要负责处理HTTP服务器{发过来的客户hQ通常不会直接接受HTTPh。因此ؓ了提高Tomcat的运行性能Q可以关闭Tomcat的HTTPq接器,Ҏ(gu)为在server.xml中把Tomcat的HTTP Connector的配|注释掉?/p>
Tomcat最主要的功能是提供Servlet/JSP容器Q尽它也可以作为独立的Java Web服务器,它在寚w态资源(如HTML文g或图像文Ӟ的处理速度Q以及提供的Web服务器管理功能方面都不如其他专业的HTTP服务器,如IIS和Apache服务器?/p>
因此在实际应用中Q常常把Tomcat与其他HTTP服务器集成。对于不支持Servlet/JSP的HTTP服务器,可以通过Tomcat服务器来q行Servlet/JSPlg?/p>
当Tomcat与其他HTTP服务器集成时QTomcat服务器的工作模式通常E外的Servlet容器QTomcat服务器与其他HTTP服务器之间通过专门的插件来通信。关于Tomcat服务器的工作模式的概念可以参考本?.4节?/p>
本章首先讨论Tomcat与HTTP服务器集成的一般原理,然后介绍Tomcat与Apache以及IIS集成的详l步骤?/p>
22.1 Tomcat与HTTP服务器集成的原理
Tomcat服务器通过Connectorq接器组件与客户E序建立q接QConnectorlg负责接收客户的请求,以及把Tomcat服务器的响应l果发送给客户。默认情况下QTomcat在server.xml中配|了两种q接器:
|
W一个连接器监听8080端口Q负责徏立HTTPq接。在通过览器访问Tomcat服务器的Web应用Ӟ使用的就是这个连接器?
W二个连接器监听8009端口Q负责和其他的HTTP服务器徏立连接。在把Tomcat与其他HTTP服务器集成时Q就需要用到这个连接器?
Web客户讉KTomcat服务器上JSPlg的两U方式如?2-1所C?
在图22-1中,W(xu)eb客户1直接讉KTomcat服务器上的JSPlgQ他讉K的URL为http://localhost:8080/index.jsp。Web客户2通过HTTP服务器访问Tomcat服务器上的JSPlg。假定HTTP服务器用的HTTP端口为默认的80端口Q那么Web客户2讉K的URL为http://localhost:80/index.jsp 或?http://localhost/index.jsp?
下面Q介lTomcat与HTTP服务器之间是如何通信的?
22.1.1 JK插g
Tomcat提供了专门的JK插g来负责Tomcat和HTTP服务器的通信。应该把JK插g安置在对方的HTTP服务器上。当HTTP服务器接收到客户hӞ它会通过JK插g来过滤URLQJK插gҎ(gu)预先配置好的URL映射信息Q决定是否要把客戯求{发给Tomcat服务器处理?
假定在预先配|好的URL映射信息中,所?/*.jsp"形式的URL都由Tomcat服务器来处理Q那么在?2-1的例子中QJK插g把客户h转发lTomcat服务器,Tomcat服务器于是运行index.jspQ然后把响应l果传给HTTP服务器,HTTP服务器再把响应结果传lWeb客户2?
对于不同的HTTP服务器,Tomcat提供了不同的JK插g的实现模块。本章将用到以下JK插gQ?
与Windows下的Apache HTTP服务器集成:mod_jk_2.0.46.dll
与LinuxQRedHetQ下的Apache HTTP服务器集成:mod_jk.so-ap2.0.46-rh72..46-rh72
与IIS服务器集成:isapi_redirect.dll
22.1.2 AJP协议
AJP是ؓTomcat与HTTP服务器之间通信而定制的协议Q能提供较高的通信速度和效率。在配置Tomcat与HTTP服务器集成中Q读者可以不必关心AJP协议的细节。关于AJP的知识也可以参考网址Q?/p>
http://jakarta.apache.org/builds/jakarta-tomcat-connectors/jk2/doc/common/AJPv13.html
22.2 在Windows下Tomcat与Apache服务器集?/p>
Apache HTTP服务器是Apache软gl织提供的开放源代码软gQ它是一个非怼U的专业的Web服务器,为网l管理员提供了丰富多彩的Web理功能Q包括目录烦引、目录别名、内容协商、可配置的HTTP错误报告、CGIE序的SetUID执行、子q程资源理、服务器端图像映、重写URL、URL拼写查以及联机手册等?br />Apache HTTP服务器本w没有提供Servlet/JSP容器。因此,在实际应用中Q把Tomcat与Apache集成Q可以徏立具有实用h(hun)值的商业化的Webq_。在Windows NT/2000下Tomcat与Apache服务器集成需要准备的软g参见?2-1?br />
?2-1 在Windows NT/2000下Tomcat与Apache服务器集成需要准备的软g
??/td> | ???|?/td> | 本书配套光盘上的位置 |
ZWindows NT/2000?Apache HTTP服务器Y?/td> | http://httpd.apache.org /download.cgi | software/apache_2.0.47- win32-x86-no_ssl.msi |
JK插g | http://jakarta.apache.org/builds /jakarta-tomcat-connectors/jk | lib/ mod_jk_2.0.46.dll |
1、安装Apache HTTP服务?
q行apache_2.0.47-win32-x86-no_ssl.msiQ就启动了Apache HTTP服务器的安装E序Q只要按默认讄q行安装卛_。如果安装成功,会自动在Windows中加入Apache HTTP服务Q如?2-2所C?
假定Apache的根目录?apache_home>Q在其conf子目录下有一个配|文件httpd.conf。如果Apache安装在本机,q且采用默认?0端口作ؓHTTP端口Q在httpd.conf文g中会看到如下属性:
|
在操作系l的【开始】→【程序】→【Apache HTTP Server 2.0.47】→【Control Apache Server】菜单中Q提供了重启QRestartQ、启动(StartQ和关闭QStopQApache服务器的子菜单?
应该保80端口没有被占用,否则Apache服务器无法启动。Apache服务器启动后Q就可以通过讉KApache的测试页来确定是否安装成功。访问http://localhostQ如果出现如?2-3所C的|页Q就说明Apache已经安装成功了?
2、在Apache中加入JK插g
在Apache中加入JK插gQ只要把mod_jk_2.0.46.dll拯?apache_home>/modules目录下即可?
3、创建workers.properties文g
workers.properties文g用于配置Tomcat的信息,它的存放位置?apache_home> /conf/workers.properties。在本书配套光盘的sourcecode/chapter22/windows_apache目录下提供了workers.properties文gQ它的内容如下("#"后面为注释信息)Q?
|
以上文g中的属性描q参见表22-2?
?2-2 workers.properties文g的属?
??/td> | ?q?/td> |
workers.tomcat_home | 指定Tomcat服务器的根目?/td> |
workers.java_home | 指定JDK的根目录 |
worker.list | 指定Tomcat服务器工作名?/td> |
worker.worker1.port | 指定Tomcat服务器用的JK 端口 |
worker.worker1.host | 指定Tomcat服务器的IP地址 |
worker.worker1.type | 指定Tomcat服务?与Apache之间的通信协议 |
worker.worker1.lbfactor | 指定负蝲q因数QLoad Balance FactorQ?只有在用了负蝲q?(LoadBalancer)的情况下Q?q个属性才有意?/td> |
4、修改Apache的配|文件httpd.conf
打开
|
在本书配套光盘的sourcecode/chapter22/windows_apache/httpd_modify.conf文g中提供了以上内容Q它指示Apache服务器加载JK插gQƈ且ؓJK插g讄相关属性,q些属性的描述参见?2-3?
?2-3 JK插g的相兛_?
??/td> | ?q?/td> |
LoadModule | 指定加蝲的JK插g |
JkWorkersFile | 指定JK插g的工作文?/td> |
JkLogFile | 指定JK插g使用的日志文Ӟ 在实际配|中Q可以通过查看q个日志文gQ?来跟tJK插g的运行过E, q对排错很有?/td> |
JkLogLevel | 指定JK插g的日志别, 可选值包括debug、info和error{?/td> |
JkMount | 指定JK插g处理的URL映射信息 |
JkMount用来指定URL映射信息Q?JkMount /*.jsp worker1"表示"/*.jsp"形式的URL都由worker1代表的Tomcat服务器来处理Q?JkMount /helloapp/* worker1"表示讉Khelloapp应用的URL都由worker1来处理?
5、测试配|?
重启Tomcat服务器和Apache服务器,通过览器访问http://localhost/index.jspQ如果出现Tomcat的默认主,说明配置已经成功。此外,如果在Tomcat服务器上已经发布了helloapp应用Q可以访问http://localhost/helloapp/index.htmQ如果正常返回helloapp应用的index.htm|页Q说明配|已l成功?
如果配置有误Q可以查看JK插g生成的日志信息,它有助于查找错误原因。在Apache的配|文件httpd.conf中设定该日志文g的存放位|ؓ