WebService详解
来源:互联网 发布:java去掉括号内容 编辑:程序博客网 时间:2024/06/08 04:41
开发及原理:
WebService开发可以分为服务器端开发和客户端开发两个方面:
服务端开发:把公司内部系统的业务方法发布成WebService服务,供远程合作单位和个人调用。(借助一些WebService框架可以很轻松地把自己的业务对象发布成WebService服务,Java方面的典型WebService框架包括:axis,xfire,cxf等,java ee服务器通常也支持发布WebService服务,例如JBoss。)
客户端开发:调用别人发布的WebService服务,大多数人从事的开发都属于这个方面,例如,调用天气预报WebService服务。(使用厂商的WSDL2Java之类的工具生成静态调用的代理类代码;使用厂商提供的客户端编程API类;使用SUN公司早期标准的jax-rpc开发包;使用SUN公司最新标准的jax-ws开发包。当然SUN已被Oracle收购)
WebService的工作调用原理:对客户端而言,我们给这各类WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,调用这些代理,就可以访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap数据变成返回值返回。对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成soap格式的数据,通过http响应消息回给客户端。
体系架构:
Web服务的体系结构是基于Web服务提供者、Web服务请求者、Web服务中介者三个角色和发布、发现、绑定三个动作构建的。简单地说,Web服务提供者就是Web服务的拥有者,它耐心等待为其他服务和用户提供自己已有的功能;Web服务请求者就是Web服务功能的使用者,它利用SOAP消息向Web服务提供者发送请求以获得服务;Web服务中介者的作用是把一个Web服务请求者与合适的Web服务提供者联系在一起,它充当管理者的角色,一般是UDDI。这三个角色是根据逻辑关系划分的,在实际应用中,角色之间很可能有交叉:一个Web服务既可以是Web服务提供者,也可以是Web服务请求者,或者二者兼而有之。显示了Web服务角色之间的关系:其中,“发布”是为了让用户或其他服务知道某个Web服务的存在和相关信息;“查找(发现)”是为了找到合适的Web服务;“绑定”则是在提供者与请求者之间建立某种联系。
JAX-RS提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源。标注包括:
@Path,注释被用来描述根资源、子资源方法或子资源的位置。
value 值可以包含文本字符、变量或具有定制正则表达式的变量。
@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型.您可以使用它们来绑定根资源或子资源内的 Java 方法与 HTTP 请求方法。
HTTP GET 请求被映射到由 @GET 注释的方法;
HTTP POST 请求被映射到由 @POST 注释的方法,以此类推。用户可能还需要通过使用 @HttpMethod 注释定义其自己的定制 HTTP 请求方法指示符。
@Produces,注释代表的是一个资源可以返回的 MIME 类型。这些注释均可在资源、资源方法、子资源方法、子资源定位器或子资源内找到。
@Consumes,注释代表的是一个资源可以接受的 MIME 类型。
@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,
功能特性
CXF 包含了大量的功能特性,但是主要集中在以下几个方面:
支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging
和 WS-Security。
Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”
允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL 优先开发,也支持从 Java 的代码优先开发模式。
容易使用: CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,
支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。
支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。
访问路径:项目路径+web.xml中的路径+applicationContext-wedService.xml中的路径+请求方法的路径@Path(“/associationUsers”)
传递参数示例:
列:// 查询所有未关联客户列表 请求:Customer customer = WebClient .create("http://localhost:9002/crm_management/services/customerService/findCustomerByTelephone/" + model.getTelephone()) .accept(MediaType.APPLICATION_JSON).get(Customer.class); @GET @Path("/associationCustomers") @Produces({ "application/xml", "application/json" }) public List<Customer> findNoAssociationCustomers(); // 查询已经关联的到指定定区的客户列表 @GET @Path("/hasAssociationFixedAreaCustomers/{fixedAreaId}") @Produces({ "application/xml", "application/json" }) @Consumes({ "application/xml", "application/json" }) public List<Customer> findHasAssociationFixedAreaCustomers(@PathParam("fixedAreaId") String fixedAreaId); // 关联客户到指定的定区,将客户id拼接成customerIdStr字符串(1,2,3.。) 请求:WebClient.create("http://localhost:9002/crm_management/services/customerService/updateCustomerType/" + model.getTelephone()).put(null); @PUT @Path("/associationCustomersToFixedArea") @Consumes({ "application/xml", "application/json" }) public void associationCustomersToFixedArea(@QueryParam("customerIdStr") String customerIdStr, @QueryParam("fixedAreaId") String fixedAreaId); // 保存用户 请求: WebClient.create("http://localhost:9002/crm_management/services/customerService/customer/") .type(MediaType.APPLICATION_JSON).post(model); @POST @Path("/customer") @Consumes({ "application/xml", "application/json" }) public void registCustomer(Customer customer);例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。spring整合相关xml配置web.xml<!-- 使用CXF --> <servlet> <servlet-name>CXFService</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>applicationContext-wedService.xml<!-- 配置cxf相关文件 --> <jaxrs:server id="customerService" address="/customerService"> <jaxrs:serviceBeans> <bean class="cn.itcast.crm.service.impl.CustomerServiceImpl"/> </jaxrs:serviceBeans> <jaxrs:inInterceptors> <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/> </jaxrs:inInterceptors> <jaxrs:outInterceptors> <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> </jaxrs:outInterceptors> </jaxrs:server>
- webService详解
- webservice详解
- webService详解
- WebService详解
- webService详解
- WebService 详解
- webService详解
- WebService详解
- webService详解
- WebService详解
- WebService详解
- WebService详解
- WebService详解
- WebService详解
- webService详解
- WebService详解
- webservice详解
- WebService详解
- Python 常见面试题(不断更新)
- angular 绑定html
- [cnblogs镜像]页面定制CSS代码初探(一):页面变宽 文本自动换行 图片按比缩放
- c++初识
- 动态添加元素后 js点击 DOM查找不到
- WebService详解
- 1021. 个位数统计 (15)
- HDU 5510 Bazinga(KMP||strstr神器+些许优化)
- 栈的简单使用和运行结果
- 《Effective Java》(23~25)阅读笔记
- [cnblogs镜像]页面定制CSS代码初探(二):自定义h2标题样式 添加阴影 添加底色 等
- 【洛谷3335】【ZJOI2013】蚂蚁寻路
- [cnblogs镜像]Xcode 下“ did not have any applicable content ”分析及解决
- android-SVG