WebService JDK技术

Web Service——也叫XML Web Service WebService,是一种跨编程语言和跨操作系统平台的远程调用技术。
各个应用程序之间的交流就需要Web Service来作为相互交流的桥梁。
1.1. Web Service开发可以分两方面
 服务端开发:把公司内部系统的业务方法发布成Web Service服务,供远程合作单位和个人调用。
 客户端开发:调用别人发布的Web Service服务,大多数人从事的开发都属于这个方面。例如,调用天气预报Web Service服务。
1.2. WebService的开发手段
 使用JDK开发(1.6以上版本)
 使用Axis2框架开发(工作中使用)
1.3. WebService的工作调用原理
对客户端而言,我们给这个类WebService客户端API传递wsdl文件的url地址,这些API就会创建出底层的代理类,调用这些代理,就可以访问到webservice服务。代理类把客户端的方法调用变成soap格式的请求数据再通过HTTP协议发出去,并把接收到的soap数据变成返回值返回。对服务端而言,各类WebService框架的本质就是一个大大的Servlet,当远程调用客户端给它通过http协议发送过来soap格式的请求数据时,它分析这个数据,就知道要调用哪个java类的哪个方法,于是去查找或创建这个对象,并调用其方法,再把方法返回的结果包装成soap格式的数据,通过http响应消息回给客户端。

  1. JDK开发WebServrice
    在JDK1.6时,Oracle公司就将Web Service集入到了JDK,通过Endpoint类来实现。
    2.1. 开发WebService服务器端
    第一步:创建Java工程 ,创建相应的包(服务端)
    第二步:建一个接口Person,创建方法:
    /**
  • 定义SEI(WebService EndPoint Interface(终端))
    */
    @WebService //使用@WebService注解标注WebServiceI接口
    public interface WebServiceI{
    @WebMethod //使用WebMethod注解标注WebService接口中的方法
    public String say(String what);
    }

第三步:编写WebServiceI接口的实现类WebServiceImpl,使用@WebService注解标注实现类,并实现接口所有方法:
/**

  • SEI的具体实现
    */
    @WebService //使用@WebService注解标注WebServiceI接口的实现类
    public class PersonImpl implements WebServiceI{
    @Override
    public String say(String what){
    System.out.println(“服务端:”+what);
    return “正在说”+what;
    }
    }

第四步:写发布类WebServicePublish,使用Endponit(终端)类发布WebService
将eat()方法暴露出去,确保客户端可以访问eat()方法:
/**

  • 发布WebService
    */
    public class WebServicePublish{

    public static void main(String[] args){
    /**

  • 发布服务:

  • 通过Endpoint类提供的publish()方法发布WebService,

  • 发布时要保证使用的端口号没有被其他应用程序占用。

  • Endpoint类是端点类,用来标识网络地址。
    */
    String address = “http://172.20.10.5:6868/WS_Service/webService”;
    //IP地址是本机动态地址
    Endpoint.publish(address, new WebServiceImpl());
    System.out.println(“服务端发布WebService成功…”);
    }
    }
    运行测试类,即将编写好的WebService发布好了。
    WebService的访问URL是:http://172.20.10.5:6868/WS_Service/webService

第五步:使用Eclipse自带的工具测试服务端
MyEclipse集成了Web Service,在地球的小图标旁边。
在这里插入图片描述
打开后,如果想要看上面发布的,就在右上角找到WSDL page,点击后看右侧
输入http://172.20.10.5:6868/WS_Service/webService?wsdl,开发文件后发现是xml文件。
在这里插入图片描述
输入服务端的地址后,显示暴露出来的say()方法:
在这里插入图片描述
点击say()方法,在显示项中选择Add:
在这里插入图片描述
在下面的输入框中输入文字,Body处就显示结果。
在这里插入图片描述
在这里插入图片描述
2.2. 客户端(终端)访问WebService
借助JDK的wsimport.exe工具生成客户端代码,wsimport.exe工具位于JDK的bin目录下,如下图所示:
在这里插入图片描述
在cmd命令窗口执行下述命令生成客户端代码:
wsimport -keep url(url为wsdl文件的路径)
具体步骤:
第一步:创建终端工程,主要用来实现接收服务端的暴露。
第二步:找到客户端源代码路径,
在这里插入图片描述
在命令框中输入:
wsimport -keep http://172.20.10.5:6868/WS_Service/webService?wsdl
在这里插入图片描述
回车后会解析产生很多的文件,在客户端com/…下面
建议:在src中右击操作输入命令,让产生的文件都生成在src中。

第三步:创建Test.java测试类,在main方法中:
PersonImpService personImpService =new PersonImpService();
PersonImp personImp=personImpService.getPersonImpPort();
String str=personImp.eat(“米田共”);
System.out.println(str);
3. Web项目发布WebService
如果是Web项目,我们可以使用监听器或Servlet来发布WebService。

扫描二维码关注公众号,回复: 4653031 查看本文章

3.1. 使用ServletContextListener监听器发布WebService
/**

  • 用于发布WebService的监听器
    */
    //使用Servlet3.0提供的@WebListener注解将实现了ServletContextListener接口WebServicePublishListener类标注为一个Listener
    @WebListener
    public class WebServicePublishListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
    //WebService的发布地址
    String address = “http://192.168.1.100:8080/WS_Server/WebService”;
    //发布WebService,WebServiceImpl类是WebServie接口的具体实现类
    Endpoint.publish(address, new WebServiceImpl());
    System.out.println(“使用WebServicePublishListener发布webservice成功!”);
    }
    }

将Web应用部署到服务器运行时,在初始化Web应用上下文时,就会发布WebService了。
接着我们可以使用发布的URL地址访问WebService,如下图所示:
在这里插入图片描述
3.2. 使用Servlet发布WebService
/**

  • 用于发布WebService的Servlet
    */
    //使用Servlet3.0提供的@WebServlet注解将继承HttpServlet类的普通Java类标注为一个Servlet
    //将value属性设置为空字符串,这样WebServicePublishServlet就不提供对外访问的路径
    //loadOnStartup属性设置WebServicePublishServlet的初始化时机
    @WebServlet(value="", loadOnStartup=0)
    public class WebServicePublishServlet extends HttpServlet {

    /*

    • 在WebServicePublishServlet初始化时发布WebService
      */
      public void init() throws ServletException {
      //WebService的发布地址
      String address = “http://192.168.1.100:8888/WebService”;
      //发布WebService,WebServiceImpl类是WebServie接口的具体实现类
      Endpoint.publish(address , new WebServiceImpl());
      System.out.println(“使用WebServicePublishServlet发布webservice成功!”);
      }
      }

将Web应用部署到服务器运行时,在初始化WebServicePublishServlet时,就会发布WebService了。如下图所示:
在这里插入图片描述
接着我们可以使用发布的URL地址访问WebService,如下图所示:
在这里插入图片描述
关于发布WebService主要就是通过javax.xml.ws.Endpoint类提供的静态方法publish()进行发布,如果是普通的Java项目,那么可以专门写一个类用于发布WebService,如果是Web项目,那么可以使用ServletContextListener或者Servlet进行发布。

使用ServletContextListener进行发布:
public class InitListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent context) {

}  

@Override 
public void contextInitialized(ServletContextEvent context) {  
	// 上下文初始化执行  
	System.out.println("=======>[ServletContextListener]自动加载启动开始."); 
}  

}

然后在web.xml文件配置该监听器:

com.test.init.InitListener

猜你喜欢

转载自blog.csdn.net/weixin_42415245/article/details/84888171