使用Java的RESTful Web服务

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项目。

2013年11月7日的屏幕截图17-06-05

    • 从此处下载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

2013-11-08 02-54-15的屏幕截图

2013-11-07 17-17-36的屏幕截图

    • 在您的项目中,在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

2013-11-08 02-04-07的屏幕截图

输出

2013-11-08 03-09-57的屏幕截图

    • 创建一个名为“ 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 基础应用程序,android应用程序基本实现(基础篇).ppt

《android应用程序基本实现(基础篇).ppt》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《android应用程序基本实现(基础篇).ppt(22页珍藏版)》请在人人文库网上搜索。1、Android应用程序基本实现,复杂的应用,上节课&#xff0c;我们实现了一个基本的android的应用程序…

windows npm安装webpack

Webpack: Webpack 是一个前端资源加载/打包工具。 它将根据模块的依赖关系进行静态分析&#xff0c;然后将这些模块按照指定的规则生成对应的静态资源。 参考下图&#xff1a; 安装Webpack: 1.首先需要安装node.js&#xff08;npm&#xff09; 下载地址&#xff1a;node.js dow…

ThreadLocal如何实现?

这是我上周的帖子的后续文章&#xff0c;在那篇文章中我解释了ThreadLocal用法的动机 。 从帖子中我们可以回想起&#xff0c;如果您希望每个线程都有一个独立初始化的变量副本&#xff0c;则ThreadLocal确实是一个很酷的概念。 现在&#xff0c;好奇的人可能已经开始问“我如何…

WPFの操作文件浏览框几种方式

WPFの操作文件浏览框几种方式 原文:WPFの操作文件浏览框几种方式方式1&#xff1a; 使用win32控件OpenFileDialog Microsoft.Win32.OpenFileDialog ofd new Microsoft.Win32.OpenFileDialog(); ofd.DefaultExt ".xml"; ofd.Filter "xml file|*.xml"; if…

为什么你应该尝试@reach/router

最近react-router的一个作者另外写了一个类react-router的组件 reach/router&#xff0c;尝试后感觉太棒了。如果你的项目只是web端的话我认为可以把你的react-router换掉了。下面是我到目前看到的所有非常好的点。 小&#xff0c;就4kb,压缩后比react-router小40kb左右。 更少…

android 浏览器 div穿透,解决IE 上重叠div 对 mouseover 事件的穿透方法之一

解决IE 下重叠div 对 mouseover 事件的穿透方法之一? ? ? ? 历经一天半的时间&#xff0c;我这前端的白痴终于想到了一个解决IE 下重叠div ?对 mouseover 事件的穿透方法。??现象&#xff1a; 两个并列关系的Div(没有父子关系)&#xff0c;但是两个Div在位置上面有重叠&…

类加载器工作机制

类加载器工作机制&#xff1a;1.装载&#xff1a;将Java二进制代码导入jvm中&#xff0c;生成Class文件。2.连接&#xff1a;a&#xff09;校验&#xff1a;检查载入Class文件数据的正确性 b&#xff09;准备&#xff1a;给类的静态变量分配存储空间 c&#xff09;解析&#xf…

webviewjavascriptbridge android ios,js与ios交互使用WebViewJavascriptBridge如何写多个函数

//js与webview交互初始化function setupWebViewJavascriptBridge(callback) {if (window.WebViewJavascriptBridge) {return callback(WebViewJavascriptBridge);}if (window.WVJBCallbacks) {return window.WVJBCallbacks.push(callback);}window.WVJBCallbacks [callback];v…

JavaFX中的塔防

我想长时间使用我的游戏引擎来编写《塔防》游戏&#xff0c;但是由于另一个小组努力创建JavaFX《塔防》游戏&#xff0c;所以我认为我宁愿创建另一款游戏。 从邮件列表中&#xff0c;我了解到不再开发其他游戏。 因此&#xff0c;我决定尝试一下。 塔防是一款非常适合基于图块…

CSS pointer-events属性的使用

