使用JAX-RS和Jetty创建Web服务和Rest Server

用Java创建WebService非常容易。 将其添加到ServletContainer并将其部署到嵌入式WebServer仅需要几行代码。

让我们创建一个具有两个函数的简单计算器,作为WebService的示例。 计算器将计算任何数量的squareRoot和平方。 它将返回一个简单的JSON响应,其中包含动作名称,输入和输出。

在我们开始之前,这是Gradle配置,您将需要:

apply plugin: 'java'version = '1.0'repositories {mavenCentral()
}dependencies {compile group: 'org.glassfish.jersey.core', name: 'jersey-server', version: '2.7'compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-servlet-core', version: '2.7'compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-jetty-http', version: '2.7'compile group: 'org.glassfish.jersey.media', name: 'jersey-media-moxy', version: '2.7'compile group: 'org.eclipse.jetty.aggregate', name: 'jetty-all', version: '9.3.0.M1'testCompile group: 'junit', name: 'junit', version: '4.11'
}

这是计算器的代码:

package example;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;@Path("calculator")
public class Calculator {@GET@Path("squareRoot")@Produces(MediaType.APPLICATION_JSON)public Result squareRoot(@QueryParam("input") double input){Result result = new Result("Square Root");result.setInput(input);result.setOutput(Math.sqrt(result.getInput()));return result;}@GET@Path("square")@Produces(MediaType.APPLICATION_JSON)public Result square(@QueryParam("input") double input){Result result = new Result("Square");result.setInput(input);result.setOutput(result.getInput()*result.getInput());return result;}static class Result{double input;double output;String action;public Result(){}public Result(String action) {this.action = action;}public String getAction() {return action;}public void setAction(String action) {this.action = action;}public double getInput() {return input;}public void setInput(double input) {this.input = input;}public double getOutput() {return output;}public void setOutput(double output) {this.output = output;}}
}

注释确定REST动作的类型将被施加到该方法@GET@PUT@Path注释确定该请求的URI和@Produces注释确定如何响应将被返回。 在我们的例子中,我们选择JSON,所有这些转换都可以无缝处理。

为了部署我们的WebService,我们需要一个要使用Jersey的ServletContainer和一个我们可以将要使用Jetty的容器放入其中的WebServer。

这是RestServer的代码:

package example;import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;public class RestServer {public static void main(String[] args) throws Exception {ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);context.setContextPath("/");Server jettyServer = new Server(8080);jettyServer.setHandler(context);ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");jerseyServlet.setInitOrder(0);jerseyServlet.setInitParameter("jersey.config.server.provider.classnames",Calculator.class.getCanonicalName());try {jettyServer.start();jettyServer.join();} finally {jettyServer.destroy();}}
}

运行RestServer之后,您将可以使用此URL对其进行测试。

  • http:// localhost:8080 / calculator / squareRoot?input = 16

从IntelliJ运行查询的一种非常不错的方法是使用内置的REST Client,可以在工具菜单下找到它。

屏幕截图2015-03-09 at 15.40.00

当您运行REST客户端时,您将收到以下响应:

屏幕截图2015年3月9日在15.41.33

这是测试RESTful服务器的一种非常简单的方法。

翻译自: https://www.javacodegeeks.com/2015/03/creating-web-services-and-a-rest-server-with-jax-rs-and-jetty.html

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

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

相关文章

java填充二维数组_Java用Arrays.fill()初始化二维数组的实现

在最短路径问题上遇到了一个问题,对于二维int数组 map[][],需要初始化为int的最大值,不想用双重循环赋初值,想用Arrays.fill()填充但是失败了。。。。。。首先说明,Arrays.fill()并不能提高赋值的效率,在函数的内部也是…

maya 中使用节点连接来求余数:

绑个东西要用到求余,不喜欢用表达式,就想用节点连出来,找了下网上只有 镀金铆钉 在火星时代上的教程,不过不能下载了,就自己想了下,终于搞出来了,做下笔记,不要忘了。 求余的思路&a…

Java8多线程ForkJoinPool:处理异常

引入Java8 lambda背后的主要动机之一是能够尽可能轻松地使用多核的能力(请参阅精通Lambdas:多核世界中的Java编程 )。 只需将代码从collection.stream()...更改为collection.parallelStream()...您就可以使用即时多线程,从而为您的…

java web 登录界面案例_【JavaWeb】74:写一个登录案例

今天是刘小爱自学Java的第74天。感谢你的观看,谢谢你。话不多说,开始今天的学习:Java又常被称之为后台开发。什么叫后台呢?除了后台还有什么前台、前端后端……这些概念一大堆,还容易弄混。以一个三层架构的知识点来引…

7种JIRA集成可优化Java开发流程

有哪些最佳集成可以用来优化JIRA工作流程? 我喜欢寻找在工作流程中提高效率的方法。 看着那些小的自动化和流畅的流程,使我的脸上露出笑容。 我知道我并不孤单,偶尔花更多的时间来获得一点点提升以使其正常工作,而不是最终节省了我…

