注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

使用Quercus让Java的Web容器也支持PHP应用程序  

2017-10-13 10:14:13|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Quercus是一个开源 PHP 5 引擎,是一个PHP的纯Java实现,是一个Servlet,可以在Java的应用服务器中运行PHP的应用程序,其官方网站为:http://quercus.caucho.com/。它已经被集成在resin的3.0.17版本之后中【也就是说,如果直接使用resin就可以直接获得运行PHP应用程序的支持,而且Quercus 在 Resin 应用服务器之上运行,还可以利用了负载平衡、代理缓存等 Resin 特性】。
当然它虽然可能让Java的Web容器运行PHP,但是效率肯定会比实际的PHP要慢,而且不是百分百都可以保证运行。说实话,感觉这确实是一个脑洞大开的产品,不过如果运用调用本地系统的PHP执行【Java只起到一个类似连接器的作用】,而不用由Quercus把PHP代码编译成Java的Servlet【java的语法要求是非常严格的,所以并不是所有的PHP程序都能非常顺利的通过Quercus跑在Servlet容器上,那个编码不太规范的PHP应用程序就只能呵呵了】,这样效率会更高,当然兼容也更好。
对了,还得再说下,Quercus除了开源版之外,还有相关的专业版。
1)首先还是下载安装【目前最新版是4.0.39】,下载地址:http://caucho.com/download/quercus-4.0.39.war
2)将以上的war改名zip解压,提取其中的quercus.jar放入相应Php的项目目录下【WEB-INF/lib】。
3)修改项目中建立WEB-INF/web.xml。例子如下:

<servlet> <servlet-name>Quercus Servlet</servlet-name> <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> <init-param> <!--指定编码,不然中文页面会乱码--> <param-name>script-encoding</param-name> <param-value>UTF-8</param-value> <!--license文件放置目录--> <param-name>license-directory</param-name> <param-value>WEB-INF/licenses</param-value> <!--php.ini文件放置目录--> <param-name>ini-file</param-name> <param-value>WEB-INF/php.ini</param-value> <!--数据库配置,请注意,必须将相应的jdbc驱动放入相应lib目录--> <param-name>database</param-name> <param-value>jdbc/mysql</param-value> </init-param> </servlet> <servlet-mapping> <!--针对php文件做映射--> <servlet-name>Quercus Servlet</servlet-name> <url-pattern>*.php</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.php</welcome-file> </welcome-file-list>

4)将如上配置中需要用到的php.ini和jdbc都按路径放置好,然后再写一个只包含phpinfo()的测试页面。
5)启动Web容器,打开相应的页面,看到如下显示即为成功。
使用Quercus让Java的Web容器也支持PHP应用程序 - 1976xyg - 红尘若梦
 
6)PHP应用程序使用数据库示范代码如下:

<?
$pdo = new PDO("java:comp/env/jdbc/mysql");
$sql = "insert into users values ('593668.com');";
$rows = $pdo->exec($sql);
?>

web.xml配置数据库示范如下:

<!--这里的jndi-name名字要跟之前的配置相对应-->

<database jndi-name="jdbc/mysql">
<driver type="com.mysql.jdbc.Driver">
<url>jdbc:mysql://192.168.1.5:3306/truth?useUnicode=true&amp;characterEncoding=utf-8</url>
<user>593668.com</user>
<password></password>
</driver>
</database>

如果需要使用连接池,请使用:

<database>
<jndi-name>jdbc/mysql</jndi-name>
<driver> <type>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</type>
<url>jdbc:mysql://localhost:3306/dbname</url>
<user>593668.com</user>
<password></password>
<init-param useUnicode="true"/>
</driver>
</database>

或者:

<database>
<jndi-name>jdbc/mysql</jndi-name>
<driver type="org.gjt.mm.mysql.Driver">
<url>jdbc:mysql://localhost:3306/test</url>
<user>593668.com</user>
<password></password>
</driver>
<prepared-statement-cache-size>8</prepared-statement-cache-size>
<max-connections>20</max-connections>
<max-idle-time>30s</max-idle-time>
</database>

7)最后再说下,也是最亮点,没有之一,那就是基于Quercus利用php代码来调用java。一个最简单的例子:

<?
function getJavaDate() {
//引入相应的包
import java.util.Date;
$currentDate = new Date();
return $currentDate;
}
echo getJavaDate();
?>

Java类:

package com.593668;
public class Hello{
public String uid(String who) {
return "hello!"+who+"@593668.com!";
}
}

php调用:

<?
import com.593668.Hello;
$f = new Hello();
var_dump($f->uid("admin"));
?>

这样的php和java的混合型项目完全不是问题了,虽然不太清楚这样的混合模式会有几个人采用,但是不明觉厉就好了。
以上仅仅是Quercus的简单例子,目前Quercus的已经支持大部分标准PHP模块和众多扩展,包括PDF、PDO、MySQL和JSON等等,如需对其有更深入的了解,请去官网察看参考文档:http://quercus.caucho.com/quercus-3.1/index.xtp
  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017