WebService

WebService

webService的几个重要术语

WSDL(Web Services Description Language):Web服务描述语言。一个XML文档,WSDL定义了Web Service 的名称、处理服务的方法、请求的参数及返回的数据格式。一个WebService对应唯一一个wsdl文档。
SOAP(Simple Object Access Protocol):简单对象传输协议。一个基于HTTP和XML的协议,用于在Web上的应用程序交换结构化的数据。
SEI(WebService Endpoint Interface):WebService服务端用来处理请求的接口。
CXF(Celtix + XFire):一个Apache的用于开发webService服务器和客户端框架。

常用的网络协议:

tcp:文件传输协议,底层文件传输,确保文件不会丢失。
udp:用户数据报协议,只传不效验,传输速度快,但是不确保文件不丢失。
http:超文本传输协议,针对网页的一种协议。
https:超文本加密协议,针对网页的一种加密协议。
ftp:文件传输协议,远程文件服务器所使用的协议,可以进行远程文件上传,下载。
smb:windows共享夹所使用的协议。
nfs:linux共享文件夹所使用的协议。
afp:苹果系统共享文件夹所使用的协议。

WSDL的基本结构

Types元素 :数据类型定义的容器
Message元素:通信消息的数据结构的抽象类型定义
PorType元素:可以描述一个Web Service可被执行的操作以及相关的消息
Binding元素:特定端口类型的具体协议和数据格式规范的绑定
Service元素:相关服务访问点的集合

SOAP的概述

SOAP(SImple Object Access Protocol,简称对象访问协议):基于XML的,用于在分布式环境下交换信息的轻量级协议。
SOAP 1.2规范与2003年6月24日被发布为W3C推荐标准
SOAP的优点:

  • 与厂商无关
  • 相对于平台独立 相
  • 对与操作系统独立
  • 相对与编程语言独立
JAX-WS(Java API for XML Web Service)

1.定义WebService接口(使用注解方式)

package com.znsd.ws.service;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface MyService {
	@WebMethod
	public List<String> getState();
	@WebMethod
	public List<String> getCapital(String capital);
}

2.创建webService的实现类

package com.znsd.ws.service;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService(endpointInterface = "com.znsd.ws.service.MyService")
public class MyServiceImpl implements MyService {
	
	static List<String> list = new ArrayList<>();
	
	static {
		list.add("中国");
		list.add("美国");
		list.add("日本");
		list.add("韩国");
	}
	
	@Override
	public List<String> getState(){
		return list;
	}
	
	@Override
	public List<String> getCapital(String capital){
		List<String> li = new ArrayList<>();
		switch (capital) {
		case "中国":
			li.add("北京");
			break;
		case "美国":
			li.add("纽约");
			break;
		case "日本":
			li.add("东京");
			break;
		case "韩国":
			li.add("首尔");
			break;
		}
		return li;
	} 
}

3.拟写测试类

package com.znsd.ws.test;

import javax.xml.ws.Endpoint;

import com.znsd.ws.service.MyServiceImpl;

public class Test {
	
	public static void main(String[] args) {
		
		String url = "http://localhost:6666/myweather/getmyweather";//创建所需连接的url
		Endpoint.publish(url, new MyServiceImpl());
		System.out.println("已发布");
		
	}
	
}

4.在DOS下编译服务类至测试类(要确定好已配置好环境变量)

  • 使用jdk的wsimport.exe在测试类项目src目录下进行编译
  • 可以在dos里输入wsimport查看可以属性:其中-encoding 是选择服务类编译的字符编码,-p是服务类生产的包名,-keep是指定的URL需和服务类所创建的URL保持一致,并且在后面加上?wsdl
    在这里插入图片描述
  • (测试时需要注意将测试类和webService分为两个项目,测试时要将服务类始终运行)
    测试类运行
  • 获得java代码
  • 在这里插入图片描述
package com.znsd.ws.client;

import java.util.List;

import com.znsd.ws.webservice.MyService;
import com.znsd.ws.webservice.MyServiceImplService;
import com.znsd.ws.webservice2.ArrayOfString;
import com.znsd.ws.webservice2.WeatherWS;
import com.znsd.ws.webservice2.WeatherWSSoap;

public class Test {
	public static void main(String[] args) {
		MyService m = new MyServiceImplService().getMyServiceImplPort();
		List<String> state = m.getState();
		System.out.println(state);
		
		List<String> capital = m.getCapital("中国");
		System.out.println(capital);
	}
}

使用JAX-WS调用公共的webService(如:天气)
package com.znsd.ws.client;

import java.util.List;

import com.znsd.ws.webservice.MyService;
import com.znsd.ws.webservice.MyServiceImplService;
import com.znsd.ws.webservice2.ArrayOfString;
import com.znsd.ws.webservice2.WeatherWS;
import com.znsd.ws.webservice2.WeatherWSSoap;

public class Test {
	public static void main(String[] args) {
		WeatherWSSoap ws = new WeatherWS().getWeatherWSSoap();  //获得实列
		ArrayOfString string = ws.getWeather("深圳",null);
		System.out.println(string.getString());
	}
}

Apche CXF WebService框架

导入所有jar包
(去掉geronimo-servlet_3.0_spec-1.0.jar,javax.servlet-api-3.1.0.jar 这两个jar包即可)

web.xml配置
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:springws.xml</param-value>
</context-param>
<listener>
	<listener-class>
		org.springframework.web.context.ContextLoaderListener
	</listener-class>
</listener>
<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>
	<!-- 这是拦截地址 确定拦截位置 必须是services下的请求才会拦截 -->
	</servlet-mapping>

关于服务只需要和上文JAX-WS服务类一样写法即可

配置springws.xml
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	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-3.0.xsd
      http://www.springframework.org/schema/context 				http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://cxf.apache.org/jaxws
      http://cxf.apache.org/schemas/jaxws.xsd
      http://cxf.apache.org/bindings/soap 
	http://cxf.apache.org/schemas/configuration/soap.xsd">
	
	<import resource="classpath:META-INF/cxf/cxf.xml"/>
	<!--cxf 3.0版本后需去掉这两个文件配置
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>-->


	<!-- 配置服务路径的两种方式,取一即可 -->
	<!-- 第一种配置方式 -->
	<!--<bean id="weatherService" class=“com.lxit.service.impl.WeatherServiceImpl" />
	<jaxws:endpoint id="wsServiceBean" implementor="#weatherService" address="/getWeather" publish="true" />-->
	
	<!-- 第二种配置方式 -->
	<jaxws:server serviceClass="com.lxit.service.impl.WeatherServiceImpl" address="/getWeather"/>
</beans>	

然后运行服务得到下面的页面
在这里插入图片描述
然后在测试项目src下解析得到java文件即可,选取Endpoint address的路径:http://localhost:8080/spring-ws/services/getWeather?wsdl 记得在末尾加上wsdl之后的测试和上文的JAX-WS一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值