楔子 在前端的开发中&#xff0c;我们都是直接与用户接触&#xff0c;应该尽量让用户感到操作畅快愉悦&#xff0c;获得类似native的感觉。其中动画是最常用的方法。 这里的需求是&#xff0c;弹层的设计&#xff0c;这个弹层希望可以像 native 上的弹层一样&#xff0c;点击…

海思NB-IOT的SDK看门狗的使用

1. 看门狗需要喂狗&#xff0c;如果自己写的任务一直运行&#xff0c;那么空闲任务无法运行会导致看门狗复位&#xff0c;来看下看门狗的机制&#xff0c;首先系统启动的时候创建了空闲任务 在这个函数里面void vTaskStartScheduler( void )创建了下面的空闲任务 xReturn xTas…

分布式Session框架

分布式Session框架 配置服务器&#xff0c;Zookeeper集群管理服务器可以统一管理所有服务器的配置文件共享这些Session存储在一个分布式缓存中&#xff0c;可以随时写入和读取&#xff0c;而且性能要很好&#xff0c;如Memcache&#xff0c;Tair。封装一个类继承自HttpSession&…

向您的JVM添加一些熵

能否生成真正的随机数取决于系统中的熵。 有人声称&#xff0c;这可以通过掷骰子来保证。 其他人认为&#xff0c;用此主体替换OpenJDK的java.math.Random.nextInt&#xff08;&#xff09;方法将有所帮助&#xff1a; public int nextInt() {return 14; }资料来源&#xff1a…

android源码多少行,Android源码资料

缺点&#xff1a;有时会访问不了优点&#xff1a;搜索方便&#xff0c;支持跳转引用)一个操作的小技巧&#xff0c;不想跳转引用的类覆盖当前页面&#xff0c;可以按下ctrl键点击。https://www.cnblogs.com/CVstyle/p/6395662.htmlhttps://www.jianshu.com/p/25a908c7eefaAndro…

Android初学第80天

Android初学第80天 20_MVVM 代码 BeatBox BeatBox.java package com.bignerdranch.android.beatbox;import android.content.Context; import android.content.res.AssetManager; import android.util.Log;import java.io.IOException; import java.util.ArrayList; import jav…

深入理解JavaScript之Event Loop

前言 最近阅读《高性能JavaScript》时&#xff0c;第六章谈到“通过定时器将JavaScript执行代码的控制权先让给浏览器用于更新UI状态&#xff0c;然后再将控制权交回给JavaScript代码&#xff0c;这样就可以使得页面更为流畅”&#xff0c;就联想到了之前理解的事件循环。 这…

使用EasyPoi导出Excel

Excel模板来自自己写死的一个excel模板&#xff0c;相当于是用户查询数据&#xff0c;数据填充到一个模板的Excel里&#xff0c;再导出Excel /*创建模板*/String a request.getSession().getServletContext().getRealPath("/resource/河南能源化工集团安全监控系统联网系统…

Hazelcast入门

7月&#xff0c;我写了一个博客向Java开发人员介绍erlang&#xff0c;重点介绍了这两种语言之间的一些异同。 erlang虚拟机具有许多令人印象深刻的内置功能&#xff0c;其中之一是它们独立于位置并且可以互相通信。 这意味着可以通过编写很少的代码行在VM之间同步数据。 如果您…

android手机最低内存,原神手机端需要哪些配置 手机端最低配置要求介绍

原神是一款由米哈游自主研发的全新开放世界冒险游戏&#xff0c;游戏最近迎来了pc端的首次测试&#xff0c;而且在不久之后就会开启原神手机端的公测版本&#xff0c;那么手机端需要什么配置呢&#xff1f;小编带来了详细的介绍。移动端预下载&#xff1a;9月25日下午16&#x…

AnswerOpenCV一周佳作欣赏(0615-0622)

一、How to make auto-adjustments(brightness and contrast) for image Android Opencv Image Correctionim using OpenCV for Android. I would like to know,how to make image correction(auto adjustments of brightness/contrast) for image(bitmap) in android via Open…