| ||||||||||||||||||
Resin 3.1 Documentation Examples Changes Quercus Database Amber EJB SOA/ESB IoC JMS Servlet JMX Hessian Security Hello World Java Modules JSON PDO Gettext |
Adding PHP functions with a Java module.
Files in this tutorial
IntroductionThis article shows how to use Quercus, Resin's PHP implementation, to create a module in Java callable from a PHP page. For purposes of this article, I assume that you are working with Resin 3.0.17 and that the directory housing httpd.exe is /var/www/webapps/ROOT. I will call this directory $webApp. Step 1: Create resin-web.xml and place it in $webApp/WEB-INF<web-app xmlns="http://caucho.com/ns/resin"> <servlet servlet-name="resin-php" servlet-class="com.caucho.quercus.servlet.QuercusServlet"/> <servlet-mapping url-pattern="*.php" servlet-name="resin-php"/> </web-app> Step 2: Create HelloModule.java and place it in $webApp/WEB-INF/classes/examplepackage example; import com.caucho.quercus.module.AbstractQuercusModule; public class HelloModule extends AbstractQuercusModule { /* ** Notice the careful use of the naming ** convention hello_test. This is done ** in order to prevent name collisions ** among different libraries. */ public String hello_test(String name) { return "Hello, " + name; } } Step 3: Create com.caucho.quercus.QuercusModule and place it in $webApp/WEB-INF/classes/META-INF/servicesexample.HelloModule Step 4: Create hello.php and place it in webapps/ROOT<?php echo hello_test("World") ?> In your favorite browser, type: http://localhost:8080/hello.php You should see: Hello, World Advanced UsersThe first argument of a Java function may be the package example; import com.caucho.quercus.env.Env; import com.caucho.quercus.module.AbstractQuercusModule; public class HelloModule extends AbstractQuercusModule { /* ** Notice the careful use of the naming ** convention hello_test. This is done ** in order to prevent name collisions ** among different libraries. ** ** @param env provides access to Quercus environment resources ** @param name */ public String hello_test(Env env, String name) { env.println("inside HelloModule hello_test()"); return "Hello, " + name; } } Now Java Function Arguments/Return MarshalingQuercus does marshaling to and from Quercus Values and Java objects. If a Java function requires a String, Quercus will automatically convert the internal Quercus StringValue to a String. If a Java function returns an For other Java Objects like For more information, see Java Interface. ConclusionIt is fairly straight forward to create your own modules callable from within a Quercus/PHP page. The above tutorial takes through the steps to create the simple hello world application (without needing to "jar-up" your files). If you want to change your module in any way, all you have to do is resave the ".java" file in the classes\example directory, and Resin will recompile it for you. You do not need to restart your web app or Resin. It's just that simple.
|