`
unsoundboy
  • 浏览: 63257 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

基于 Java 的 PHP 框架 —— Quercus 简介

    博客分类:
  • php
阅读更多

简介

Quercus 是一个开源 PHP 5 引擎,它已经拥有了纯 Java 的完整实现。Quercus 文档指出,Quercus 在 Resin 应用服务器之上运行,利用了负载平衡、代理缓存等 Resin 特性。本文介绍了在 Apache Tomcat 之上运行 Quercus 所提供的特性。另外,本文还将展示 Quercus 针对 Web 服务和应用程序的 “PHP + Java” 混合方法的易用性和灵活性。

为何选择 Quercus?

Quercus PHP 库在 Java 中得到了完整的实现,这对 Java 和 PHP 应用程序都有好处。由于 Java 和 PHP 之间的紧密集成,Quercus 应用程序能够使用 Java 技术以及 Spring、Hibernate 和 SOA 等框架。为促进这种互操作性,Quercus 提供了一个 API,以便从 PHP 调用 Java 库。

其他好处还包括:

  • 易于开发:PHP 库在 Java 中实现,这使它们更快速、更稳定、更易于使用。开发人员不必担心基于 C 语言的 PHP 实现中出现的分段(segmentation)错误和 C 指针溢出。
  • 可伸缩性:作为一个基于 Java 的实现,Quercus 在 Resin 和 Apache Tomcat 等应用服务器之上运行。这样,它就可以利用应用服务器提供的所有特性,如连接池、分布式会话等。
  • 国际化:由于 Quercus 是一个 PHP 的 Java 实现,它本身就支持 16 位 Unicode 字符串和函数。

安装 Quercus

安装 Quercus 很简单,即将 jar 文件安装到一个 Java 应用程序,但由于 Quercus 是 Resin 应用服务器的一个特性,因此它也构建在 Resin 中。没有必要下载 PHP 引擎,因为 Quercus 就可以充当 PHP 引擎。按照以下步骤安装 Quercus:

  • 从公司 Web 站点下载 Resin 应用服务器(参见 参考资料 )。
  • 打开这个压缩文件并解压缩 jar 文件:quercus.jar、resin-util.jar 和 javamail-141.jar。
  • 将这些文件和 MySQL 连接器 jar 文件(如果需要)复制到您的 Web 应用程序的 WebContent\WEB-INF\lib 文件夹。
  • 另一种简单的安装方法是以本文末尾提供的压缩样例应用程序为基础,从那里复制库(参见 下载 )。

进入 Quercus

为介绍 Quercus 的特性,我将向您展示一个简单的 HelloWorld 示例。这个应用程序可以通过以下步骤创建。(本文使用的所有应用程序都是使用 Eclipse IDE 创建的,有些步骤还提供了屏幕快照,以便它们更加直观。您也可以选择其他 IDE)。

以下步骤的基本目的是创建一个动态 Web 应用程序项目,将它指向应用服务器运行时(本例中是 Apache Tomcat),并配置 php.ini 和 web.xml 等参数。

  • 在 IDE(本例中为 Eclipse)中创建一个新的 Web 项目,如图 1 所示(Alt + Shift + N)。


图 1. 创建新项目
Eclipse 界面屏幕快照,启动一个新的 Dynamic Web Project

  • 输入项目名称并指向运行时。图 2 显示了一个样例设置屏幕。
    • 单击 File --> New (Alt + N),在默认工作空间中创建一个名为 TestHelloWorld 的新的动态 Web 应用程序。
    • 我将 Apache Tomcat Version 5.5 配置为应用程序的运行时环境。


图 2. 设置新项目
TestHelloWorld 的 New Dynamic Web Project 对话框的屏幕快照

  • 复制一个包含 Quercus 和联合 jar 文件的目录结构(如图 3 所示)。另外,创建 WebContent、META-INF (包含清单文件或上下文文件)和 JavaScript resources 等文件夹。


图 3. 建立目录结构
项目文件夹屏幕快照,显示 WEB-INF/lib 文件夹下的 javamail-141.jar、quercus.jar 和 resin-util.jar 文件

TestHelloWorld 项目的根目录包含以下文件夹:

  • WebContent:这个目录中的 WEB-INF 目录的 lib 文件夹包含 quercus.jar 等库,META-INF 目录包含 Manifest.mf 文件。WEB-INF 文件夹还包含这个 Web 应用程序的静态和动态内容,如 php、jsp 或 html 文件。
  • Java Resources:这个目录包含一些库,如 Apache Tomcat 库、JRE 和 Web 应用程序库。
  • JavaScript resources:这个目录包含您想要在项目中包含的任何资源。

服务器可以通过 IDE 创建和配置,并在普通或调试模式下执行(见图 4)。

Eclipse 中的 J2EE 透视图有一个 server 选项卡,右键单击该选项卡将显示一个创建新服务器的选项(见图 4)。这个服务器可以用于从 Eclipse IDE 管理应用服务器。


图 4. 配置一个新服务器
Eclipse 服务器配置屏幕快照。用户右键单击 Tompacat 服务器并选择 New > Server

除非有特殊需要,定义这个新服务器只需选择默认值即可(见图 5)。服务器运行时与创建项目时选择的运行时一致,即 Apache Tomcat Version 5.5。


图 5. New Server 配置选择的选项
New Server 配置对话框屏幕快照,显示 Tomcat v5.5 Server 的默认值

  • 配置好服务器后,该资源可以从左侧的 “available” 列添加到右侧的 “configured” 列。

新服务器完成配置后,新创建的资源需要在服务器上配置(见图 6)。这个服务器配置将部署在开发过程中创建的资源。


图 6. 在服务器上配置资源
New Server 的资源配置的屏幕快照


配置 Quercus

php.ini 文件用于配置 PHP 的行为,比如设置目录、设置文件路径、更改会话等。这个文件可以在 web.xml 文件中指定,清单 1 显示了一个示例。


清单 1. 在 web.xml 文件中指定 php.ini

				
	<init-param>
	      <param-name>ini-file</param-name>
      	<param-value>WEB-INF/php.ini</param-value>
	    </init-param>
         

 

PHP 源文件的编码通过脚本编码表示,按照清单 2 所示的方法定义。


清单 2. web.xml 文件中的 PHP 编码规范

				
	<init-param>
	      <param-name>script-encoding</param-name>
      	<param-value>UTF-8</param-value>
	    </init-param>
         

 

QuercusServlet 是一个指向 Quercus 引擎的接口,它解析 php 文件,通常按照清单 3 所示内容配置。


清单 3. web.xml 文件中的 QuercusServlet 的配置

				
	<web-app xmlns=”http://java.sun.com/xml/ns/j2ee” 
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” 
	xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd” 
	version=”2.4”> 
	<description>Quercus Hello World on Tomcat</description>
	<servlet>
    		<servlet-name>Quercus Servlet</servlet-name>
		<servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
         

 

Quercus hello world php 文件(index.php)描述

index.php 文件定义一个名为 getTheDate 的方法,该方法实例化一个 Java 对象。Quercus 能够通过使用导入语句利用任何 Java 类,这使它具有很高的互操作性和灵活性。清单 4 显示了一个示例。


清单 4. PHP 导入函数示例

				
	<?php
		function getTheDate() {
		import java.util.Date;
		$currentDate = new Date();
		return $currentDate;
		}
	?>
            

 

清单 5 中的代码展示了在 HTML 片段中调用 getTheDate()phpinfo() 方法。


清单 5. 对 getTheDate() 和 phpinfo() 的调用

				
	<body>
	<h1>This is the Hello World page</h1>
	<h3>but, it does something more then Hello World!</h3>
	<h4> The current date and time is :<?php echo getTheDate() ?></h4>
	<h4> and finally here is the phpInfo: <?php echo phpinfo()?>
	</body>

 

代码更改后需要启动服务器,这样才能测试 HelloWorld 应用程序。为此,右键单击此前创建的服务器配置并单击运行或调试选项。


图 7. 以调试或运行模式启动服务器
显示服务器启动的屏幕快照

图 8 显示了启动服务器并转到相应 URL 后应用程序的最终输出。

请注意,本文末尾的样例文件 HelloWorld.zip 包含这个应用程序的压缩版本(参见 下载 )。该文件还包含 Eclipse 需要的元数据文件,以便直接地无缝导入该 IDE。


图 8. Hello World 页面的输出
应用程序输出的屏幕快照,显示文本、当前日期和时间以及关于运行 PHP 的信息。


Quercus 的实际应用

现在让我们检查一个真实示例。图 9 显示了一个 Manage Customer 页面,通过该页面,用户可以执行一些操作,如添加一个新客户、查找一个客户、查看数据库中的所有客户。


图 9. 客户管理应用程序流
Manage Customer 应用程序的架构图。。

如上图所示,HTTP 请求被 Tomcat 接收。web.xml 中的配置定义了解析 php 文件的 QuercusServlet 对象。这个对象是一个 Java servlet,它提供与 Quercus 库的接口。在这个样例应用程序中,在 php 文件中实例化的一个 PDO 对象通过 MySQL 连接器实例化与 MySQL 数据库的连接。PDO(PHP Data Object,PHP 数据对象)以一种统一的方式提供数据库访问,包括预处理语句等高级特性。

Manage Customer 应用程序的目录结构(如图 10 所示)与前面介绍的 HelloWorld 示例的目录结构相同。


图 10. Manage Customer 应用程序的目录结构
Manage Customer 项目的目录结构的屏幕快照

注意,这个应用程序的核心文件包含在以下子目录下的 WebContent 文件夹中:

  • META-INF:包含连接到 MySQL 数据库的凭证信息。
  • WEB-INF:包含库文件夹,库文件夹又包含运行应用程序的 Quercus jar 等文件。这个文件夹还包含描述数据源的 web.xml 文件。
  • 所有关联的 php 和 html 文件都包含在 WebContent 文件夹中。这些文件充当应用程序的视图部分,向 Web 应用程序提供动态和静态内容。

请注意,本文末尾的样例文件 ManageCustomer.zip 包含这个应用程序的压缩版本(参见 下载 )。该文件还包含 Eclipse 需要的元数据文件,以便直接地无缝导入该 IDE。

配置 Tomcat 和 MySQL

Tomcat 的配置与 HelloWorld 应用程序的配置非常相似。此外,我们需要定义一个资源引用(如清单 6 所示)。这个元素指定一个资源管理器连接工厂引用的名称。在本例中,它是在 jdbc/mysql 中指定的数据库连接,其类型为 javax.sql.DataSource。


清单 6. web.xml 中的资源引用定义

				
	web.xml
	. . .
	<resource-ref>
	      <description>DB Connection</description>
	      <res-ref-name>jdbc/mysql</res-ref-name>
	      <res-type>javax.sql.DataSource</res-type>
	      <res-auth>Container</res-auth>
	</resource-ref>
	. . .

 

我们需要在 WebContent/META-INF 文件夹下的 context.xml 中定义连接资源,如清单 7 所示。该资源包含驱动程序名、jndi 名称、用户名、密码、数据类型和 url 等属性。


清单 7. 在 context.xml 中定义的属性

				
	context.xml
	. . .
	<Context>
	<Resource driverClassName="com.mysql.jdbc.Driver" 
	maxActive="4" maxIdle="2" maxWait="5000" auth="Container" 
	name="jdbc/mysql" password="" type="javax.sql.DataSource" 
	url="jdbc:mysql://localhost:3306/customer" username="root"/>
	</Context>
	. . .

 

客户数据库只有一个表,该表可以通过运行以下脚本创建:

	use customer;
	CREATE TABLE users (
		id INT NOT NULL PRIMARY_KEY AUTO_INCREMENT, 
		name VARCHAR(200)
	);

 

请注意,HelloWorld 应用程序使用的配置步骤(比如创建一个新的服务器配置、添加资源、在调试或运行模式下启动服务器等)也可以以类似的方式应用于这个应用程序。


应用程序概要

应用程序 Manage Customer 的索引页面显示了一列用户可以执行的操作(见图 11)。


图 11. Manage Customer 的索引页面的屏幕快照
Manage Customer 的索引页面显示用于添加客户姓名的文本字段和按钮、用于搜索客户的文本字段和按钮,以及用于查看所有客户的按钮。

索引页面支持以下操作:

  • Add Customer
  • Search Customer
  • View all Customers
  • Delete all Customers

显示所有操作的 index.html 页面由拥有独立动作的多个表单组成。仔细查看一下 “Add Customer”。对应的 html 包含一个对 addCustomer.php 的引用(作为表单动作)和 POST 方法。

	<H2>Add Customer</H2>
	<form action="addCustomer.php" method="post">
	<label>Customer name</label>
	<input type="text" id="customerName" name="customerName"/>
	<input type="submit" value="Add"/>
	</form>

 

动作中的 php 代码从 POST 提取 customerName 参数并为插入创建一个 sql 语句。然后通过传入数据源的 jndi 名称实例化一个 PHP 数据对象。

	<?php
	$custName = $_POST['customerName'];
	$pdo = new PDO("java:comp/env/jdbc/mysql");
	$sql = "insert into users values ('" . $custName . "');";
  	$rows = $pdo->exec($sql);
  	if ($rows>0) {

	echo("<h4> Adding ". $custName . " was successful</h4>");
	}
	else echo('<h4> An error occurred</h4>');
	?>

 

Look Up、View All 和 Delete 的操作也以类似的方式实现(参见 下载 部分附带的源代码)。


图 12. View all Customers 页面的屏幕快照
应用程序的屏幕快照,显示所有客户的姓名列表


结束语

本文介绍了运行在 Apache Tomcat 之上并连接到一个 MySQL 数据库的 Quercus 的特性。作为一个在 Java 中全面实现的 PHP 框架,Quercus 能够利用 Spring 和 Hibernate 等基于 Java 的框架。由于具有 PHP 特征,对于开发人员来说,Quercus 有很高的可用性。同时,由于其核心框架已经在 Java 中实现,Quercus 很健壮并具有可伸缩性。

分享到:
评论

相关推荐

    quercus quercus .war 4文件基于Java 的 PHP 框架

    是一个开源 PHP 5 引擎,它已经拥有了纯 Java 的完整实现。Quercus 文档指出,Quercus 在 Resin 应用服务器之上...另外,本文还将展示 Quercus 针对 Web 服务和应用程序的 “PHP + Java” 混合方法的易用性和灵活性。

    Tomcat服务器集成Quercus来支持php, jsp, java的Demo工程

    开发环境 eclipse java EE 4.5.0,jdk 1.7,Tomcat 7.0,Quercus 4.0.39 由Eclipse-jee生成的Dymanic Web Project,Dynamic web module version 3.0(eclipse版本太旧可能没法用) 集成了Quercus,让php也能在...

    借《浅谈PHP与Java之Web开发整合技术》说LAJP

    通过上述三种技术——SOAP、Quercus和PHP/JavaBridge,开发人员能够灵活地在PHP和Java之间搭建桥梁,实现跨语言的协同工作。每种技术都有其独特的优势和适用场景,选择合适的方案可以极大提升Web应用的开发效率和...

    quercus,java 里边运行php程序

    jvm 里边运行php程序的包,解决了中文乱码问题. 注意使用UTF-8编码保存页面格式.resin下替换原版就可以了.其它jsp服务器比如tomcat,要script-10.jar 可以拷贝resin3.x里边的包.使用方法看resin帮助.

    为php配置java环境

    这通常涉及到在PHP应用程序中调用Java代码,例如通过JavaBridge或使用像Quercus这样的PHP到Java的转换器。以下是对这个主题的详细阐述: 1. **PHP与Java交互** PHP是一种广泛使用的开源脚本语言,主要应用于Web...

    quercus-4.0.37.war

    基于Java 的 PHP 框架 4.0.37 版本,解压后放入放入web服务器,在该目录下即可运行php,具体请自己找文档。

    技术经理决策参考-Java和PHP的协同开发方案

    Quercus允许PHP应用直接与Java库交互,包括JMS、EJB、SOA框架、Hibernate和Spring等。通过将PHP代码解释/编译为Java,Quercus实现了PHP和Java的紧密集成。使用Quercus的益处包括性能提升、更好的开发体验、更强大的...

    quercus成就GAE上运行php项目

    Google app engine提供了虚拟服务器,但是目前只能支持python和java语言。php语言只有通过认证才可以使用,但是很难通过认证。本人做了一个通过quercus使php项目能运行到GAE上,这是简单的项目内容

    PHP with Java

    在GAE的环境下,由于它不原生支持PHP,Quercus就扮演了关键角色,使得开发者可以将PHP应用部署到这个基于Java的云服务平台上。 首先,我们需要了解Google App Engine的基本概念。GAE是一个PaaS(Platform as a ...

    tomcat 环境下使用quercus运行php程序简单demo -登陆验证

    代码可以放在 tomcat 环境下运行(放到 tomcat 安装目录下启动 tomcat 即可),也可以用eclipse 打开,项目用 easyui 做前段框架,使用 php 做后台开发,请求用 的ajax,数据库使用 MySQL 5.6 。项目压缩包里包含 sql...

    quercus-3.1.2

    Quercus是Caucho公司采用纯Java开发的一个PHP5引擎,在Java下运行php ,很强大 。

    LAJP(Linux Apache Java Php) -- PHP结合JAVA的开发技术.zip

    PHP可以通过JavaBridge、Quercus等工具直接调用Java类库,实现两者的无缝集成。 6. **优点**:LAJP的优势在于结合了Java的强类型和企业级特性以及PHP的快速开发能力。Java处理后台服务,保证系统的稳定性和安全性,...

    让gae支持php的方法

    描述中提到的"基于java的Quercus"是一个关键的解决方案,它是一个兼容PHP的Java实现,可以让我们在不直接支持PHP的GAE上运行PHP代码。 Quercus是由Caucho Technology开发的一个高性能的PHP解释器,它完全用Java编写...

    JavaBridge.jar php-script.jar php-servlet.jar

    JavaBridge.jar、php-script.jar 和 php-servlet.jar 是在Apache Tomcat服务器上运行PHP应用程序的关键...此外,随着技术的发展,现在有更多如Quercus这样的解决方案,它们提供了更高效的方式在Java环境中运行PHP代码。

    tomcat支持php环境需要的jar包

    2. **PHP-Java Bridge (PJBP)**:这个项目提供了一个基于HTTP的桥接,使得Java和PHP可以互相调用。它包含了一个Java端的服务器组件和一个PHP端的客户端库。在Tomcat中,你需要部署PHPJavaBridge.war,并且配置PHP...

    php调用jar包依赖包

    4. 使用第三方库:有一些PHP库如Phalanger或Quercus,它们提供了在PHP中直接解释Java字节码的能力。这种方式可以直接引入Java的jar包,但是可能需要处理兼容性和性能问题。 在实际操作中,我们需要根据项目需求和...

    tomcat运行php所需jar

    1. **集成环境**:Tomcat是基于Java的Web服务器,主要处理JSP和Servlet,而PHP是一种服务器端脚本语言,通常与Apache或Nginx结合使用。要让Tomcat运行PHP,我们需要一个中间件,如Quercus(一个纯Java实现的PHP解释...

    Java帮助文档

    PHP4完全中文手册对于那些需要在Java环境中集成PHP或理解PHP与Java交互的开发者来说很有价值,它可能涵盖了如何使用Java的PHP接口(如JPHP或Quercus)来运行PHP代码。 软件工程思想.chm可能是关于软件开发过程、...

    quercus-4.0.39.war

    官方地址http://quercus.caucho.com/

Global site tag (gtag.js) - Google Analytics