WebService 2

一.回顾

soap :简单对象访问协议 http+xml
Soa :面向服务的架构,它是一种思想

二.带接口webservice发布

1.service接口@WebService

@WebService
public interface JobService {
    public String getJob();
}

2serviceImpl@WebService(endpointInterface=”com.kinth.service”)

@WebService(endpointInterface="com.kinth.JobService")//设置服务端点接口 ,指定对外提供服务的接口
public class JobServiceImpl implements JobService {
    @Override
    public String getJob() {
        return "JEE研发工程师|Android研发工程师|数据库工程师|前端工程师|测试工程师|运维工程师";
    }
    public void say(){
        System.out.println("早上好!");
    }
}

3main中Endpoint.publish(address, jobService);

public static void main(String[] args) {
        JobService jobService=new JobServiceImpl();
        String address="http://192.168.0.199:9999/jobservice";
        Endpoint.publish(address, jobService);
        System.out.println("wsdl地址:"+address+"?WSDL");

    }

可以给下载的类打成jar包,类似linux:
jar cvf jobService.jar ./cn
测试:导入工程,新建服务,获取访问方式,获取方法,输出

三、 jsp+ajax+servlet+webservice 远程访问天气预报服务

step:
1. 了解第三方天气预报webservice服务
广东 广州 东莞 深圳, 温度信息
2. wsimport 生成本地代理
3. 准备一个index.jsp 页面,显示城市信息 ,下拉城市,显示天气信息

<body>
    <select id="province">
        <option value="31124">广东省</option>
    </select>
    <select id="city">
        <option value="2350">广州</option>
        <option value="2419">深圳</option>
        <option value="2351">东莞</option>
    </select>
    <hr />
    <span>XXXX</span>
    <script type="text/javascript">
        $("#city").change(function() {
            var city = $("#city option:selected").val();
            $.post("weatherServlet", {
                "city" : city
            }, function(backdata) {
                $("span").text(backdata).css("color", "blue");
            });
        });
    </script>
</body>

4 准备一个weatherServlet ,通过它来访问webservcie
servlet:init一个服务,setCharacterEncoding,获取访问方式和方法,获取ajax过来的城市信息入参,printWriter写回去,ajax发送请求返回值取得值,写回去。
5.servlet注册

四.cxf框架发布webservice

1.cxf:为BUS,类似于Spring的 ApplicationContext,内置jetty。
2.cxf支持注解方式发布,可显示webservice服务列表。
可添加拦截器,输入输出拦截器,用户权限验证拦截器

       1. ServerFactoryBean
         - 不设置注解也可以发布webservice服务, 不支持注解
         - 不支持拦截器的添加
       2. JaxWsServerFactoryBean
         - 支持注解
         - 可以添加拦截器
       3. webservice 访问流程:
         1. 检测本地代理描述的wsdl是否与服务端的wsdl一致 ,俗称为握手
         2. 通过soap协议实现通信 ,采用post请求 , 数据封装在满足soap规约的xml中
         3. 返回数据 同样采用的是soap通信,  数据封装在满足soap规约的xml中

发布:添加Jar,此时impl不用Enpoint注解

LanguageService languageService=new LanguageServiceImpl();
        JaxWsServerFactoryBean bean=new JaxWsServerFactoryBean();
        //Endpoint :地址  , 实现对象
bean.setAddress("http://192.168.114.10:9999/ws/cxf/languangeService");
        bean.setServiceClass(LanguageService.class);//对外提供webservcie的业务类或者接口
        bean.setServiceBean(languageService);//服务的实现bean
        //添加输入拦截器  :输入显示日志信息的拦截器
        bean.getInInterceptors().add(new LoggingInInterceptor());
        //添加输出拦截器  :输出显示日志信息的拦截器
        bean.getOutInterceptors().add(new LoggingOutInterceptor());
        bean.create();//创建,发布webservice

五.CXF+Spring发布WebService

step:
1. 添加cxf.jar ,spring.jar,servlet.jar
2. 编写业务类,通过CXF来发布webservice
员工管理:
方法 :添加员工、查询员工
bean:Employee
业务类:

@WebService(serviceName="EmployeeService")
public interface EmployeeManager {

    public abstract void add(@WebParam(name="employee")Employee employee);

    public abstract @WebResult(name="employees")List<Employee> query();

}

业务实现类:

public class EmployeeManagerImpl implements EmployeeManager {
    private List<Employee> employees=new ArrayList<>();
    @Override
    public void add(Employee employee){
        //添加到集合中
        employees.add(employee);
    }
    @Override
    public List<Employee> query(){
        return employees;
    }

}

3添加一个CXF请求的 Servlet,用来处理webservice的请求
过滤的地址/ws/*

4.配置Spring的配置文件: applicationContext.xml ,把cxf的bean在spring配置
添加命名空间约束

<bean id="employeeManagerImpl" class="com.kinth.EmployeeManagerImpl"></bean>
    <!-- 配置cxf 地址: http://192.168.0.199:8080/CXF_Server/ws/employeeManager 
        组成 : http://192.168.0.199:808 +CXF_Server( 项目名)+ws(过滤的路径)+/employeeManager(自定义部分) 
        服务类 : 服务的实现类: 拦截器 -->
    <jaxws:server address="/employeeManager" serviceClass="cn.it.ws.cxf.b.EmployeeManager">
        <jaxws:serviceBean>
            <ref bean="employeeManagerImpl" />
        </jaxws:serviceBean>
        <!-- 配置输入显示日志信息的拦截器 -->
        <jaxws:inInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
        </jaxws:inInterceptors>
        <jaxws:outInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
        </jaxws:outInterceptors>
    </jaxws:server>

5.在web.xml中配置 CXF的 Servlet , 添加spring的监听

  <!-- 添加 CXF 的Servlet ,处理 webservice的请求 -->
    <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>
  1. 通过wsimport生成本地代理 ,访问webservice

六.WebService测试:eclipse launch web servcie explorer

可看请求的客户端和服务端输出,免每次wsimport

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值