实现的效果
一、创建 web service 项目
右键项目包名,选择 Add Framework Support
里面已经自动给我们创建了一个模板例子了,我们不管他的例子,删除掉,下面用我写的这个 demo
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;
}
}
<?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>
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 服务端
上面代码的 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
四、web service 项目部署到 Tomcat
启动 Tomcat,然后把这个 war 包放进去 /webapps 等待解压部署即可。
访问地址和刚才用测试类启动的连接是一样的: http://localhost:8080/webservice/hello
看到的页面也是一样
五、web service 客户端
我们已经完成 web service 的部署,也访问到了首页,那我们怎么调用刚才里面的 Hello 接口呢?
进去到 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进行投诉反馈,一经查实,立即删除!