hive处理日志,自定义inputformat

开放环境,hadoop-0.20.2,hive-0.6 1.日志分隔符 Xml代码 2010-05-31 10:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html 2010-05-31 10:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html分隔符是“ ||| ”&#xf…

java 封箱_java封箱和拆箱分析

学习java肯定会涉及到“封箱”和“拆箱”,那么什么是“封箱”和“拆箱呢?我相信有不少的老师或者作者都对此做过总结,在这里就不详细说了。总的来说就是:装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包…

EE JSP:使用自定义标签库生成动态内容

在Web应用程序中开发View层时,您希望尽量不要重复JSP文件中的内容。 JSP spec API允许您通过使用标记库来减少这种重复。 定制JSP标记是用户定义的xml标记元素,您可以将其插入JSP文件以替换为某些动态内容。 这是一个使用自定义JSP标记的简单jsp示例 &a…

prefuse学习(一)用非数据库连接和xml的方式读入数据

prefuse正常的数据源需要从ConnectionFactory中生产出来,但是如果平时不想用里面给的方法得到数据,就需要手动创造Graph里面所需要的内容两个Table 下面是我自己写的从文件中读入数据的工具类 package wjl.util;import java.io.FileInputStream; import …

java list作为参数传递_Java 程序将lambda表达式作为方法参数传递

Java 程序将lambda表达式作为方法参数传递在此示例中,我们将学习将lambda表达式作为Java中的方法参数传递。要理解此示例,您应该了解以下Java编程主题:示例1:将lambda表达式定义为方法参数示例import java.util.ArrayList;class M…

将ActiveMQ持久消息传递性能提高25倍

Apache ActiveMQ,JBoss A-MQ和Red Hat Apache ActiveMQ是一个非常受欢迎的开源消息传递代理,由创建(和工作) Apache Karaf , Apache Camel , Apache ServiceMix以及许多其他工具的人提供给您。 它拥有一个充…

sql数据库恢复

先附加,然后再备份,然后按如下: --数据还原到指定时间点的处理示例--创建测试数据库CREATE DATABASE DbGO --对数据库进行备份BACKUP DATABASE Db TO DISKc:\db.bak WITH FORMATGO --创建测试表CREATE TABLE Db.dbo.TB_test(ID int) --延时1秒钟,再进行后面的操作(这是由于SQL …

ECMA学习小结(3)——constructor 和 prototype

每个函数都有一个prototype的属性,当我们以这个函数为构造函数创建实例时(即用new的形式),创建出来的这个对象是没有prototype的属性的。以下代码为例:在console里进行调试cf 拥有一个prototype的属性,这个…

java什么是网络接口_java 网络编程 -- IP地址的表示与网络接口信息的获取(InetAddress和NetworkInterface)...

使用java进行网络程序的开发,可以说是一件令人愉悦的事情,对于用惯了C网络接口编程的人来说,当他们首次使用Java开发网络应用程序,会发现java开发网络应用是如此的简单,甚至仅用几分钟时间,您就可以学会这种…

如何使用悲观锁定修复乐观锁定竞争条件

概括 在我以前的文章中 ,我解释了使用显式乐观锁定的好处。 然后我们发现,在很短的时间范围内,并发交易仍可以在我们当前交易被提交之前立即提交产品价格更改。 此问题可以描述如下: 爱丽丝拿产品 然后,她决定订购…

分支限界

分支界定是一种在问题的解空间树上搜索问题的解的方法,其实就是剪枝广搜,它始终维护一个上下界用来剪枝,一个限界函数计算对解的最有期望。主要用于解决离散问题的优化。 分支界定的关键问题: (1)如何确定合…

mysql表变量临时表_表变量和临时表详解

首先让我们来看看什么是表变量和临时表。sql server 表变量1.初识表变量表变量在sql server 2000中首次被引用。表变量的定义和创建一个表大致相同,只不过是使用DECLARE variable而不是CREATE Table,表变量定义包括列定义,列名,数…

SWT外观:自定义FlatScrollBar颜色等

最近,我引入了一个自定义滑块控件 ,该控件可用于改善SWT外观和更细微的视图布局的感觉。 令人高兴的是,该小部件似乎已经在Code Affine世界之外找到了较早的采用者 。 这导致了一些增强 ,这些增强将在以下各节中介绍。 SWT滚动条…

类的静态数据成员

有时需要为某个类的所有对象分配一个单一的存储空间。在C语言中,可以用全局变量, 但这样很不安全。全局数据可以被任何人修改,而且,在一个项目中,它很容易与其他的名字 相冲突。如果可以把一个数据当成全局变量那样去存…

【Android 13】使用Android Studio调试系统应用之Settings移植(三):构建settingsLib项目目录

文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、AS新建SettingsLib New Moudle3.1 创建 New Moudle3.2 替换源文件(1)选定复制目标(2)复制到AS目录,并改名(3)完成创建四、下一步动作五、篇尾