【本文已迁移到“程序员文摘” http://programmerdigest.cn/category/lajp】江湖人言”光说不练假把式,光练不说傻把式“,上文讲了LAJP的种种优点好处,但对于一门新语言或技术,程序员最关心如何快速的在实践中了解这项技术的特点,因此还是从千锤百炼也不变的HelloWorld入手。
LAJP有两种通信模式:消息队列和socket,针对windows和linux平台本节教程共分为三篇: windows下的socket模式hello world,linux下的socket模式hello world,和linux下的消息队列hello world。
windows下的socket模式hello world
安装之前:
系统要求: windows,安装好Apache、PHP环境
Java JDK:1.5以上。
安装配置:
下载 lajp-socket_9.09.zip ,解压:
lajp-socket_9.09 //socket版
|
|--java
| |
| |--hello //Hello World示例程序
| | |
| | |--HelloClass.class
| | +--HelloClass.java
| |
| |--lajp_9.09.jar //Java服务端主程序
| |--run.sh //运行脚本(Unix/Linux)
| +--run.bat //运行脚本(Windows)
|
+--php
|
+--php_java.php //PHP脚本
解开后有两个子目录,将php目录中的php_java.php文件复制到Apache+php环境中的发布目录,备用。
编写PHP文件:
001 <?php header("Content-Type:text/html;charset=utf-8"); ?>
002
003 <?PHP
004 require_once("php_java.php"); //引用下载的php_java.php文件
005
006 $name = "Ali";
007
008 try
009 {
010 //调用Java的hello.HelloClass类中的hello方法
011 $ret = lajp_call("hello.HelloClass::hello", $name);
012 echo "{$ret}<br>";
013 }
014 catch (Exception $e)
015 {
016 echo "Err:{$ret}<br>";
017 }
018 ?>
运行:
1. 打开CMD黑窗口,CD进入解压目录的java子目录,运行其中的脚本程序run.bat,黑窗口中显示:
-------------------------------------------
- Start LAJP-JAVA(socket)...
- time:Tue Sep 22 22:56:09 CST 2009
-------------------------------------------
Listen port: 21230
set charser: UTF-8
以上信息表示Java服务已经运行。
2. 打开浏览器,访问刚创建的php程序地址,页面显示:"Hello World! Ali"。
OK,Hello World程序演示结束。
解释:
在下载的zip文件的Java程序中,带有一个LAJP服务,服务类是HelloClass.class,我们看它的源代码HelloClass.java:
001 package hello;
002
003 public class HelloClass
004 {
005 public static final String hello(String userName)
006 {
007 return "Hello World! " + userName;
008 }
009 }
当php程序执行到 $ret = lajp_call("hello.HelloClass::hello", $name)语句时,发生如下事情:
1. lajp_call函数参数"hello.HelloClass::hello"告诉LAJP,我要访问hello.HelloClass类中的hello方法,并且传给它一个参数$name。
2. 在lajp_call函数内部将请求包装为消息包,通过socket发送给Java服务
3. Java端的LAJP程序接收消息报,解析调用含义,找到HelloClass类和hello方法,执行方法调用,再将方法返回值包装为消息包,socket回PHP程序
4. PHP端lajp_call函数解析返回消息包,得到其中的字符串"Hello World! Ali"