实现效果


一、创建 web service 项目

IDEA 创建项目选择 Java 项目,Next

在这里插入图片描述

填写你的项目名字

在这里插入图片描述

Finish创建一个空项目

右键项目包名选择 Add Framework Support

在这里插入图片描述

勾选 WebServices选择 Download

在这里插入图片描述

等待一会,项目就变成这样,lib 下就会有需要的包

在这里插入图片描述

里面已经自动我们创建一个模板例子了,我们不管他的例子删除掉,下面用我写的这个 demo

我的 demo 项目很简单,只有这几个文件

在这里插入图片描述
Hello代码

package service;
import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService()
public class Hello {

  // 对外提供的接口 1
  @WebMethod
  public String sayHello(String from) {
    String result = "李启业 " + from;
    System.out.println("接口调用啦");
    return result;
  }

  // 对外提供的接口 2
  @WebMethod
  public String test(String from) {
    String result = "测试接口 " + from;
    System.out.println("接口调用啦");
    return result;
  }

}

sunjaxws.xml

<?xml version="1.0" encoding="UTF-8"?>

<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>

    <!-- 注意这里: -->
    <!-- implementation 必须对上你写的带@WebService的类的路径 -->
    <!-- url-pattern 指定就是这个 web service 的接口地址 -->
    <!-- 例如这个项目最终打包webservice.war访问地址就是 http://localhost:8080/webservice/hello -->

    <endpoint
            name="Hello"
            implementation="service.Hello"
            url-pattern="/hello"/>

</endpoints>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 如果用 tomcat 直接部署 web service ,这个文件好像没什么用,它是创建 web service 项目自带的,我没有修改它 -->

    <listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
    </listener>
    <servlet>
        <description>JAX-WS endpoint</description>
        <display-name>WSServlet</display-name>
        <servlet-name>WSServlet</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>WSServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
</web-app>

TestServer 类代码

package service.test;

import service.Hello;

import javax.xml.ws.Endpoint;

/**
 * @author liqiye
 * @description 用来测试运行 web service 服务的
 * @date 2023/2/21
 */
public class TestServer {

    public static void main(String[] args) {
        Object implementor = new Hello();
        // 这个地址在这里测试什么可以,只是我想要刚好对上等下用tomcat部署连接
        String address = "http://localhost:8080/webservice/hello";
        Endpoint.publish(address, implementor);
    }

}

这里,web service 项目的服务端开发好了!

二、测试类运行 web service 服务端

上面代码的 TestServer 就是我们测试类,直接运行它

访问连接http://localhost:8080/webservice/hello

看到下面的页面证明 web service 项目启动成功
在这里插入图片描述

三、IDEA 打包 web service 项目

注意上面代码中的 sun-jaxws.xml 文件,我在上面已经做了注释urlpattern 指定的是部署后对外的接口
在这里插入图片描述
配置项目的 Artifacts,先选 Web Application Exploded
在这里插入图片描述
然后再选 Web Application Archive
在这里插入图片描述

点击 IDEA 上面的 Build — Build Artifacts
在这里插入图片描述
在这里插入图片描述

生成 out 目录里面已经有打好的 war 包了

在这里插入图片描述

四、web service 项目部署到 Tomcat

上面我们已经打包好了 war,要部署到 Tomcat

启动 Tomcat然后这个 war 包放进去 /webapps 等待解压部署即可

访问地址和刚才用测试启动连接是一样的: http://localhost:8080/webservice/hello

看到的页面也是一样

五、web service 客户端

我们已经完成 web service 的部署,也访问到了首页,那我们怎么调用刚才里面的 Hello 接口呢?

我们通过编写一个java程序作为客户端,去调用刚才的接口!

创建一个空白项目:
在这里插入图片描述

进去到 liqiye 目录打开cmd,用 jdk 提供的命令,连接目标 web service 服务生成对应的调用代码

wsimport -s . http://localhost:8080/webservice/hello?wsdl

注意:web service 服务地址后面必须带上 ?wsdl

然后发现项目目录下自动生成如下代码
在这里插入图片描述

编写客户端测试类:

package com.liqiye.client;

import service.HelloService;
import service.Hello;

public class TestClient {
    public static void main(String[] args) throws Exception {
        //构建服务视图对象(从service标签name属性获取
        HelloService service = new HelloService();
        //获取服务的实现类(从portType的name属性获取
        Hello hello = service.getPort(Hello.class);
        //调用方法(portType下的operation属性获取
        String info = hello.sayHello("你好");
        System.out.println("调用服务端接口方法结果是:"+info);

        String info2 = hello.test("你好");
        System.out.println("调用服务端接口方法结果是:"+info2);
    }
}

执行这个测试类,看到已经成功调用 web service 的接口:

在这里插入图片描述


总结

欢迎指出我的错误

原文地址:https://blog.csdn.net/weixin_42132143/article/details/129143337

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47370.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

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