Java基础之《WebService开发技术(基于CXF)》

一、学习目标

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值