Java Webサービスチュートリアル

ようこそ、Java Webサービスチュートリアルへ。ここでは、Webサービスについて学び、Webサービスの有用な概念、そしてJavaでWebサービスを作成するための異なるAPIについて学びます。

Webサービスとは何ですか

簡単に言えば、ネットワーク経由でアクセスできるサービスをWebサービスと呼びます。それでは、Webアプリケーションとはどう違うのでしょうか。Webアプリケーションもネットワーク経由でアクセスされるサービスです。この違いを明確にするいくつかの属性があります。

  • Webアプリケーションはユーザー向けであり、ブラウザで人間が読める形式でアクセスされることを意味しますが、WebサービスはXML、JSONなどの形式でデータにアクセスするために用意されています。
  • Webアプリケーションは常にHTTP/HTTPSプロトコルを使用しますが、従来のWebサービスはSOAPプロトコルを使用します。最近では、RESTが人気を集めており、これはアーキテクチャのスタイルであり、ほとんどの場合、HTTP/HTTPSプロトコル上で実行されます。
  • Webアプリケーションは再利用を目的としておらず、これがWebサービスの利点の一つです。1つの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サービスには2つの種類があります。

  1. SOAP:SOAPはSimple Object Access Protocolの略で、Webサービスの設計と開発のためのXMLベースの業界標準プロトコルです。XMLベースなので、プラットフォームや言語に依存しません。したがって、サーバーはJAVAベースで、クライアントは.NET、PHPなどである可能性があり、その逆もまた然りです。
  2. REST:RESTはWebサービスの開発のためのアーキテクチャルスタイルです。SOAPと比較して学習コストが低いため、最近人気があります。リソースはRestful Webサービスの中核概念であり、URIによって一意に識別されます。

Java Webサービス

JavaにはSOAPおよびRESTのWebサービスを作成するための独自のAPIが用意されています。

  1. JAX-WS:JAX-WSはJava API for XML Web Servicesの略で、Webサービスサーバーおよびクライアントアプリケーションを構築するためのXMLベースのJava APIです。
  2. JAX-RS:Java API for RESTful Web Services(JAX-RS)は、REST Webサービスを作成するためのJava APIです。JAX-RSはアノテーションを使用してWebサービスの開発と展開を簡素化します。

両方のAPIは標準のJDKインストールの一部であるため、それらを使用するためにはjarファイルを追加する必要はありません。 これらのAPIはどちらもアノテーションを非常に多用しています。

Hello World JAX-WSアプリケーション

非常にシンプルな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ウェブサービスが公開されます。 以下の画像は、このJAX-WS WebサービスをSOAP UIを介して呼び出す様子を示しています。これで、JAX-WS Webサービスの非常に基本的なチュートリアルが終わりました。 SOAPウェブサービスとJAX-WSの理解を深めるために読むべきいくつかの記事が以下にあります。

  1. JAX-WSチュートリアル
  2. TomcatへのJAX-WS Webサービスのデプロイ
  3. EclipseとApache Axisを使用したSOAPウェブサービスの例
  4. Apache Axis 2 Webサービスチュートリアル

Hello World JAX-RS アプリケーション

Jersey は JAX-RS API の参照実装であり、標準 JDK の一部ではないため、すべての必要な jar ファイルを含める必要があります。最良の方法は Maven ビルドを使用することです。したがって、単純な Dynamic web プロジェクトを作成し、次に Eclipse で 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>

次に、デプロイメント記述子 web.xml に Jersey サーブレットを追加してフロントコントローラーとして使用します。

<?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>

上記の 2 つの手順は初期設定に必要です。以下は、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 サービス
  2. RESTEasy チュートリアル
  3. Jersey チュートリアル

それはJava Webサービスの簡単な紹介です。最後に、もし面接の準備をしているなら、Webサービス インタビューの質問を rep参照してください。参考文献:JAX-WS Oracle ページJAX-RS Oracle ページ

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