最近做社保查询的东西,然而这个是三个公司一起做的,需要调其他公司的接口,他们公司用了webService这个当年比较流行的技术,于是乎就研究了一下这个webService.

HTTP协议 + XML方式实现跨语言调用。因为Http+xml会有很多冗余数据。所以后来有了RPC框架(Dubbo、Spring Cloud)

一、WebService是什么?
  . 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据)
  . 一个跨语言、跨平台的规范(抽象)
  . 多个跨平台、跨语言的应用间通信整合的方案(实际) 二、为什么要用Web service(能解决什么)?
跨平台调用
跨语言调用
远程调用 三、什么时候使用web Service?
  . 同一家公司的新旧应用之间
  . 不同公司的应用之间
  . 一些提供数据的内容聚合应用:天气预报、股票行情 四、Web Service中的几个重要术语
4.1、WSDL(web service definition language)
  WSDL是webservice定义语言, 对应.wsdl文档, 一个webservice会对应一个唯一的wsdl文档, 定义了客户端与服务端发送请求和响应的数据格式和过程 4.2、SOAP(simple object access protocal)
  SOAP是"简单对象访问协议"是一种简单的、基于HTTP和XML的协议, 用于在WEB上交换结构化的数据soap消息:请求消息和响应消息 4.3、SEI(WebService EndPoint Interface)
  SEI是web service的终端接口,就是WebService服务器端用来处理请求的接口 4.4、CXF(Celtix + XFire)
  一个apache的用于开发webservice服务器端和客户端的框架。

首先定义两个webService功能接口

@WebService
public interface WebserviceI {
@WebMethod
public String sayHello(String name);
@WebMethod
public String sayBye(String name);
} @WebService
public interface Webservice2I {
@WebMethod
public String run(String name);
@WebMethod
public String lover(String name);
}

然后实现webService功能接口

@WebService
public class WebServiceImpl implements WebserviceI { @Override
public String sayHello(String name) {
String result = "你好,"+name;
System.out.println(result);
return result;
} @Override
public String sayBye(String name) {
String result = "再见,"+name;
System.out.println(result);
return result;
} }

@WebService
public class WebService2Impl implements Webservice2I { @Override
public String run(String name) {
String result = "not flash , but have to run."+name;
System.out.println(result);
return result;
} @Override
public String lover(String name) {
String result = "dyl,"+name;
System.out.println(result);
return result;
}
}

最后发布出去,我们用三种示例方式发布

1.直接在java类中发布

public static void main(String[] args) {
//必须要是部署机器的ip,端口也要开,我就用tomcat的端口了
String address = "http://222.222.221.137:8080/WS_Server/Webservice";
//用endpoint发布webservice
Endpoint.publish(address, new WebServiceImpl());
System.out.println("通过java文件部署webservice成功");
}

2.通过设置servlet自动加载初始化,用servlet发布

public class TestServlet extends HttpServlet {

    @Override
public void init() throws ServletException {
//必须要是部署机器的ip,端口也要开,我就用tomcat的端口了
String address = "http://222.222.221.137:8088/WS_Server/Webservicesss";
//用endpoint发布webservice
Endpoint.publish(address, new WebServiceImpl());
System.out.println("通过httpservlet部署webservice成功");
} }
其中要在web.xml配置中配置
<!-- 通过servlet部署 -->
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.qy.servlet.TestServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>qy</param-value>
</init-param>
<!-- 此处指定加载顺序为2,表明还有优先级更高的Servlet要先执行,数值越小,优先级越高 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>InitServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

3.通过用ServletContextListener发布

public class contextlistener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
} @Override
public void contextInitialized(ServletContextEvent arg0) {
//必须要是部署机器的ip,端口也要开,我就用tomcat的端口了
String address = "http://222.222.221.137:8087/WS_Server2/Webservices2";
//用endpoint发布webservice
Endpoint.publish(address, new WebService2Impl());
System.out.println("通过servletcontextlistener部署webservice成功");
} }

web.xml中配置

<listener>
<listener-class>com.qy.servletcontextlistener.contextlistener</listener-class>
</listener>

还有其他启动的方法,比如过滤器,使用ioc容器的可以在xml中配置

这下就好了,在浏览器中输入地址然后可以显示成这样子的

如果是demo,那么久结束了。

但是!!!浏览器的url请求成功并不代表这个接口可以调用!!!!一定要用专业的工具测试!!!!昨天就是另外一家公司的webservice部署好之后浏览器查看没事就溜了,结果根本不能调用,这里我们用wsCaller.jar测试.

这里是源码和测试工具,有兴趣的可以看一下

JDK中wsimport命令

wsimport -keep -d D:\logs\d -s D:\logs\s -p com.qy.clent -verbose http://222.222.221.137:8081/WS_Server/Webservice?wsdl

-keep:是否生成java源文件

-d:指定.class文件的输出目录

-s:指定.java文件的输出目录

-p:定义生成类的包名,不定义的话有默认包名

-verbose:在控制台显示输出信息

