欢迎来到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服务。
- 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:用于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 的文章。
- JAX-WS 教程
- 在 Tomcat 上部署 JAX-WS Web 服务
- 使用 Eclipse 和 Apache Axis 的 SOAP Web 服务示例
- 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 服务是多么容易。但是,还有更多内容可供学习,请参阅以下文章。
这就是关于 Java Web 服务 的简要介绍了,最后,如果你正在准备面试,那么可以参考 Web 服务面试问题。参考资料:JAX-WS Oracle 页面,JAX-RS Oracle 页面。
Source:
https://www.digitalocean.com/community/tutorials/java-web-services-tutorial