前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webService接口服务端与客户端开发(入门级亲测可用)

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

作者头像
全栈程序员站长
发布2022-09-14 10:38:27
1.6K0
发布2022-09-14 10:38:27
举报
文章被收录于专栏:全栈程序员必看

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

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);

代码语言:javascript
复制
   } catch (Exception e)
	{
      
       e.printStackTrace();
   } 

} }

另外:如果是打成jar包,引入运行,记得引lib目录中的其他jar包;

这里写图片描述
这里写图片描述

还发现一种更为简短的测试调用代码:

代码语言:javascript
复制
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.cn/158022.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档