webService接口服务端与客户端开发(入门级亲测可用)

webService接口服务端与客户端开发(入门级亲测可用)webService接口服务端与客户端开发网上的有关webService的入门例子很多,但总是让新手云里雾里。看了本篇,如果对您有帮助,请随手一赞。。。经过尝试,发现以下内容:第一:webService服务端开发首先上图,一清二楚、以下weather包中有三种发布服务的方式;如果创建的是Java项目,Server类右键Java运行即可发布,但只能自己访问;如果想让别…

大家好,又见面了,我是你们的朋友全栈君。

webService接口服务端与客户端开发

网上的有关webService的入门例子很多,但总是让新手云里雾里。
看了本篇,如果对您有帮助,请随手一赞。。。
经过尝试,发现以下内容:
第一:webService服务端开发
首先上图,一清二楚、以下weather包中有三种发布服务的方式;
这里写图片描述
如果创建的是Java项目,Server类右键Java运行即可发布,但只能自己访问;
如果想让别人也访问到,创建javaweb项目,最后两个类,分别是监听器方式发布和servlet方式发布,项目上右键run on Server即可;
发布后运行client类可以在服务端测试;
Ps: ip 请自行修改成本机ip;

1.服务端测试类
package weather;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class client {

public static void main(String[] args) throws Exception {

URL url = new URL(“http://192.168.120.167:12345/weather”);
QName serviceName = new QName(“http://weather/”,“WeatherServiceImplService”);//wsdl命名空间、服务视图名称
Service service = Service.create(url,serviceName);//使用service创建服务视图
IWeatherService impl = service.getPort(IWeatherService.class);//从服务视图中得到portType对象
System.out.println(impl.query(“武汉”));
}
}
2接口类
package weather;
import javax.jws.WebService;
@WebService
public interface IWeatherService {

String query(String string);
}

3Java项目发布服务类(如果创建的是Java项目,可以用这个发布服务)
package weather;

import javax.xml.ws.Endpoint;

public class Server {
public static void main(String[] args) {//通过提供的地址可以访问wsdl说明书
Endpoint.publish(“http://192.168.120.167:12345/weather”, new WeatherServiceImpl());
System.out.println(“发布成功”);
}
}

4实现类
package weather;

import javax.jws.WebService;

@WebService(endpointInterface=“weather.IWeatherService”)
public class WeatherServiceImpl implements IWeatherService{

public String query(String name){

System.out.println(name);
String result = “天朗气清,惠风和畅!”;
return result;
}
}

5监听器发布服务类(如果是web项目,,可以用这个发布服务)
package weather;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.xml.ws.Endpoint;

@WebListener
public class WebServicePublishListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent sce) {

}
@Override
public void contextInitialized(ServletContextEvent sce) {

//WebService的发布地址
String address = “http://192.168.120.167:12345/weather”;
//发布WebService,WebServiceImpl类是WebServie接口的具体实现类
Endpoint.publish(address , new WeatherServiceImpl());
System.out.println(“使用WebServicePublishListener发布WeatherService成功!”);
}
}

6 Service发布服务类(如果是web项目,,可以用这个发布服务)
package weather;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.xml.ws.Endpoint;

//使用Servlet3.0提供的@WebServlet注解将继承HttpServlet类的普通Java类标注为一个Servlet
//将value属性设置为空字符串,这样WebServicePublishServlet就不提供对外访问的路径
//loadOnStartup属性设置WebServicePublishServlet的初始化时机
@WebServlet(value=””,loadOnStartup=0)
public class WebServicePublishServlet extends HttpServlet {
private static final long serialVersionUID = 6937616358729200286L;
/*
* @see javax.servlet.GenericServlet#init()
* 在WebServicePublishServlet初始化时发布WebService
*/
public void init() throws ServletException {

//WebService的发布地址
String address = “http://192.168.120.167:1234/weather”;
//发布WebService,WebServiceImpl类是WebServie接口的具体实现类
Endpoint.publish(address , new WeatherServiceImpl());
System.out.println(“使用WebServicePublishServlet发布WeatherServiceImpl成功!”);
} }
服务端发布成功后,很多人说浏览器访问http://192.168.120.167:12345/weather,会有结果,但我第一次尝试并没有成功,后面访问才成,不解;成功后如图:
这里写图片描述
但是访问http://192.168.120.167:12345/weather?wsdl还是成功的;
这里写图片描述
服务端发布webservice大同小异,在此不再赘述;
第二:webService客户端开发
客户端开发有意思了,网上好多的方法,经过各种尝试,以下是结果;
当然如果只是测试接口,使用soapUi测试也是可以的。使用简单,资源不好找。

分享云盘地址:链接: https://pan.baidu.com/s/1kWdnVgF 密码: qs6w
方法1:用eclipse自动生成代码
首先,创建一个web项目,然后右键新建web Service Client,粘贴wsdl链接,finish.
可以看到src下面出现了新的类,web-inf中lib目录下也引入了一些包;
新建TestWeather类测试webservice接口;
这里写图片描述
右键运行测试类(Java应用程序)方式运行即可,可以看到控制台的回应。
这里写图片描述
TestWeather 类
package weather;
public class TestWeather {

public static void main(String[] args) throws Exception {

// 注释掉的也是一种代码的书写,两个try任选其一;
// WeatherServiceImplService ws = new WeatherServiceImplServiceLocator();
// try
// {

// IWeatherService is = ws.getWeatherServiceImplPort();
// System.out.println(is.query(“郑州”));
// }catch(Exception e)
// {

// e.printStackTrace();
// }
try {

WeatherServiceImplServiceLocator service = new WeatherServiceImplServiceLocator();
java.net.URL url = new java.net.URL(“http://192.168.120.167:12345/weather?WSDL”);
WeatherServiceImplPortBindingStub stub = new WeatherServiceImplPortBindingStub(url, service);
String x2 = stub.query(“zhengzhou”);
System.out.println(x2);

   } catch (Exception e)
	{
      
       e.printStackTrace();
   } 

}
}

另外:如果是打成jar包,引入运行,记得引lib目录中的其他jar包;
这里写图片描述
还发现一种更为简短的测试调用代码:

import weather.IWeatherServiceProxy;//使用代理类实例化对象,调用webservice
public class Test {
	public static void main(String[] args) throws Exception {  	
		IWeatherServiceProxy IWeatherServiceProxy=new IWeatherServiceProxy();  //使用代理类实例化对象,调用webservice
      
        String tel=IWeatherServiceProxy.query("城市"); //要查询的城市
        System.out.println(tel);  
    }  
}

方法2:用 wsimport命令 自动生成代码
参照:http://blog.csdn.net/u011165335/article/details/51345224
这里写图片描述
进入dos的桌面:
方式1:wsimport http://192.168.120.167:12345/weather?WSDL
这种默认只会生成class,且会生成默认的包
方式2:生成源码,指定包和路径
wsimport -s ./ -p cn.aa http://192.168.120.167:12345/weather?WSDL

结果发现,两种方法生成的代码(类名都不同),并不一样;

这里写图片描述

于是我新建web项目,引入jar包,创建以下测试类:
import weather.IWeatherService;
import weather.WeatherServiceImplService;

public class TestWeather {

public static void main(String[] args) {

WeatherServiceImplService mobileCodeWs=new WeatherServiceImplService();
IWeatherService mobileCodeWSSoap=mobileCodeWs.getWeatherServiceImplPort();
String tel=mobileCodeWSSoap.query(“183735xxxx”);
System.out.println(tel);
}
}
这样也可以成功访问。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158022.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql 如何修改用户密码_如何更改MySQL用户密码

    mysql 如何修改用户密码_如何更改MySQL用户密码在本教程中,我们将向您展示如何更改MySQL用户密码。这些说明应适用于任何现代Linux发行版,例如Ubuntu18.04和CentOS7。先决条件根据系统上运行的MySQL或MariaDB服务器版本,您将需要使用不同的命令来更改用户密码。您可以通过发出以下命令来找到数据库服务器版本:mysql–version如果您的系统中安装了MySQL,则输出将类似于以下内容:mysqlVer14…

    2022年6月17日
    37
  • 基本知识 100136

    基本知识 100136基本知识100136单选题A11.疑为多囊卵巢综合征,行超声检查的最佳时间是pcos超声检查在月经周期或黄体酮撤退后出血的3~5日进行,显示卵巢体积增大,双侧卵巢均有ge;12个直径2~9mm的小卵泡,即卵巢多囊改变。答案:(D)A:月经期B:月经来潮6小时内C:月经前数日D:月经周期的3~5日E:排卵期单选题A12.关于萎缩性阴道炎,叙述正确的是答案:(C)A:萎缩性阴道炎仅见于绝经后女性B:萎缩性阴道炎阴道pH

    2022年9月17日
    2
  • Oracle保留两位小数_java中怎么保留小数点后两位

    Oracle保留两位小数_java中怎么保留小数点后两位在最近的项目开发中,有个业务需求是界面显示的数字需要保留两位小数,目前我想到的解决方法有两种:(1)在写SQL的时候,直接保留两位小数(2)在java代码里面将查询出来的数进行格式化处理,保留两位小数先说第一种方案:在SQL中的处理我使用的oracle数据库,所以有3个函数可以选择,分别是:(1)ROUND(A/B,2)ROUND()函数是会将计算结果进行四舍五入的,如果所需

    2022年9月24日
    3
  • CSSS选择器总结[通俗易懂]

    CSSS选择器总结[通俗易懂]title:CSSS选择器总结date:2018073020:11:07tags:css在css的学习中有一个很容易让人混乱的就是css选择器,因为选择器有很多种,而且在使用的时候有

    2022年8月6日
    6
  • redis过期删除机制(redis过期策略和删除策略)

    在Redis中,内存的大小是有限的,所以为了防止内存饱和,需要实现某种键淘汰策略。主要有两种方法,一种是当Redis内存不足时所采用的内存释放策略。另一种是对过期键进行删除的策略,也可以在某种程度上释放内存。1、内存释放的策略Redis中有专门释放内存的函数:freeMmoryIfNeeded。每当执行一个命令的时候,就会调用该函数来检测内存是否够用。如果已用内存大于最大内存限制,它就会进行内存释…

    2022年4月17日
    74
  • Head First Java(中文版)

    Head First Java(中文版)网站更多书籍点击进入>>CiCi岛下载电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍电子书下载(皮皮云盘-点击“普通下载”)购买正版封页编辑推荐★第14届Jolt大奖的参赛图书。  ★《HeadFirstJava》使纸质图书成为了你所见过的*接近GUI的事物,使学习Java成为一种风尚。  ★Java技术无所不在——如果…

    2022年7月7日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号