WebService 2
来源:互联网 发布:游戏开发行业前景知乎 编辑:程序博客网 时间:2024/05/16 15:54
一.回顾
soap :简单对象访问协议 http+xml
Soa :面向服务的架构,它是一种思想
二.带接口webservice发布
1.service接口@WebService
@WebServicepublic 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>
- 通过wsimport生成本地代理 ,访问webservice
六.WebService测试:eclipse launch web servcie explorer
可看请求的客户端和服务端输出,免每次wsimport
- Webservice 2
- WebService 2
- webService学习2----webService概述
- axis开发webservice(2)
- WebService基础2
- axis webservice 配置2
- WebService学习笔记2
- 客户端访问WebService(2)
- webservice上传下载2
- iOS 链接webservice(2)
- jaxws-webservice编程2
- WEBSERVICE 客户端实现2
- Qt调用WebService 2
- WebService 学习(2)
- Android 调用WebService【2】
- 从零开始学习WebService--2
- android WebService请求(2)
- 基于CXF webservice (2)
- Copy PR header te…
- Copy PR header te…
- solr学习笔记 -- day07 Linux下安装solr
- Java 读写Properties配置文件
- 设计模式之前言
- WebService 2
- 关于Chrome浏览器的一些使用技巧
- LibreOJ #504. 「LibreOJ β Round」ZQC 的手办 线段树+堆
- 朴素贝叶斯分类
- QT日常学习代码一
- PHP框架
- 达内课程-数组
- React 一个综合类PC站分享学习
- Maven学习笔记----基本配置