在Apache中整合JSP和PHP


咱们最但愿任何事都是完美的,如在企业应用中,咱们只须要选择一个Web平台就能够部署全部的企业应用。但每每理想与现实相去甚远。在现实世界中,信息系统每每是由不少不一样的操做系统、平台以及应用环境混合而成的。并且为了保持与旧的系统兼容,系统老是将当前的技术和之前的遗留技术进行混合,这样周而复始。就使系统变得愈来愈复杂。php

对于这样的恶性变化会使不少人疲于奔命,尤为是开发人员,他们将面临几乎使人崩溃般的挑战。尤为是要将两个或更多的技术部署在同一个应用时更是如此。如本文要给出的例子中,就是将PHP和JSP程序同时部署在运行于Apache中的同一个应用程序中。在这个例子中,将提供一种方法来快速地部署这两种Web程序。开发人员也能够借鉴这种方法来处理其余相似的难题。web

也许有不少人会问,我应该如作也能将基于PHP和JSP的Web程序部署在同一个Web应用程序中呢?下面我就来回答这个问题。这个问题的基本答案就是先将apache配置成PHP Web服务器,并使用Apache来处理全部的PHP/CGI请求,同时使用Tomcat处理全部的其余请求(包括JSP请求)。在开始以前,让咱们先看看须要哪些软件:apache

完成本文的例子须要三个软件:
1. Apache HTTP Server 
2. Apache Tomcat 
3. Apache Tomcat Connectors安全

1、解决方案所使用的技术服务器

对于上述的问题,咱们有几个解决方案能够考虑。这些解决方案以下所示:并发

1. 使Apache服务器做为主要的或默认的请求处理器,只传递Servlet/JSP请求给Java容器。app

2. 将Java容器做为主要或默认的请求处理器,只容许PHP/CGI请求由Apache处理。webapp

3. 不使用Apache,并在Tomcat中运行PHP/CGI程序。jsp

上述的前两种解决方案相似。这两种方法都是将大量的请求引入某一个服务器(Tomcat或Apache),而后使用别外的服务器处理个别的请求(JSP或PHP)。第三种方法虽然看起来比较简单,很诱人。但Apache在处理PHP时的效率是很是高的,而且提供了更安全的机制,所以,Tomcat并不合适处理PHP程序。测试

在本文中咱们将采用第二种方案,就是将Tomcat做为主要的Web服务器来接收大部分请求,同时Apache做为后备服务器来处理PHP/CGI请求,它们的关系如图1所示。若是读者对第一种方法情有独衷,能够很容易地根据第二种方法来设置。


在Apache中整合JSP和PHP

图1 Tomcat做为主要的请求处理器,Apache做为辅助请求处理器

2、配置Apache

在整个处理过程当中的第一步是很是重要的,同时也是最复杂的。也就是须要安装Apache服务器,而后对Apache进行配置,以支持Apache Tomcat。对于安装来讲,咱们能够在google或baidu上搜索相关文章,这个本文不太详细讲述。但如何去配置它呢,首先咱们须要使用一个Apache Tomcat connector,咱们能够选择mod_jk或mod_jk2。在这里我强烈推荐使用mod_jk,由于mod_jk早在三年前就被放弃了。咱们首先打开Apache的配置文件httpd.conf,将看到以下的内容:


#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#

在下面的部分,将创建一个VirtualHost节点,它将捕捉全部的在80端口的HTTP请求,
并将它们按着上述的方法进行映射(Tomcat是默认的,Apache只处理PHP和CGI请求)。


<VirtualHost *:80>
# Set DocumentRoot equal to Tomcat ROOT context
DocumentRoot /www/webapps/ROOT

# Exclude PHP & CGI (let Apache handle)
SetEnvIf Request_URI \.php no-jk
SetEnvIf Request_URI \.cgi no-jk

# 经过mod_jk,处理每个请求(除了PHP和CGI)
# 将处理从Apache传给Tomcat
JkMount /* myWorker

</VirtualHost>

在上面的描述中,咱们应该很容易将其变能第一种方法,也就是只向JkMount处理jsp或servlet请求到Tomcat上

3、发布应用程序

一查咱们对环境进行了正确的配置,咱们就能够将应用程序打包并发布到Web服务器了。将应用程序发布到Apache上和发布到Tomcat上没什么不一样,都须要创建一个WEB-INF/web.xml文件,所不一样的是若是请求的是PHP或CGI程序,将绕过Tomcat直接传给Apache来处理。

尽管改变Apache的根目录(默认是'dtdocs')对于发布应用程序并不方便。但咱们能够将Apache的根目录指向Tomcat的发布目录。这样PHP/CGI就能够和JSP打在同一个WAR/EAR包中。咱们只要简单地目录中放置JSP、HTML和PHP页便可完成发布。这对于开发,仍是测试都是很是方便的。

另外,将PHP、JSP和CGI发布到同一个目录中还可使它们共享相同的支持文件(CSS、JS、images等)的内容。还有,这个模型提供了一个Web应用程序的完整结构,以及从Java Web目录中调用PHP/CGI程序变得更简单(相对而言)。

4、总结

不管你在工做中是否被要求集成遗留的Web应用程序到新的Web程序中,或是将某个开源系统加进定制的Web应用中,或简单地将两个不一样的Web应用集成到一块儿,你都有可能将不一样的技术集成到同一个Web应用中。总之一句话,将不一样的技术转换到同一种技术平台上是最好的解决方案