在开发本项目时,我们使用的相关技术主要有以下几个方面。
1 Web服务的开发技术
1.1 Java平台上生成Web服务
利用XFire+Tomcat实现JAVA平台的POJO发布为Web Service,Tomcat是WEB容器,用于处理SOAP消息中的HTTP部分,XFire是SOAP引擎,用于在服务端处理SOAP消息。具体过程如下所示:
一、首先建立WEB.XML文件的配置映射,当访问services时,调用XFireConfigurableServlet来处理:
……
<web-app>
<servlet>
<servlet-name>XFireServlet</servlet-name> <display-name>XFire Servlet</display-name> <servlet-class> org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> </servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name> <url-pattern>/servlet/XFireServlet/*</url-pattern> </servlet-mapping>
<servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app> |
二、XFireConfigurableServlet会自动查找classes下的META-INF/xfire/services.xml配置文件,在这个XML配置文件中,把要提供服务类或接口进行绑定,设置其名称、命名空间、需要绑定的类:
<beans xmlns="
http://xfire.codehaus.org/config/1.0
"> <service> <name>HelloWorldService</name> <namespace>http://202.118.22.171/ HelloWorldService </namespace> <serviceClass>cactus. HelloWorldService</serviceClass> </service> </beans> |
三、把需要服务的类或接口编写出来,我的示例是cactus. HelloWorldService类:
package cactus;
public class HelloWorldService {
public void sayHelloWorld(){ System.out.println(“Hello World!”); } } |
四、把XFire及其需要的包都拷过来。下载XFire后,解压后有个lib目录,把里面全部的包都拷过来下载的XFire包也拷过来
五、启动TOMCAT进行服务器端的测试:
输入网址:
http://localhost:8080/ HelloWorldService /services/浏览器会显示你所绑定的类或接口名称,如:
Available Services:
HelloWorldService
[wsdl]
Generated by XFire ( http://xfire.codehaus.org ) |
点击服务名后面的
[wsdl],会显示该服务类的详细wsdl描述.
1.2 .Net平台上生成Web服务
利用
IIS+C#+.net实现.net平台的Web服务发布,IIS是WEB容器,用于处理SOAP消息中的HTTP部分,.net自带的API用于处理SOAP消息。
例如发布一个Hello World的Web服务
在.net平台下建立一个Web服务
写下面代码:
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
|
1.3 P平台上生成Web服务HP
利用Apache+nusoap实现PHP平台的Web服务发布,Apache是WEB容器,用于处理SOAP消息中的HTTP部分,nusoap负责生成WSDL处理SOAP消息。
下面用php+nusoap发布一个两个数相加的Web服务
<?php
//server.php
//导入nusoap.php
require("nusoap/lib/nusoap.php");
//声明一个soap_server对象
$server=new soap_server();
//配置WSDL
$server->configureWSDL('HelloWorld','urn:HelloWorld');
//定义目标命名空间
$server->wsdl->schemaTargetNamespace='urn:HelloWorld';
//注册Adder
$server->register
(
//操作名
"Adder",
//参数类型
array('format'=>'xsd:int','fuck'=>'xsd:int'),
//返回值类型
array('return'=>'xsd:int'),
'urn:HelloWorld',
'urn:HelloWorld#Adder'
);
function Adder($a,$b)
{
return ($a+$b);
} $HTTP_RAW_POST_DATA=isset($HTTP_RAW_POST_DATA)?$HTTP_RAW_POST_DATA:'';
$server->service($HTTP_RAW_POST_DATA);
?>
|
访问http://localhost/server.php即为该服务
而相应WSDL位置为http://localhost/server.php?wsdl
2 Web服务的调用技术
2.1 Web服务的解析技术
WSDL4J
提供可以用于解析现有 WSDL 文档或通过编程创建新 WSDL 文档的标准 Java 接口。WSDL4J 是定位在 IBM developerWorks 网站上的一个开放源码项目。大多数 WSDL4J 类表示能够在 WSDL 文档中出现的元素。例如,由 Definition 类表示 <definition> 元素,而由 Service 类表示 <service> 元素。也有使 WSDL 文档变得易于读取和解析以及将 WSDL4J 对象的内容作为 XML 文档写出的实用类。
2.2消息的生成技术 SOAP
SAAJ(SOAP with Attachments API for Java)是在松散耦合软件系统中利用SOAP协议实现的基于XML消息传递的API规范。顾名思义,SAAJ支持带附件的SOAP消息。SAAJ提供了一个能方便地构建和读取SOAP信息的库,这个库还允许你通过网络接收和发送SOAP信息。SAAJ API为我们提供了一个高层次的SOAP消息封装接口,如:信封接口:javax.xml.soap.SOAPEnvelope,并提供了操作getHeader(),该方法返回一个消息头:javax.xml.soap.SOAPHeader。所以,通过调用SAAJ的接口函数,我们就可以对SOAP消息进行操作。
利用JDOM技术,根据从WSDL中解析出的返回信息来提取SOAP中的返回值,最终呈现给用户
2.3基于Lucene的Web服务搜索
基于搜索效率考虑,我们使用了开源索引数据库引擎Lucene。
通过对Lucene源码包的分析,我们可以初步认识到Lucene的核心类包主要有3个:
l org.apache.lucene.analysis
l org.apache.lucene.index
l org.apache.lucene.search
其中org.apache.lucene.analysis 主要用于切分词,切分词的工作由Analyzer的扩展类来
实现,Lucene自带了StandardAnalyzer类,我们可以参照该写出自己的切词分析器类,如中文分析器等。
org.apache.lucene.index主要提供库的读写接口,通过该包可以创建库、添加删除记录及读取记录等。
org.apache.lucene.search主要提供了检索接口,通过该包,我们可以输入条件,得到查询结果集,与org.apache.lucene.queryParser包配合还可以自定义的查询规则,像google一样支持查询条件间的与、或、非、属于等复合查询。
3 J2EE Web应用构建技术
本项目是基于J2EE WEB技术来开发服务器端程序,以及基于浏览器访问的客户端页面。主要用到了J2EE的Servlet API来处理从浏览器或移动设备中的HTTP请求,用到的Servlet容器为Apache的TOMCAT5.5。使用JSP来构建基于浏览器访问的客户端页面.使用JDBC来处理与MySql的数据库连接。
4 J2ME手机客户端开发技术
利用SUN公司的J2ME技术来开发基于手机的客户端应用,开发这种程序可以简化的分解成三个层面:
1 J2ME的客户端(MIDlet程序)
2 服务器端的servlet(servlet程序)
3 数据库(MySql等)
2 服务器端的servlet(servlet程序)
3 数据库(MySql等)
在本项目里,服务器的servlet有两种,一种是对应来自浏览器访问的HTTP请求,一种是对应来自手机的HTTP请求,这种Servlet是我们在开发手机客户端时在服务器端需要另外加的代码,其它代码可以直接调用服务器端的原来代码,如数据库连接验证用户的登录信息是否正确等等。所以本项目的手机客户端开发主要是集中在MIDlet程序的开发。