公司自己用JSP开发的一个系统,出于安区考虑需用Tomcat和IIS6进行整合。查了好多资料一直都搞不定这个整合,终于把CrazyCow请出场,搞定这个历史遗留问题,特转过来供学习:[url]http://www.cnrui.cn/blog/article.asp?id=179[/url]
 
目的:
    实现IIS6和Tomcat5的整合运行。
预备:
     首先要说的是我这里整合组合是:Win2003+IIS6+Tomcat5+jk。如果您要整合的系统不是这个组合,这篇文章可能对你没有没有什么帮助,但是我极力劝大家采用这个组合,甚至是相同的版本,因为从别人和自己的经验来看,很多环境的配置或程序的运行都和所运行程序的版本有很大关系,特别是 Tomcat,Mysql,Apache,linux之类。这就是为什么有的系统至今都是用的Apache1.3 tomcat4.0,也是为什么好的开发团队都需要一整套的开发环境配置管理。和我这相同的配置,严格采用下面的架设步骤我都不敢保证你能整合成功,更别说其他版本了。
    Windows2003 和IIS6大家应该都是一样的.网上有的文章也介绍XP或者IIS5的整合.我觉得没有必要在XP的系统上整个IIS,装IIS拿来做服务器的,做服务器就用服务器的操作系统.我这里Tomcat的版本是5.0.28算是比较稳定的一个版本,没有采用jk2而采用jk是因为Apache已经明确声明不再对 jk2支持,想起这点就想起几年前用jk2整合Apache和Tomcat了,当时说jk2比jk怎么怎么好,看来这世上没有一件事情是真的.jk的版本是最新的1.2.20,没有用过其他版本,而且现在Apache上面也下不到其他版本了.

整合步骤:
    如果你只想架设服务器而不想考虑其中细节问题,请尝试按照下面的步骤整合。如果你按照下面的步骤来了而且成功那么恭喜你,如果没有成功也很正常,可以看看后面的“要注意的问题”。在这里我们统一架设Tomcat的安装目录为D:\Tomcat5.0,新建的站点为[url]www.crazycow.cn[/url],新建的虚拟目录为blog。服务器上有一个内容为空的目录H:\Inetpub\[url]www.crazycow.cn[/url],还有一个目录为H:\Inetpub\ blog.crazycow.cn,这是WEB应用的物理位置,其下面有个简单的test.jsp文件,只是用来打印当前时间。

     1,为IIS写注册表
         打开注册表编辑器:regedit,选中"HKEY_LOCAL_MACHINE\SOFTWARE",新建项 "Apache Software Foundation",然后选中"Apache Software Foundation",再新建项 "Jakarta Isapi Redirector",然后选中"Jakarta Isapi Redirector",再新建项"1.0",然后再选中"1.0",在这一项中新建以下5个字符串值,名称和值分别为(不包括等号分界符,下同):
=========================================================================
extension_uri=/jakarta/isapi_redirect.dll
worker_file=D:\Tomcat5.0\conf\workers.properties
worker_mount_file=D:\Tomcat5.0\conf\uriworkermap.properties
log_file=D:\Tomcat5.0\logs\isapi.log
log_level=info
==========================================================================
        如果你觉得麻烦,请新建文本文件,输入以下内容,保存并更名为jakarta.reg文件,双击导入注册表,也可以达到和上面一样的效果.
===========================================================================
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation]

[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector]

[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0]
"extension_uri"="/jakarta/isapi_redirect.dll"
"worker_file"="D:\\Tomcat5.0\\conf\\workers.properties"
"worker_mount_file"="D:\\Tomcat5.0\\conf\\uriworkermap.properties"
"log_file"="D:\\Tomcat5.0\\logs\\isapi.log"
"log_level"="info"
=================================================================================
     2,建立配置文件
        按照注册表里所写的,在D:\Tomcat5.0\conf目录下建立两个配置文件,workers.properties和uriworkermap.properties其内容分别为:
workers.properties的内容:
===============================================================================
worker.list=ajp13

