一种基于SSH框架集成Axis开发并发布Web Service的方法
【专利说明】一种基于SSH框架集成Ax i s开发并发布Web Serv i ce的方法
技术领域
[0001]本发明涉及Java Web中的Web Service技术开发领域,具体的说是在SSH框架基础上集成Axis开发并且发布Web Service服务的方法。
【背景技术】
[0002]Web Service技术的出现,使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。依据Web Service规范实施的应用之间,无论它们所使用的语言、平台或内部协议是什么,都可以相互交换数据。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
[0003]Web Service主要涉及的技术有1、XML (标准通用标记语言下的一个子集);2、SOAP (Simple Object Access Protocol,简单对象访问协议);3、WSDL (Web ServicesDescript1n Language, Web Service 描述语言)。
[0004]Web Service可以看成是远程函数。WSDL可以理解成函数的声明,它详细的定义了函数的原型,包括函数名、入口参数、出口参数、以及与远程地址的绑定。SOAP是WebService的访问协议,SOAP建立在XML之上,不同的就是对XML原本没有限制的格式加上了一些限制,需要有envelop,在envelope中,还要分header和body。如果利用SOAP开发Web Service的程序,那就需要根据WSDL的定义来自行组装SOAP包。除了要配置SOAP请求头文件信息,还要根据SOAP定义的消息格式组装消息数据。这种手工组装SOAP消息的方式,工作量较大,而且日后的系统维护、升级、部署都有较高的复杂度。
[0005]Web Service的接口业务实现层,进行具体的业务实现处理,在Web Service接口中调用各种业务需求的实现方法。由于业务的复杂性,Web Service接口中对业务实现方法不可避免的会存在多重依赖性,对象之间的耦合度越高,业务变更时的维护成本就越高,因此对象的设计应使类和构件之间的耦合最小。
[0006]SSH为Struts + Spring + Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。使用该框架,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,开发者可以更专注于应用逻辑;降低了业务对象替换时所带来的复杂性和维护成本。
[0007]Axis 全称 Apache Extensible Interact1n System,即阿帕奇可扩展交互系统。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。
【发明内容】
[0008]本发明提供了一种基于SSH框架集成Axis开发并发布Web Service的方法,所述方法通过将组装SOAP消息的工作托管给AXIS来处理,通过SSH框架降低Web Service业务逻辑层的耦合度,能够在应用生产过程中快速的架设Web Service服务,降低系统复杂度,从而简化维护和部署。
[0009]为了实现上述的目的,本发明采用了以下的技术方案: 一种基于SSH框架集成Axis开发并发布Web Service的方法,该方法包括以下的步骤:
步骤1,搭建SSH框架基础开发平台,导入SSH框架所依赖的Jar包到工程中,修改web-1nfo下的web.xml文件,增加struts2的配置;并在WEB-1NF/classes目录下添加struts, xml配置文件;
步骤2,整合并且在SSH框架基础上配置Axis,修改web.xml增加Axis的配置描述,并在web.xml文件下加入AxisServlet配置后,系统就会对以后缀为*.jws及路径为/services/*的请求进行监听,遇到此类请求时将把信息交由org.apache,axis, transport, http.AdminServlet 类进行处理;Axis 和 struts2 在整合过程中,在struts, xml 增加〈constant name=〃struts.act1n, excIudePattern^ value=///servlet/AxisServlet, /services/.*〃/>配置,将Web Service的访问路径从struts2中拦截器中排除;
步骤3,编写Web Service实现类,采用基于spring的Web Service实现,WebService 月艮务类需要继承 spring 提供的 org.springframework.remoting.jaxrpc.ServletEndpointSupport 类,Spring 使用该类来暴露 WebService ;
步骤 4,编写 Web Service Deployment Descriptor 文件;
步骤5,发布Web Service服务,在浏览器访问在web.xml里配置好的Axis处理地址AxisServlet,打开已配置并且发布好的Web Service,单击发布成功的接口名称打开其对应的WSDL文件,将WSDL文件保存后,根据该文件信息进行客户端的Web Service调用。
[0010]本方法将组装SOAP消息的工作托管给AXIS来处理,相较于手工实现SOAP协议,实现更快捷,如果有新的接口业务要实现时,只需将所要发布的Web Service方法配置到WSDD文件中即可,不需额外手工编写WSDL文件。
[0011]本方法实现了资源的可配置和易管理,降低了使用资源双方的依赖程度。通过Spring提供的1C将Web Service接口与具体业务实现进行分离,将对象之间的依赖关系交给Spring,降低Web Service接口与接口业务实现层之间的親合性。在接口业务需求变更时只需要将新的业务实现通过Spring注入到接口中即可,降低了业务对象变更或替换时所带来的复杂性和维护成本。
【附图说明】
[0012]图1为本发明方法的流图。
[0013]图2为发布成功的接口的示意图。
【具体实施方式】
[0014]如图1所示的一种基于SSH框架集成Axis开发并发布Web Service的方法,本方法共包含5个步骤。
[0015]步骤1,搭建SSH框架基础开发平台,【具体实施方式】如下:
导入SSH框架所依赖的Jar包到工程中,修改web-1nfο下的web.xml文件,增加struts2的配置:
struts2〈/fiIter_name>
org.apache, s t r u t s 2.dispatcher, n g.filter.StrutsPrepareAndExecuteFilter
struts2〈/fiIter_name>
/氺
StrutsPrepareAndExecuteFilter过滤器的主要功能是对request请求转发到对应的act1n去处理,是struts2的核心过滤器。
[0016]在WEB-1NF/classes 目录下添加 struts, xml 配置文件:
〈constant name=,,struts, convent1n, act1n, suffix,, value=,,Controller,,/〉〈constant name=,,struts, convent1n, default, parent, package,, value=〃nbol〃/>〈!一搜索此配置下的所有包中的类一>
〈constant name = ,, strut s.convent1n, package, locators.basePackage,,value=,,net.nbol〃/>
〈! 一 act1n 存放的根包,如果不配,默认为 struts、struts2、act1n、act1ns
—>
〈constant name=,,struts, convent1n, package, locators,, value=,,controller,,
/>
〈!一返回页面的根路径一>
〈constant name=,,struts, convent1n, result, path,, value=〃/WEB_INF/〃/>
配置Spring,修改web-1nfo下的web.xml文件增加对spring的配置:
〈listener〉
org.springframework.web.context.ContextLoaderListener
〈/listener〉
〈param_name>contextConfigLocat1n〈/param_name>
classpath氺:spring/氺.xml
ContextLoaderListener监听器的作用就是启动Web容器时,自动装配Applicat1nContext 的配置信息。
[0017]在WEB-1NF/classes 目录下添加 spring 配置文件 applicat1nContext.xml:
〈context:annotat1n-config />
〈context:component-scan base_package=〃net.nbol〃 />
配置hibernate,由于hibernate在SSH框架中负责数据持久化,在Web Service开发中并不是必须的,所以这里不具体描述如何配置hibernate。
[0018]步骤2,整合并且在SSH框架基础上配置Axis:
修改web.xml增加Axis的配置描述:
Apache-Axis
〈listener〉
org.apache, axis, transport, http.AxisHTTPSess1nListener
〈/listener〉
〈!一服务管理—>
AdminServlet
or