IDEA創(chuàng)建web service項(xiàng)目并打包部署到Tomcat
實(shí)現(xiàn)的效果
- 通過(guò) IDEA 創(chuàng)建一個(gè)簡(jiǎn)單的 web service 項(xiàng)目
- 用測(cè)試類運(yùn)行這個(gè) web service 項(xiàng)目
- 通過(guò) IDEA 把 web service 項(xiàng)目打成 war 包
- web service 項(xiàng)目部署到 Tomcat
- 訪問(wèn) web service 服務(wù)頁(yè)面
- 編寫一個(gè) web service 客戶端(生成 web service 服務(wù)代碼)
- 客戶端調(diào)用 web service 接口
一、創(chuàng)建 web service 項(xiàng)目
IDEA 創(chuàng)建項(xiàng)目,選擇 Java 項(xiàng)目,Next

填寫你的項(xiàng)目名字

Finish 后創(chuàng)建一個(gè)空項(xiàng)目
右鍵項(xiàng)目包名,選擇 Add Framework Support

勾選 WebServices,選擇 Download

等待一會(huì),項(xiàng)目就變成這樣,lib 下就會(huì)有需要的包

里面已經(jīng)自動(dòng)給我們創(chuàng)建了一個(gè)模板例子了,我們不管他的例子,刪除掉,下面用我寫的這個(gè) demo
我的 demo 項(xiàng)目很簡(jiǎn)單,只有這幾個(gè)文件

