Java Web Services 教程

欢迎来到Java Web服务教程。在这里,我们将学习关于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:用于RESTful Web服务的Java API(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 web 服务就会被发布。下面的图像显示了通过 SOAP UI 调用此 JAX-WS web 服务。 这就是关于 JAX-WS web 服务的非常基本的教程。以下是一些你应该阅读以更好理解 SOAP web 服务和 JAX-WS 的文章。

  1. JAX-WS 教程
  2. 在 Tomcat 上部署 JAX-WS Web 服务
  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 Tutorial
  3. Jersey Tutorial

这就是关于 Java Web 服务 的简要介绍了,最后,如果你正在准备面试,那么可以参考 Web 服务面试问题。参考资料:JAX-WS Oracle 页面JAX-RS Oracle 页面

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