Java Web服务教程
欢迎使用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的最后一部分,返回的消息也会相应更改。