worker.ajp13.type=ajp13
worker.ajp13.host=www.crazycow.cn
worker.ajp13.port=8009
========================================================================
uriworkermap.properties的内容:
=========================================================================
/*.jsp=ajp13
/*.do=ajp13
==========================================================================
     3,为jk建立物理目录
从Apache的网站上下载jk的1.2.20版本,实际上现在就只有一个isapi_redirect.dll文件。在 D:\Tomcat5.0\bin目录下建立新目录jakarta,将isapi_redirect.dll复制到里面。
     4,建立新网站
打开IIS管理器,在左侧网站一栏新建网站:[url]www.crazycow.cn[/url],其目录指向上面提到过的空目录H:\Inetpub\[url]www.crazycow.cn[/url],让网站有执行(如ISAPI应用程序或CGI)的权限
     5,设置筛选器
在IIS管理器左侧网站下面选中新建的网站[url]www.crazycow.cn[/url],右键选择属性,在ISAPI筛选器标签页添加筛选器,名字为jakarta,路径为isapi_redirect.dll的路径名,即D:\Tomcat5.0\bin\jakarta\isapi_redirect.dll。如果成功重新进入属性页,则该新建的筛选器会有一个绿色向上箭头,优先级为高,这说明jk模块加载成功。
     6,为jk建立虚拟目录
选中网站[url]www.crazycow.cn[/url],新建虚拟目录,别名为jakarta,路径为D:\Tomcat5.0\bin\jakarta,使其有执行(如ISAPI应用程序或CGI)的权限。
     7,为自己的应用建立虚拟目录
选中网站[url]www.crazycow.cn[/url],新建虚拟目录,别名为blog,路径为H:\Inetpub\blog.crazycow.cn,使其有执行(如ISAPI应用程序或CGI)的权限。
     8,新建应用程序扩展
在IIS管理器左侧网站下面选中Web服务扩展,添加一个新的Web服务扩展,扩展名为jakarta,添加要求得文件为D:\Tomcat5.0\bin\jakart\isapi_redirect.dll,并设置扩展状态为允许。
     9,测试
     打开Tomcat服务器,修改h:\WINDOWS\system32\drivers\etc\hosts文件,让[url]www.crazycow.cn[/url]的域名指向127.0.0.1,打开IE,输入 [url]http://www.craycow.cn/blog/test.jsp[/url],回车,如果出现当前时间,那说明你配置已经成功。

注意的问题:
    刚才说了,如果你没有配置成功也很正常,看下面的问题你注意了没有。我将对应上面的步骤分别解释
    1,应该没有什么问题,以前的版本有直接的安装程序,现在却没有了。手册上还说可以直接写配置文件不写注册表,我没有试,主要是不清楚原理。
    2,注意你的两个配置文件workers.properties和uriworkermap.properties中的两个worker是不是都叫 ajp13,有没有拼写错误.还有如果你配置网站时做了主机头设置,那你workers.properties文件中worker.ajp13.host 的值应该是[url]www.crazycow.cn[/url]而不是localhost
    3,要注意IIS要对这个jakarta目录有足够的权限.如果你的筛选器添加失败很有可能是权限的原因.
    4,应该也没有什么问题,不过你可以测试一下你建立的网站,比如在H:\Inetpub\[url]www.crazycow.cn[/url]下放置一个简单的 index.html文件,看能不能正常访问。在这里,我们还可以随便敲一个 [url]http://www.crazyoc.cn/xxx.jsp[/url],然后再看 IIS的访问日志,报的是404.0或者404.3错误,前者说明文件或目录无法找到,后者说明文件或目录无法找到:MIME映射策略禁止该请求。
    5,这里有可能出现ISAPI筛选器不能加载的问题,状态一栏是红色箭头。打开系统事件查看器,如果发现"HTTP 筛选器 DLL D:\ Tomcat5.0\bin\jakarta\isapi_redirect.dll 加载失败。数据是错误。",那加载失败的原因应该是权限问题,特别是NTFS文件系统。因为需要IIS加载isapi_redirect.dll,所以IIS对它要有权限,所以可以对D:\Tomcat5.0\bin目录添加IIS_WPG和IUSR这两个用户(也有可能要对D:\Tomcat5.0\conf添加权限)。再重新加载一边,如果还没有成功,那我也没有办法了,只能换个FAT32系统或者其他jk版本,再或者看事件查看器,到网上搜解决办法。
        如果筛选器加载成功,到这一步,我们还可以做个小小的测试,随便敲一个 [url]http://www.crazyoc.cn/xxx.jsp[/url],再看IIS日志,这时报报的错是:404.2,文件或目录无法找到:锁定策略禁止该请求。这也说明筛选器已经加载成功,只是没有进一步处理。
    6,7,8步也应该没有什么问题,除了添加新的Web 服务扩展jakarta之外还要使它允许。另外同样要注意权限的问题,因为涉及到Internet访问,你的虚拟目录好像也应该有IUSR这个权限。还有就是注意拼写不要写错,比如把jakarta写成了jarkata。
        到了第6步,我们还可以做个实验,在IE里输入 [url]http://www.crazycow.cn/blog/xxx.jsp[/url],回车,这是IIS日志报的就是503错误了,服务器错,这说明你已成功了一大半,接下来就只剩下开Tomcat.
    9,如果你前面都对,只是你输入 [url]http://www.craycow.cn/blog/test.jsp[/url],没有出现当前时间.那么还请查看还有你有没有开启 Tomcat,并在Tomcat引擎中是否加载了和IIS相对应的WEB应用?有的人访问jsp时,Tomcat日志里出现对 /jakart/isapi_redirect.dll的访问或者,直接出现乱码或下载jsp文件,都是这里的原因.
    总之大致的解决方法是,结合事件查看器的内容,IIS日志,Tomcat日志,一步步的排错,再到网上搜相关的资料.
    还要告诉大家的事,整个过程好像没有怎么重启IIS,也没有设置IIS5.0隔离模式.微软这方面做得确实没话说.

遗留问题:
    虽然配置成功,但心里还是不爽,因为有好多东西没有真正弄懂.上面也可能多余的步骤.
    Windows 的软件特点是特别傻瓜,什么都帮你弄好了,或者弄得非常简单,你什么都不用懂,但Linux和Java之类的软件就是特别麻烦,你什么都要弄得很清楚。要将IIS和Tomcat整合起来,麻烦就来了。特别是这次在别人的机器上为自己的blog上线,好多问题都来了,权限啊,版本啊,好多东西平时拿到玩很简单,真正拿到用才是真正得考验。
    由于对Windows NTFS的权限机制不熟,对IIS不熟,特别是对"ISAPI塞选器"和"应用扩展"的的使用不熟,整个IIS和Tomcat整合的原理还不是很清楚,以上配置步骤每步实现什么功能也不是很了解,于是对IIS处理一个Web请求的整个流程也不是很清楚,我想这也是整合IIS和Tomcat痛苦的真正原因吧.如果哪位对此了解得比较清楚,请帮我回答下面的问题,最好能举例,多谢了.
    1,好多元素都用到了jakarta这个名字和isapi_redirect.dll,注册表,筛选器,虚拟目录,Web服务扩展...它们之间的关系是怎样的,有哪些可以换用其他的名字?
    2,IIS到底是哪一步用到了注册表的内容,筛选器还是Web服务扩展?IIS是如何读到注册表的内容的?为isapi_redirect.dll建立虚拟目录的原因是什么?
    3,我送一个 [url]http://www.crazycow.cn/blog/xxx.jsp[/url]过去,IIS是如何和Tomcat配合起来处理这个请求的?通过筛选器的isapi_redirect.dll,送到Web服务扩展的isapi_redirect.dll,还是直接送到Tomcat?我看到ASP.NET 的筛选器和Web服务扩展用的就是两个dll,那对于jsp,这两个功能一起做到isapi_redirect.dll去了吗?如果是的,那我用两个 isapi_redirect.dll分别实现功能也是一样的阿,可是没有成功.如果非要是同一个isapi_redirect.dll,那为什么要添加两次呢?