一、学习目标
1、理解Web Service的主要用途以及日后的发展
2、可以使用CXF进行Web Service程序的开发
3、可以使用Spring管理CXF
二、Web Service简介
从发展的历史来讲,Web Service是在EJB之后的产物,但是它的产生是有历史背景的,主要目的是为了解决异构系统的整合问题。分布式开发的主要功能是统一业务中心,但是在分布式开发的形成阶段,对于开发的平台也变的非常丰富,例如:.NET、PHP、JAVA。
当时的环境是XML的出现解决了此类标准的问题,即:使用XML作为远程接口的组成描述,而后利用SOAP协议进行通讯。
从全球来讲,最早的Web Service的成品在2004年的时候在美国实现了,当时成功的实现了.NET与J2EE系统的完美对接。
但是随后在很多的系统中开始大量的采用此类应用:
速度慢,因为需要转换
改为JSON格式的数据交换
虽然Web Service解决了异构系统的数据交换操作,但是随之而来的就是整个代码的执行效率差。
可是后来又根据Web Service炒作起了SOA的概念。于是在2005年到2009年,许多国内厂商去折腾SOA,又折腾出了ESB(企业服务总线)。
在Java开发之中,对于Web Service一直都有提供的组件存在,例如:最早的Axis,XFire,CXF(Axis + XFire)。
三、开发第一个Web Service程序
1、配置CXF的开发包
cxf-core-3.2.2.jar
只要是分布式的开发,必须以接口为标准。
2、范例:定义一个远程接口
package cn.mldn.service;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService //表示定义的是一个远程接口
public interface IMemberService {
public String echo (@WebParam String msg); //@WebParam表示参数是一个远程参数
}
3、范例:定义远程接口实现类
package cn.mldn.service.Impl;
import javax.jws.WebService;
import cn.mldn.service.IMemberService;
@WebService(endpointInterface="cn.mldn.service.IMemberService", serviceName="IMemberService")
public class IMemberServiceImpl implements IMemberService {
@Override
public String echo(String msg) {
return "ECHO: " + msg;
}
}
现在所写的注解都属于Java EE的标准Annotation,就是Java EE的核心组件。
4、范例:发布Web服务
package cn.mldn.test;
import javax.xml.ws.Endpoint;
import cn.mldn.service.IMemberService;
import cn.mldn.service.Impl.IMemberServiceImpl;
public class TestPub {
public static void main(String[] args) {
IMemberService service = new IMemberServiceImpl();
//直接进行项目发布
Endpoint.publish("http://127.0.0.1:6666/member", service); //地址 + 操作类的对象
}
}
直接启动Run As - Java Application,CXF自带一个Web服务器,浏览器访问:http://127.0.0.1:6666/member?wsdl
其中“wsdl”指的就是Web服务的接口描述语言,而后会将接口的方法以上面的形式发布。
此时,实际上只是完成了服务端的代码。随后还需要定义客户端代码(此时Eclipse可以将客户端代码自动生成)。
Web Service项目建立完成之后,还需要建立Web Service Client程序。
5、范例:编写程序
使用Web Service就感觉程序就像在本地调用一样。
四、将CXF与Spring集成
如果日后赶上了要进行Web Service项目的开发,一定要选择CXF,而使用了CXF那么最好被Spring管理。
1、为项目添加Spring支持
2、将CXF所有的开发包拷贝到WEB-INF/lib目录下
3、修改web.xml文件
把cxf-rt-transports-http-3.2.2.jar下的org.apache.cxf.transport.servlet下的CXFServlet.class类配到web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- <param-value>/WEB-INF/applicationContext.xml</param-value> -->
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
</web-app>
4、配置ApplicationContext.xml文件
导入jaxws命名空间
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<jaxws:endpoint id="MemberServiceImpl" implementor="cn.mldn.service.Impl.IMemberServiceImpl" address="/member"></jaxws:endpoint>
</beans>
访问:http://127.0.0.1:8080/WSProject/ws/
访问:http://127.0.0.1:8080/WSProject/ws/member?wsdl
参考资料:
https://www.cnblogs.com/kaiwen1/p/6864458.html
https://www.cnblogs.com/zhaideyou/p/5965064.html
此时项目的访问路径就由tomcat决定了“http://127.0.0.1:8080/WSProject/ws/member?wsdl”
五、总结
如果要做业务中心,就使用CXF技术完成。
上面的例子程序:https://pan.baidu.com/s/1nwFedsP