WebService入门(webservice)
lipiwang 2025-06-24 15:13 2 浏览 0 评论
一、什么是WebService
WebService是部署在Web上的,可访问的应用程序。主要是对外提供业务接口(业务功能)。
日常生活中的WebService:比如:天气预告、查询手机归属地。
二、WebService的组成
说明:
- 注册方:表示服务都要在注册服务器中进行注册,比如:服务的地址、接口、接口的方法等;
- 服务提供者:服务的实现方;
- 服务消费者:服务的调用方(客户端),广义来讲:Web应用,APP、组件等等。
三、WebService技术标准
- xml技术,web服务具体平台无关性、语言无关系;
- soap协议, Simple Object Access简单对象访问协议;
- wsdl web服务的描述语言(xml文档),用于描述web服务
Dubbo
四、Restful服务(重点)
- json数据格式的交互
- http协议
- 无需wsdl
Springcloud+Springboot
五、开发传统WebService
Apache CXF=Celtix+Xfire,开始叫Apache CeltiXfire,后来更名为Apache CXF了,以下简称为CXF。Apache CXF。Apache CXF是一个开源的Web Services框架,CXF帮助您构建和开发 web Service,它支持多种协议,比如:SOAP1.1,1.2XML/HTTP、RESTful或者CORBA。
CXF是基于SOA总线结构,依靠Spring完成模块的集成,实现SOA方式。
六、开发WebService的步骤:
服务端
①创建服务端Web项目,导入CXF的类库。
②配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- CXF 中央控制器 -->
<servlet>
<servlet-name>cxfServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxfServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
③创建实体类
package com.gec.ws.pojo;
import java.io.Serializable;
public class Product implements Serializable {
private Integer id;
private String name;
private Double price;
private String address;
public Product() {
}
public Product(Integer id, String name, Double price, String address) {
this.id = id;
this.name = name;
this.price = price;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
④创建ProductService接口
package com.gec.ws.service;
import com.gec.ws.pojo.Product;
import javax.jws.WebService;
import java.util.List;
@WebService //当前是一个可发布的web接口
public interface ProductService {
public List<Product> findAllProducts();
}
⑤创建ProductServiceImpl实现类
package com.gec.ws.service;
import com.gec.ws.pojo.Product;
import com.gec.ws.service.ProductService;
import java.util.ArrayList;
import java.util.List;
public class ProductServiceImpl implements ProductService {
@Override
public List<Product> findAllProducts() {
List<Product> list=new ArrayList<>();
for (int i=1;i<11;i++){
list.add(new Product(i,"红米手机"+i,7000D,"广州"));
}
return list;
}
}
⑥创建applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
xmlns="http://www.springframework.org/schema/beans">
<!-- 发布应用程序接口 -->
<jaxws:endpoint id="productServiceImpl"
implementor="com.gec.ws.service.ProductServiceImpl"
address="/productService"></jaxws:endpoint>
</beans>
⑦配置tomcat
⑧运行
点击{
http://service.ws.gec.com/}ProductServiceImplService后跳转的页面
客户端
①创建客户端web项目,导入CXF的类库。
②把服务端的实体类和接口与包一起拷贝过来
Product类
package com.gec.ws.pojo;
import java.io.Serializable;
public class Product implements Serializable {
private Integer id;
private String name;
private Double price;
private String address;
public Product() {
}
public Product(Integer id, String name, Double price, String address) {
this.id = id;
this.name = name;
this.price = price;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
ProductService接口
package com.gec.ws.service;
import com.gec.ws.pojo.Product;
import javax.jws.WebService;
import java.util.List;
@WebService //当前是一个可发布的web接口
public interface ProductService {
public List<Product> findAllProducts();
}
③创建com.gec.ws.main包
④以Spring的方式创建远程方法调用的客户端(代理)
package com.gec.ws.main;
import com.gec.ws.pojo.Product;
import com.gec.ws.service.ProductService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
//怎样区分远程方法调用(边界),以JVM为标准
public class SpringClientTest {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//远程方法调用的代理接口实例
ProductService productService= (ProductService) context.getBean("productService");
List<Product> list=productService.findAllProducts();
for (Product product : list) {
System.out.println(product.getId()+", "+product.getName()+", "+product.getPrice()+", "+product.getAddress());
}
}
}
⑤以代理的方式创建远程方法
package com.gec.ws.main;
import com.gec.ws.pojo.Product;
import com.gec.ws.service.ProductService;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import java.util.List;
public class ProxyClientTest {
public static void main(String[] args) {
JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
factory.setServiceClass(ProductService.class);
factory.setAddress("http://localhost:8088/services/productService");
ProductService productService= (ProductService) factory.create();
List<Product> list=productService.findAllProducts();
for (Product product : list) {
System.out.println(product.getId()+", "+product.getName()+", "+product.getPrice()+", "+product.getAddress());
}
}
}
⑥运行以Spring方式创建的远程方法
⑦运行以代理方式创建的远程方法
⑧没用到WebService之前调用远程方法的写法
package com.gec.ws.controller;
import com.gec.ws.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class ProductController {
@Autowired
private ProductService productService; //远程方法调用webservice
}
相关推荐
- ubuntu单机安装open-falcon极度详细操作
-
备注:以下操作均由本人实际操作并得到验证,喜欢的同学可尝试操作安装。步骤一1.1环境准备(使用系统:ubuntu18.04)1.1.1安装redisubuntu下安装(参考借鉴:https://...
- Linux搭建promtail、loki、grafana轻量日志监控系统
-
一:简介日志监控告警系统,较为主流的是ELK(Elasticsearch、Logstash和Kibana核心套件构成),虽然优点是功能丰富,允许复杂的操作。但是,这些方案往往规模复杂,资源占用高,...
- 一文搞懂,WAF阻止恶意攻击的8种方法
-
WAF(Web应用程序防火墙)是应用程序和互联网流量之间的第一道防线,它监视和过滤Internet流量以阻止不良流量和恶意请求,WAF是确保Web服务的可用性和完整性的重要安全解决方案。它...
- 14配置appvolume(ios14.6配置文件)
-
使用AppVolumes应用程序功能,您可以管理应用程序的整个生命周期,包括打包、更新和停用应用程序。您还可以自定义应用程序分配,以向最终用户提供应用程序的特定版本14.1安装appvolume...
- 目前流行的缺陷管理工具(缺陷管理方式存在的优缺点)
-
摘自:https://blog.csdn.net/jasonteststudy/article/details/7090127?utm_medium=distribute.pc_relevant.no...
- 开源数字货币交易所开发学习笔记(2)——SpringCloud
-
前言码云(Gitee)上开源数字货币交易所源码CoinExchange的整体架构用了SpringCloud,对于经验丰富的Java程序员来说,可能很简单,但是对于我这种入门级程序员,还是有学习的必要的...
- 开发JAX-RPC Web Services for WebSphere(下)
-
在开发JAX-RPCWebServicesforWebSphere(上)一文中,小编为大家介绍了如何创建一个Web服务项目、如何创建一个服务类和Web服务,以及部署项目等内容。接下来小编将为大...
- CXF学习笔记1(cxf client)
-
webservice是发布服务的简单并实用的一种技术了,个人学习了CXF这个框架,也比较简单,发布了一些笔记,希望对笔友收藏并有些作用哦1.什么是webServicewebService让一个程序可...
- 分布式RPC最全详解(图文全面总结)
-
分布式通信RPC是非常重要的分布式系统组件,大厂经常考察的Dubbo等RPC框架,下面我就全面来详解分布式通信RPC@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》...
- Oracle WebLogic远程命令执行0day漏洞(CVE-2019-2725补丁绕过)预警
-
概述近日,奇安信天眼与安服团队通过数据监控发现,野外出现OracleWebLogic远程命令执行漏洞最新利用代码,此攻击利用绕过了厂商今年4月底所发布的最新安全补丁(CVE-2019-2725)。由...
- Spring IoC Container 原理解析(spring中ioc三种实现原理)
-
IoC、DI基础概念关于IoC和DI大家都不陌生,我们直接上martinfowler的原文,里面已经有DI的例子和spring的使用示例《InversionofControlContainer...
- Arthas线上服务器问题排查(arthas部署)
-
1Arthas(阿尔萨斯)能为你做什么?这个类从哪个jar包加载的?为什么会报各种类相关的Exception?我改的代码为什么没有执行到?难道是我没commit?分支搞错了?遇到问题无法在...
- 工具篇之IDEA功能插件HTTP_CLENT(idea2021插件)
-
工具描述:Java开发人员通用的开发者工具IDEA集成了HTTPClient功能,之后可以无需单独安装使用PostMan用来模拟http请求。创建方式:1)简易模式Tools->HTTPCl...
- RPC、Web Service等几种远程监控通信方式对比
-
几种远程监控通信方式的介绍一.RPCRPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果。这个请求包括一个参数集和一个文本集,通常形成“classname.meth...
- 《github精选系列》——SpringBoot 全家桶
-
1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)