生成客户端代码,测试是否可以使用

       /*try {
//服务WSDL Document的地址
URL url = new URL("http://222.222.221.137:8081/WS_Server/Webservice?wsdl");
//1.Qnameqname是qualified name 的简写
//2.构成:由名字空间(namespace)前缀(prefix)以及冒号(:),还有一个元素名称构成
//由发布的wsdl可知namespace为http://server.ws.platform.whaty.com/,
QName qname=new QName("http://interf.qy.com/","WebServiceImplService");
Service service=Service.create(url, qname);
WebServiceImpl ms=service.getPort(WebServiceImpl.class);
String re = ms.sayHello("qy");
System.out.println(re);
} catch (Exception e) {
e.printStackTrace();
}*/
WebServiceImplService ss = new WebServiceImplService();
WebServiceImpl webServiceImplPort = ss.getWebServiceImplPort();
String result = webServiceImplPort.sayBye("qy");
System.out.println(result);

结果

webService开发(JDK版)的更多相关文章

  1. Webservice开发概念

    一.Web Service基本概念 Web Service由两部分组成 SOAP--Web Service之间的基本通信协议. WSDL--Web Service描述语言,它定义了Web Servic ...

  2. eclipse下的webservice开发

    关于eclipse下的webservice开发,有非常多的教程,这里只记下学习过程中的弯路: 1.无论是CXF模式还是AXIS模式,在出现start server之后,点击next报错:"s ...

  3. [推荐]WebService开发知识介绍

    [推荐]WebService开发知识介绍 WebService开发手册  http://wenku.baidu.com/view/df3992ce050876323112128a.html WebSe ...

  4. 从零開始开发Android版2048 (一)初始化界面

    自学Android一个月多了,一直在工作之余零零散散地看一些东西.感觉经常使用的东西都有些了解了,可是一開始写代码总会出各种奇葩的问题.感觉还是代码写得太少.这样继续杂乱地学习下去进度也太慢了,并且学 ...

  5. Domino 8.5 WebService开发一例

    原文地址:Domino 8.5 WebService开发一例作者:bj木棉 需求是要调用一个Domino上的WebService/JAVA来实现与人事管理系统里的人员同步,就是在人事管理系统中增加用户 ...

  6. Webservice开发、引用

    一.Webservice开发 1.在解决方案右键添加新建项目,新建空的web应用程序 2.在新建的项目右键添加新建项选择web服务 3.这里就是webservice 里的方法,可以添加自己需要的方法( ...

  7. 菜鸟在线教你用Unity3D开发VR版的Hello World

    大家好,我是菜鸟在线的小编.这篇短文将告诉大家如何用Unity3D开发VR版的Hello World. 1开启SteamVR并连接Vive设备 (a)登录Steam客户端,并点击右上角的VR按钮,这时 ...

  8. Delphi XE5通过WebService开发Web服务端和手机客户端

    Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices  stand-alone vcl applicati ...

  9. C#调用OpenCV开发简易版美图工具

    前言 在C#调用OpenCV其实非常简单,因为C#中有很多OPenCV的开源类库. 本文主要介绍在WPF项目中使用OpenCVSharp3-AnyCPU开源类库处理图片,下面我们先来做开发前的准备工作 ...

随机推荐

  1. MySQL root账户密码设为“root”后执行命令提示ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

    修改root账户密码为“root”后,提示ERROR 1820 (HY000): You must reset your password using ALTER USER statement bef ...

  2. linux基础命令---tr

    tr 删除或者更改文件中的字符串,这个指令一般需要两个字符集. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       ...

  3. 使用Astah画UML类图经验总结

    从学习需求工程与UML开始,就开始接触到Astah这款软件,但是当时完全是为了对UML各种图的了解加深才使用了这款软件.当时画图,都是完全凭借自己想,并没有考虑实际情况,而且画的图都是很简单的,甚至有 ...

  4. web前端----JavaScript对象

    简介: 在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String.Math.Array.Date.RegExp都是Jav ...

  5. 【运维技术】Nexus私服安装配置常用问题

    maven私服安装配置 软件安装及基本配置 安装配置 # 安装jdk,参考其他教程 mkdir -p /app/nexus2 # 创建目录 wget https://download.sonatype ...

  6. CentOS安装mysql并配置远程访问

    最近上班挺无聊,每天就是不停的重启重启重启,然后抓log.于是有事儿没事儿的看卡闲书,搞搞其他事情. 但是,公司笔记本装太多乱其八糟的东西也还是不太好. 于是,想到了我那个当VPN server的VP ...

  7. servlet+jsp+java实现Web应用

    servlet+jsp+java实现Web应用 环境: 1,eclipse 2,tomcat3,eclipse tomcat 插件 开发过程: 1,建立一个Dynamic Web Project 2, ...

  8. 20145301 赵嘉鑫 《网络对抗》Exp5 MSF基础应用

    20145301 赵嘉鑫 <网络对抗>Exp5 MSF基础应用 一 实验链接 渗透实验一:MS08_067渗透实验 渗透实验二:MS14_064渗透实验  (首用) 渗透实验三:Adobe ...

  9. 20145319 《网络渗透》web基础

    20145319 <网络渗透>web基础 实验要求 掌握网页编程的基本知识 html语法 javascript php 前端,后台,数据库之间如何建立连接 掌握数据库的使用 mysql的启 ...

  10. python函数总结

    1.函数是一种子程序.程序员使用函数来减少代码重复,并用于组织或模块化程序.一旦定义了函数,它可以从程序中的许多不同位置被多次调用.参数允许函数具有可更改的部分.函数定义中出现的参数称之为形参,函数调 ...