REST代表“代表性状态转移”,由Roy Fielding于2000年在其论文“建筑风格和基于网络的软件体系结构设计”中首次提出。

REST是一种建筑风格。 HTTP是一种协议,其中包含一组REST体系结构约束。

REST基础

  • REST中的所有内容都被视为资源。
  • 每个资源都由URI标识。
  • 使用统一的接口。 使用POST,GET,PUT,DELETE操作处理资源,这些操作类似于创建,读取,更新和删除(CRUD)操作。
  • 无国籍。 每个请求都是一个独立的请求。 从客户端到服务器的每个请求必须包含理解该请求所需的所有信息。
  • 通信通过表示进行。 例如XML,JSON

RESTful Web服务

RESTful Web Services因其简单性而被Web上的大型服务提供商所接受,作为基于SOAP的Web Services的替代方案。 这篇文章将演示如何使用扩展JAX-RS API的Jersey框架创建RESTful Web服务和客户端。 使用Eclipse IDE和Java SE 6完成了示例。

  • 在Eclipse中,创建一个名为“ RESTfulWS”的新动态Web项目。

  • 从此处下载Jersey zip捆绑包。 这些示例中使用的Jersey版本是1.17.1。 解压缩后,将有一个名为“ jersey-archive-1.17.1”的目录。 在其中找到lib目录。 从那里复制以下jar,并将其粘贴到项目中的WEB-INF-> lib文件夹中。 完成此操作后,也将这些jar添加到项目构建路径中。

    1. asm-3.1.jar
    2. jersey-client-1.17.1.jar
    3. jersey-core-1.17.1.jar
    4. jersey-server-1.17.1.jar
    5. jersey-servlet-1.17.1.jar
    6. jsr311-api-1.1.1.jar

  • 在您的项目中,在Java Resources-> src内创建一个名为“ com.eviac.blog.restws”的新包。 在其中创建一个新的Java类,称为“ UserInfo”。 还将给定的web.xml文件包含在WEB-INF文件夹中。

UserInfo.java

package com.eviac.blog.restws;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;/*** * @author pavithra* */// @Path here defines class level path. Identifies the URI path that
// a resource class will serve requests for.
@Path("UserInfoService")
public class UserInfo {// @GET here defines, this method will method will process HTTP GET// requests.@GET// @Path here defines method level path. Identifies the URI path that a// resource class method will serve requests for.@Path("/name/{i}")// @Produces here defines the media type(s) that the methods// of a resource class can produce.@Produces(MediaType.TEXT_XML)// @PathParam injects the value of URI parameter that defined in @Path// expression, into the method.public String userName(@PathParam("i") String i) {String name = i;return "<User>" + "<Name>" + name + "</Name>" + "</User>";}@GET @Path("/age/{j}") @Produces(MediaType.TEXT_XML)public String userAge(@PathParam("j") int j) {int age = j;return "<User>" + "<Age>" + age + "</Age>" + "</User>";}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>RESTfulWS</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.eviac.blog.restws</param-value>  </init-param>  <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>  <servlet-name>Jersey REST Service</servlet-name>  <url-pattern>/rest/*</url-pattern>  </servlet-mapping>
</web-app>
  • 要运行该项目,请右键单击它,然后单击运行方式->在服务器上运行。
  • 在浏览器中执行以下URL,您将看到输出。
    http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra

输出

  • 创建一个名为“ com.eviac.blog.restclient”的程序包。 在其中创建一个名为“ UserInfoClient”的Java类。

UserInfoClient.java

package com.eviac.blog.restclient;import javax.ws.rs.core.MediaType;import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;/*** * @author pavithra* */
public class UserInfoClient {public static final String BASE_URI = "http://localhost:8080/RESTfulWS";public static final String PATH_NAME = "/UserInfoService/name/";public static final String PATH_AGE = "/UserInfoService/age/";public static void main(String[] args) {String name = "Pavithra";int age = 25;ClientConfig config = new DefaultClientConfig();Client client = Client.create(config);WebResource resource = client.resource(BASE_URI);WebResource nameResource = resource.path("rest").path(PATH_NAME + name);System.out.println("Client Response \n"+ getClientResponse(nameResource));System.out.println("Response \n" + getResponse(nameResource) + "\n\n");WebResource ageResource = resource.path("rest").path(PATH_AGE + age);System.out.println("Client Response \n"+ getClientResponse(ageResource));System.out.println("Response \n" + getResponse(ageResource));}/*** Returns client response.* e.g : * GET http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra * returned a response status of 200 OK** @param service* @return*/private static String getClientResponse(WebResource resource) {return resource.accept(MediaType.TEXT_XML).get(ClientResponse.class).toString();}/*** Returns the response as XML* e.g : <User><Name>Pavithra</Name></User> * * @param service* @return*/private static String getResponse(WebResource resource) {return resource.accept(MediaType.TEXT_XML).get(String.class);}
}
  • 运行客户端程序后,将获得以下输出。
Client Response
GET http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra returned a response status of 200 OK
Response
<User><Name>Pavithra</Name></User>Client Response
GET http://localhost:8080/RESTfulWS/rest/UserInfoService/age/25 returned a response status of 200 OK
Response
<User><Age>25</Age></User>

请享用!

参考: EVIAC博客上的JCG合作伙伴 Pavithra Siriwardena 提供的Java RESTful Web服务 。

翻译自: https://www.javacodegeeks.com/2013/11/restful-web-services-with-java.html

使用Java的RESTful Web服务相关推荐

