IIS整合Tomcat的目的,就是要在IIS上把所有关于JSP的请求转发到Tomcat上处理,再把结果发送给客户端,从外部看来,就好像是 IIS支持JSP一样.而配置的方法,网上虽然能找到很多,但是由于IIS7相对于以往改变较大,所以配置过程还是遇到了不少麻烦.

1. 安装JDK

安装JDK 1.5Tomcat 5.5,生产环境建议安装exe版本以服务的方式运行,JDK和exe版的Tomcat基本不需要配置.而我这边主要是用以调试,所以是下载zip文件形式的Tomcat.相关的配置方法,可以参考这篇文章,注意IIS和Tomcat都使用各自默认的端口80和8080.

2. 配置Tomcat

在IIS中把JSP相关的请求发送到Tomcat需要Tomcat Connector的支持.事实上,Tomcat为主流的 Web Server 和 OS 都提供了支持.这应该是由于Tomcat将自己定位为JSP容器,而非 Web Server,即使它也可以作为 Web Server 使用.在上面的链接中下载 isapi_redirect.dll ,我把它放到了 Tomcat 目录里面的 binwin32i386 里面.然后参考这里对 Connector 进行配置,我这里使用了注册表的方式,上面还有另一种通过properties文件进行配置的方法.这里要注意的是,虽然上面说在 Tomcat 的 conf 目录里能找到示例的配置文件,但我在tomcat里面却没有发现相关的文件.这里给出 workers.propertiesuriworkermap.properties简单示例 worker.properties

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# workers.properties.minimal -
#
# This file provides minimal jk configuration properties needed to
# connect to Tomcat.
#
# The workers that jk should create and work with
#
worker.list=ajp13w

#
# Defining a worker named ajp13w and of type ajp13
# Note that the name and the type do not have to match.
#
worker.ajp13w.type=ajp13
worker.ajp13w.host=localhost
worker.ajp13w.port=8009

uriworkermap.properties

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# uriworkermap.properties - IIS
#
# This file provides sample mappings for example ajp13w
# worker defined in workermap.properties.minimal
# The general sytax for this file is:
# [URL]=[Worker name]

/servlets-examples/*=ajp13w

# Optionally filter out all .jpeg files inside that context
# For no mapping the url has to start with exclamation (!)

workders.properties中 可以定义多个worker,若要添加worker,首先要修改worker.list项,多个worker使用,号分隔,然后再通过 worker.<worker_name>.<property_name>的形式定义workder的属性.如上例中的 ajp13w,其中type表示Tomcat端使用的协议,除了ajp13外,常见的还有旧版的ajp12协议,host自然就是指tomcat所在的主 机,我的理解是应该可以把它指到其他的主机上面,实现负载均衡等高级应用.port一般不需要更改,要注意这个port是提供ajp13服务的,与 8080的http是两回事.我在配置的时候就发生ajp13服务没有正常启动,重启了Server之后才解决,要确认该Server有无启动,可以查看logs下面 的stdout开头的日志文件,基有发现"INFO: JK2: ajp13 listening on /0.0.0.0:8009" 字样的行,说明Tomcat的 ajp13已经正常运行. uriworkermap.properties的 配置方法也很简单,等号的左边是url的样式,右手边就是worker的名称.Connector会把匹配该样式的请求转发到指定的worker去进行处 理.这里相当于在IIS把/servlets-examples/映射到Tomcat的/servlets-examples/应用程序.你也可以把 IIS里面的站点根目录和Tomcat里面的站点根目录指到同一个目录,然后再把*.jsp和*.do映射到Tomcat去处理,这种方法应该比较适合生 产环境,因为据说tomcat对静态文件的处理能力较差.

配置IIS

现在开始对IIS进行配置,首先打开 IIS管理器 ,ISAPI和CGI限制 里面把isapi_redirect.dll添加进去,并设为允许,如果果你找不到这一项,请点击右边树形菜单的根选项,即是以计算机名称开头的项.只有在这里才能找到.这个相当于IIS6里面的"Web 服务扩展",要在这里有设定为允许的项才能在IIS里面被执行. 完成这一步之后,再在网站里面的"Default Web Site"添加应用程序.程序名应对应于在注册表中**extension_uri**的设置.此处为"jakarta",然后将物理路径指向isapi_redirect.dll所在的目录.完成之后点击这个应用程序,进入**处理程序映射**,点击右手边的"**编辑处理程序权限…**",把"执行"项勾打上. 随后为站点添加ISAPI筛选器以便Connector能截取到URL请求.点击"Default Web Site" -> “ISAPI 筛选器” ,把isapi_redirect.dll添加进去,名称可以随便起. 完成这个步骤以后,Connector就可以对请求进行过滤,把符合配置文件中的请求重写到**extension_uri**指定的uri进行处理,这里为/jakarta/isapi_redirect.dll,然后isapi_redirect.dll再转发到tomcat的8009由tomcat处理完成后再循原路发回去.

如对 workers.properties 进行更改,需要重启IIS.另外VISTA下面似乎uriworkermap.properties的动态加载功能也无法正常运行.每次更改也需要重启IIS..