Java Web服务教程

时间:2020-02-23 14:37:00  来源:igfitidea点击:

欢迎使用Java Web Services教程。
其中我们将学习Web服务,Web服务中的有用概念以及Java中用于创建Web服务的不同类型的API。

什么是网络服务

简而言之,可以通过网络访问的服务称为Web服务。
因此,它与Web应用程序有何不同,它们也是通过网络访问的服务。
很少有属性可以澄清这种差异。

  • Web应用程序供用户使用,并在具有人类可读格式的浏览器中访问,而Web服务则供应用程序访问XML,JSON等格式的数据。

  • Web应用程序始终使用HTTP/HTTPS协议,而传统的Web服务使用SOAP协议。
    最近,REST成为一种体系结构样式,并且几乎始终在HTTP/HTTPS协议上运行。

  • Web应用程序并非旨在提供可重用性,但这是Web服务的优势之一。
    单个Web服务可由不同类型的应用程序使用。

  • Web应用程序可以访问Web服务以访问某些数据或者执行某些任务,而Web服务则不能访问Web应用程序以获取一些数据。

  • Web应用程序能够维护用户会话,Web服务是无状态的。

我希望上述差异足以消除与Web应用程序和Web服务的任何混淆。
两者都是不同的概念,并且具有不同的用途。

Web服务类型

Web服务有两种类型。

  • SOAP:SOAP代表简单对象访问协议。
    SOAP是用于设计和开发Web服务的基于XML的行业标准协议。
    由于它基于XML,因此与平台和语言无关。
    因此,我们的服务器可以基于JAVA,客户端可以基于.NET,PHP等,反之亦然。

  • REST:REST是用于开发Web服务的体系结构样式。
    由于与SOAP相比,它的学习曲线较小,因此最近变得越来越流行。
    资源是Restful Web服务的核心概念,它们由其URI唯一标识。

Java Web服务

Java提供了自己的API来创建SOAP和REST Web服务。

  • JAX-WS:JAX-WS代表XML Web Services的Java API。
    JAX-WS是基于XML的Java API,用于构建Web服务服务器和客户端应用程序。

  • 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.theitroad.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网络服务教程。
以下是您应该阅读的一些文章,以更好地理解SOAP Web服务和JAX-WS。

  • JAX-WS教程
  • Tomcat上的JAX-WS Web服务部署
  • 使用Eclipse和Apache Axis的SOAP Web服务示例
  • Apache Axis 2 Web服务教程

Hello World JAX-RS应用程序

泽西岛是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>

现在,将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.theitroad.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.theitroad.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的最后一部分,返回的消息也会相应更改。