歡迎來到Java Web Services教程。在這裡,我們將學習有關Web服務的相關概念,以及在Java中創建Web服務所用到的不同API。
什麼是Web服務
簡單來說,可以通過網絡訪問的服務稱為Web服務。那麼它與Web應用程序有何不同呢?它們也是可以通過網絡訪問的服務。有一些屬性可以澄清這一區別。
- Web應用程序是為用戶而設,可在瀏覽器中以人類可讀格式訪問,而Web服務則是為應用程序設計,以XML、JSON等格式訪問數據。
- Web應用程序始終使用HTTP/HTTPS協議,而傳統的Web服務使用SOAP協議。最近,REST正在變得流行,它是一種架構風格,幾乎始終運行在HTTP/HTTPS協議上。
- Web應用程序不適用於可重用性,而Web服務則是其好處之一。單個Web服務可以被不同類型的應用程序使用。
- Web應用程序可以訪問Web服務以訪問一些數據或執行一些任務,但Web服務無法訪問Web應用程序以獲取數據。
- Web應用程序能夠維護用戶會話,而Web服務是無狀態的。
I hope above differences are good enough to clear any confusion with web applications and web services. Both are different concepts and meant for different purpose.
Web服務的類型
有兩種類型的Web服務。
- SOAP:SOAP代表簡單物件訪問協定。SOAP是一種基於XML的行業標準協定,用於設計和開發Web服務。由於它是基於XML的,因此與平台和語言無關。因此,我們的服務器可以基於JAVA,客戶端可以基於.NET,PHP等,反之亦然。
- REST:REST是一種用於開發Web服務的架構風格。近年來它變得越來越受歡迎,因為與SOAP相比,學習曲線較小。資源是Restful Web服務的核心概念,它們通過其URI進行唯一識別。
Java Web服務
Java提供了自己的API來創建SOAP和REST Web服務。
- JAX-WS:JAX-WS代表Java API for XML Web Services。JAX-WS是用於構建Web服務服務器和客戶端應用程序的基於XML的Java API。
- JAX-RS:Java RESTful Web服務的Java API(JAX-RS)是用於創建REST Web服務的Java API。JAX-RS使用註釋來簡化Web服務的開發和部署。
這兩個API都是標準JDK安裝的一部分,因此我們無需添加任何jar文件來使用它們。這兩個API都大量使用註解。
Hello World JAX-WS Application
讓我們創建一個非常簡單的Hello World JAX-WS應用程序。TestService.java
package com.journaldev.jaxws.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Endpoint;
@WebService
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class TestService {
@WebMethod
public String sayHello(String msg){
return "Hello "+msg;
}
public static void main(String[] args){
Endpoint.publish("https://localhost:8888/testWS", new TestService());
}
}
就是這樣。運行此應用程序,我們的Hello World JAX-WS SOAP Web服務就會被發佈。下面的圖像顯示了通過SOAP UI調用此JAX-WS Web服務。 這就是一個非常基本的JAX-WS Web服務教程。以下是一些你應該閱讀以更好理解SOAP Web服務和JAX-WS的文章。
你好,世界 JAX-RS 應用程式
Jersey 是 JAX-RS API 的參考實現,它並不是標準 JDK 的一部分,因此我們必須包含所有必需的 jar 檔案。最佳方式是使用 Maven 架構建置,因此在 Eclipse 中建立一個簡單的動態 Web 專案,然後將其轉換為 Maven。以下是包含所需相依性的最終 pom.xml 檔案。
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>JAX-RS-HelloWorld</groupId>
<artifactId>JAX-RS-HelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.19</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
現在將 Jersey servlet 添加到我們的部署描述子 web.xml 中作為前端控制器。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>JAX-RS-HelloWorld</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.journaldev.jaxrs.service</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
上述兩個步驟是初始設定所需的,以下是我們的 Hello World JAX-RS 服務類別。
package com.journaldev.jaxrs.service;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@Path("/test")
public class TestService {
@GET
@Path("/hello/{msg}")
public String sayHello(@PathParam(value="msg") String msg){
return "Hello "+msg;
}
}
將其匯出為 WAR 檔案,然後像下圖所示在瀏覽器中訪問它。您可以更改 URL 的最後一部分,返回的訊息將相應地變化。您可以看到使用 JAX-RS API 創建 RESTful Web 服務是多麼容易。但這還有更多,請參閱以下文章以了解更多。
這裡是有關Java Web服務的簡短介紹,最後,如果你正在準備面試,請參考Web服務面試問題。參考資料:JAX-WS Oracle頁面,JAX-RS Oracle頁面。
Source:
https://www.digitalocean.com/community/tutorials/java-web-services-tutorial