  1. RESTful Web 服务 - Java (JAX-RS)

    JAX-RS 表示用于 RESTful Web 服务的 Java API.JAX-RS 是一种基于 Java 的编程语言 API 以及为创建 RESTful Web 服务提供支持的规范.2.0 版本发 ...

  2. netbeans连接数据库_NetBeans Java EE技巧3:数据库中的RESTful Web服务

    netbeans连接数据库 许多现代的Web应用程序正朝着使用HTTP使用无状态通信的方向发展. REST(表示状态转移)体系结构样式通常用于设计网络应用程序,而使用Java EE 7,很容易开发用于 ...

  3. 使用Spring开发Java RESTful Web服务的7个理由

    REST现在已成为开发Web服务的标准方法,涉及Java时,可以使用许多框架和库,例如JAX-RS,Restlet,Jersey,RESTEasy,Apache CFX等,但是我鼓励Java开发人员使 ...

  4. NetBeans Java EE技巧3:数据库中的RESTful Web服务

    许多现代的Web应用程序正朝着使用HTTP使用无状态通信的方向发展. REST(代表性状态转移)体系结构样式通常用于设计网络应用程序,而使用Java EE 7,很容易开发用于数据库通信的RESTful ...

  5. java restful项目打包_构建入门Restful Web服务

    创建资源类 假设你已经设置了项目和构建系统,你可以创建Web服务. 通过考虑服务交互来开始这个过程. 该服务将处理GET请求/greeting,可选地使用name查询字符串中的参数.该GET请求应该返 ...

  6. restful api_将Spring MVC RESTful Web服务迁移到Spring 4

    restful api 1引言 Spring 4为MVC应用程序带来了一些改进. 在这篇文章中,我将重点介绍宁静的Web服务,并通过采用Spring 3.2实现的项目并将其升级到Spring 4来尝试 ...

  7. 构建 RESTful Web 服务

    from: https://www.ibm.com/developerworks/cn/education/java/j-rest/j-rest.html 开始之前 关于本教程 REST 是一种思维方 ...

  8. RESTful Web 服务 - 无状态

    根据 REST 架构,一个 RESTful Web 服务不应该在服务器上保持客户端状态.这种约束被称为无状态.客户端的职责是传递其上下文给服务器,然后服务器存储这个上下文以处理客户端的请求.比如,由服 ...

  9. RESTful Web 服务 - 方法

    正如目前为止我们所讨论的,RESTful Web 服务大量使用 HTTP 动词确定要对指定资源进行的操作.下面的表格演示了常用 HTTP 动词的例子. 编号 HTTP 方法,URI 和操作 1 GET ...

最新文章

  1. javabean简介
  2. 更换jdk Error:could not open '...jvm.cfg'解决方法
  3. linux中pthread_kill函数详解
  4. 【cs231n作业笔记】一:KNN分类器
  5. android 字体描边实现,android文字描边功能的实现
  6. maven build时报错Failed to execute goal org.apache.maven.plugins......
  7. 买下个月的iPhone新机要花多少钱?
  8. ASP.NET开发框架之HIPPO技术内幕(三)--数据库连接
  9. 【J2EE】【1.HelloWorld】J2EE基础(jsp,servlet,tomcat,eclipse)
  10. RadASM配色方案工具fix
  11. Python掷骰子游戏
  12. 深度理解 RGMII (包含Linux和realtek)
  13. 【机器学习】AI去马赛克工具(图像修复)
  14. 为什么阿里,腾讯,百度和京东都是在开曼岛注册的?
  15. 我从外包公司辞职了!
  16. QQ代替;teamviewer检测为商业用途 5分钟后关闭解决方法
  17. 【初创期】企业的安全建设之路到底有多难?
  18. Kafka设计原理——consumer rebalance概览及过程
  19. 有关《家》的经典歌曲_大家,给我推荐几首歌吧?
  20. copy() 与 clone() 的区别

热门文章

  1. Mysql8.0可以使用解压版 这个比较快 好像现在都是解压版了
  2. oxyen eclipse 启动 报错 se启动提示javaw.exe in your current PATH、No java virtual machine
  3. React 相关的优秀资源
  4. maven项目不编译xml文件
  5. spring boot 入门荔枝
  6. java 8 stream_Java 8 Stream示例
  7. jdk类加载器执行步骤_[JDK 11] jcmd中的类加载器层次结构详细信息
  8. red hat 4.1.2_安装Red Hat Container Development Kit 2.2版本
  9. java分割句子_关于Java的一些句子
  10. javaee编程题_在JavaEE中使用CDI的简单面向方面的编程(AOP)