Java Web Services 教程

歡迎來到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服務。

  1. SOAP:SOAP代表簡單物件訪問協定。SOAP是一種基於XML的行業標準協定,用於設計和開發Web服務。由於它是基於XML的,因此與平台和語言無關。因此,我們的服務器可以基於JAVA,客戶端可以基於.NET,PHP等,反之亦然。
  2. REST:REST是一種用於開發Web服務的架構風格。近年來它變得越來越受歡迎,因為與SOAP相比,學習曲線較小。資源是Restful Web服務的核心概念,它們通過其URI進行唯一識別。

Java Web服務

Java提供了自己的API來創建SOAP和REST Web服務。

  1. JAX-WS:JAX-WS代表Java API for XML Web Services。JAX-WS是用於構建Web服務服務器和客戶端應用程序的基於XML的Java API。
  2. 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的文章。

  1. JAX-WS教程
  2. JAX-WS Web服務在Tomcat上的部署
  3. 使用Eclipse和Apache Axis的SOAP Web服務示例
  4. Apache Axis 2 Web服務教程

你好,世界 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 服務是多麼容易。但這還有更多,請參閱以下文章以了解更多。

  1. Restful Web Services
  2. RESTEasy 教程
  3. Jersey 教程

這裡是有關Java Web服務的簡短介紹,最後,如果你正在準備面試,請參考Web服務面試問題。參考資料:JAX-WS Oracle頁面JAX-RS Oracle頁面

Source:
https://www.digitalocean.com/community/tutorials/java-web-services-tutorial