文章目录

  • 实现的效果
  • 一、创建 web service 项目
  • 二、测试类运行 web service 服务端
  • 三、IDEA 打包 web service 项目
  • 四、web service 项目部署到 Tomcat
  • 五、web service 客户端
  • 总结



实现的效果

  • 通过 IDEA 创建一个简单的 web service 项目
  • 用测试类运行这个 web service 项目
  • 通过 IDEA 把 web service 项目打成 war 包
  • web service 项目部署到 Tomcat
  • 访问 web service 服务页面
  • 编写一个 web service 客户端(生成 web service 服务代码)
  • 客户端调用 web service 接口

一、创建 web service 项目

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

idea微服务模块如何启动_xml

填写你的项目名字

idea微服务模块如何启动_intellij-idea_02

Finish 后创建一个空项目

右键项目包名,选择 Add Framework Support

idea微服务模块如何启动_前端_03

勾选 WebServices,选择 Download

idea微服务模块如何启动_xml_04

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

idea微服务模块如何启动_idea微服务模块如何启动_05

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

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

idea微服务模块如何启动_tomcat_06


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

}

sun-jaxws.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微服务模块如何启动_xml_07

三、IDEA 打包 web service 项目

注意上面代码中的 sun-jaxws.xml 文件,我在上面已经做了注释,url-pattern 指定的是部署后对外的接口

idea微服务模块如何启动_前端_08


配置项目的 Artifacts,先选 Web Application Exploded

idea微服务模块如何启动_intellij-idea_09


然后再选 Web Application Archive

idea微服务模块如何启动_前端_10

点击 IDEA 上面的 Build — Build Artifacts

idea微服务模块如何启动_tomcat_11


idea微服务模块如何启动_xml_12

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

idea微服务模块如何启动_idea微服务模块如何启动_13

四、web service 项目部署到 Tomcat

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

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

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

看到的页面也是一样

五、web service 客户端

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

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

创建一个空白项目:

idea微服务模块如何启动_tomcat_14

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

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

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

然后发现项目目录下自动生成了如下代码:

idea微服务模块如何启动_intellij-idea_15

编写客户端的测试类:

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 的接口:

idea微服务模块如何启动_intellij-idea_16