Hello 類代碼:
package service;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService()
public class Hello {
// 對(duì)外提供的接口 1
@WebMethod
public String sayHello(String from) {
String result = "李啟業(yè) " + from;
System.out.println("接口被調(diào)用啦");
return result;
}
// 對(duì)外提供的接口 2
@WebMethod
public String test(String from) {
String result = "測(cè)試接口 " + from;
System.out.println("接口被調(diào)用啦");
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 必須對(duì)上你寫的帶@WebService的類的路徑 -->
<!-- url-pattern 指定的就是這個(gè) web service 的接口地址 -->
<!-- 例如:這個(gè)項(xiàng)目最終打包成 webservice.war,訪問(wèn)地址就是 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 ,這個(gè)文件好像沒(méi)什么用,它是創(chuàng)建 web service 項(xiàng)目自帶的,我沒(méi)有去修改它 -->
<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 用來(lái)測(cè)試運(yùn)行 web service 服務(wù)的
* @date 2023/2/21
*/
public class TestServer {
public static void main(String[] args) {
Object implementor = new Hello();
// 這個(gè)地址在這里測(cè)試用什么都可以,只是我想要?jiǎng)偤脤?duì)上等下用tomcat部署的連接
String address = "http://localhost:8080/webservice/hello";
Endpoint.publish(address, implementor);
}
}到這里,web service 項(xiàng)目的服務(wù)端就開(kāi)發(fā)好了!
二、測(cè)試類運(yùn)行 web service 服務(wù)端
上面代碼的 TestServer 就是我們的測(cè)試類,直接運(yùn)行它
訪問(wèn)連接:http://localhost:8080/webservice/hello
看到下面的頁(yè)面,證明 web service 項(xiàng)目啟動(dòng)成功:

三、IDEA 打包 web service 項(xiàng)目
注意上面代碼中的 sun-jaxws.xml 文件,我在上面已經(jīng)做了注釋,url-pattern 指定的是部署后對(duì)外的接口

配置項(xiàng)目的 Artifacts,先選 Web Application Exploded

然后再選 Web Application Archive

點(diǎn)擊 IDEA 上面的 Build — Build Artifacts


生成 out 目錄,里面已經(jīng)有打好的 war 包了

四、web service 項(xiàng)目部署到 Tomcat
上面我們已經(jīng)打包好了 war,要部署到 Tomcat
啟動(dòng) Tomcat,然后把這個(gè) war 包放進(jìn)去 /webapps 等待解壓部署即可。
訪問(wèn)地址和剛才用測(cè)試類啟動(dòng)的連接是一樣的: http://localhost:8080/webservice/hello
看到的頁(yè)面也是一樣
五、web service 客戶端
我們已經(jīng)完成 web service 的部署,也訪問(wèn)到了首頁(yè),那我們?cè)趺凑{(diào)用剛才里面的 Hello 接口呢?
我們通過(guò)編寫一個(gè)java程序作為客戶端,去調(diào)用剛才的接口!
創(chuàng)建一個(gè)空白項(xiàng)目:

進(jìn)去到 liqiye 目錄,打開(kāi)cmd,用 jdk 提供的命令,連接目標(biāo) web service 服務(wù)生成對(duì)應(yīng)的調(diào)用代碼
wsimport -s . http://localhost:8080/webservice/hello?wsdl
注意:web service 服務(wù)地址后面必須帶上 ?wsdl
然后發(fā)現(xiàn)項(xiàng)目目錄下自動(dòng)生成了如下代碼:

編寫客戶端的測(cè)試類:
package com.liqiye.client;
import service.HelloService;
import service.Hello;
public class TestClient {
public static void main(String[] args) throws Exception {
//構(gòu)建服務(wù)視圖對(duì)象(從service標(biāo)簽name屬性獲?。?
HelloService service = new HelloService();
//獲取服務(wù)的實(shí)現(xiàn)類(從portType的name屬性獲取
Hello hello = service.getPort(Hello.class);
//調(diào)用方法(portType下的operation屬性獲取
String info = hello.sayHello("你好");
System.out.println("調(diào)用服務(wù)端接口方法結(jié)果是:"+info);
String info2 = hello.test("你好");
System.out.println("調(diào)用服務(wù)端接口方法結(jié)果是:"+info2);
}
}執(zhí)行這個(gè)測(cè)試類,看到已經(jīng)成功調(diào)用 web service 的接口:

總結(jié)
到此這篇關(guān)于IDEA創(chuàng)建web service項(xiàng)目并打包部署到Tomcat的文章就介紹到這了,更多相關(guān)IDEA創(chuàng)建web service內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入分析Tomcat無(wú)響應(yīng)問(wèn)題及解決方法
Tomcat是Apache 軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun 和其他一些公司及個(gè)人共同開(kāi)發(fā)而成,通常我們會(huì)用它來(lái)運(yùn)行java了,下文小編來(lái)為各位介紹Tomcat無(wú)響應(yīng)問(wèn)題解決辦法2016-05-05
如何在IntelliJ IDEA 2018上配置Tomcat并運(yùn)行第一個(gè)JavaWeb項(xiàng)目
這篇文章主要介紹了在IntelliJ IDEA 2018上配置Tomcat并運(yùn)行第一個(gè)JavaWeb項(xiàng)目,需要的朋友可以參考下2020-09-09
解決運(yùn)行Tomcat之后仍然出現(xiàn)404的問(wèn)題
這篇文章主要介紹了解決運(yùn)行Tomcat之后仍然出現(xiàn)404的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
tomcat使用問(wèn)題之安裝后無(wú)法訪問(wèn)localhost:8080解決
當(dāng)Tomcat無(wú)法訪問(wèn)localhost:8080時(shí),可能是由于未啟動(dòng)、環(huán)境變量未配置、端口號(hào)占用或版本問(wèn)題,這篇文章主要介紹了tomcat使用問(wèn)題之安裝后無(wú)法訪問(wèn)localhost:8080解決的相關(guān)資料,需要的朋友可以參考下2024-10-10
詳解springboot-修改內(nèi)置tomcat版本
這篇文章主要介紹了springboot-修改內(nèi)置tomcat版本的相關(guān)資料,希望通過(guò)本文大家能掌握這樣的方法,需要的朋友可以參考下2017-08-08
startup.bat啟動(dòng)Tomcat閃退問(wèn)題原因及解決
本文主要介紹了startup.bat啟動(dòng)Tomcat閃退問(wèn)題原因及解決,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04

