IDEA 开发一个简单的 web service 项目,并打包部署到 Tomcat
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
实现的效果
-
通过 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
填写你的项目名字
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;
}
}
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 打包 web service 项目
注意上面代码中的 sun-jaxws.xml 文件我在上面已经做了注释url-pattern 指定的是部署后对外的接口
配置项目的 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 的接口
总结
欢迎指出我的错误