多语言展示
当前在线:1624今日阅读:60今日分享:41

TomEE Plus在Java中循序渐进的RESTful Web服务

TheServerSide发布了许多关于有效RESTful Web服务设计原则的文章,以及如何使用Spring Boot和Spring Data API 实际创建云原生应用程序的示例。在这个JAX-RS教程中,我们将通过开发完全相同的应用程序回到基础,除了这次我们将使用标准Java EE API和扩展的企业版Tomcat TomEE Plus作为我们的部署目标。使用Eclipse和TomEE Plus在Java中循序渐进的JAX-RS RESTful Web服务示例将在不到15分钟的时间内让您快速掌握现代Web服务开发技术。
方法/步骤
1

第1步:动态Web项目这个JAX-RS教程的第一步是启动Eclipse中的动态Web项目创建向导。 这个JAX-RS教程利用了Eclipse中的动态Web项目。当动态Web项目向导出现时,将项目命名为restful-java,选择Apache Tomcat 8.5作为目标运行时(即使我们使用的是TomEE Plus,而不是Tomcat),将3.1指定为动态Web模块版本并选择最小配置该项目。设置这些选项后,单击“完成”。请注意,在执行此JAX-RS教程之前,您需要安装TomEE Plus。您还可以使用支持Java EE和JAX-RS的任何其他应用程序服务器,使用Eclipse在Java中使用此RESTful Web服务示例。web.xml文件在哪里?如果你在GitHub(下面的链接)中查看这个项目,你会发现没有web.xml文件。这使得传统的企业开发人员感到紧张,但只要一切都被注释,就不需要在Servlet和JSP规范的3.x版本中使用。在较旧的REST实现中,您需要配置Jersey Servlet并执行REST Servlet映射,但这不再是必需的。在这种情况下,TomEE Plus将处理Java Web项目中的类的所有注释,并相应地提供RESTful Web服务。应该注意的是,在某些服务器上,您需要引用JAX-RS类的表示,这可以通过Application类来完成。该过程在JAX-RS问题部分中得到了解决。

2

第2步:创建Score类这个使用Eclipse的Java中的宁静Web服务示例为在线摇滚剪刀应用程序建模得分计数器,因此第一个要求是创建一个名为Score的类来跟踪胜利,损失和关系。为了简单起见,我们不会添加任何setter或getter。此外,我们将使Score类的属性保持静态,因为这将使Java虚拟机(JVM)能够模拟对Web服务的无状态调用之间的持久性。这种方法使我们能够在单个JVM上运行和测试应用程序。但是,您应该以这种方式管理应用程序状态,仅作为概念证明。最好使用Hibernate和Java Persistence API保存数据或将信息保存到NoSQL数据库,但这超出了本JAX-RS教程的范围。

3

第3步:编写JAX-RS 服务类代码名为ScoreService的类是使用Eclipse在Java中使用RESTful Web服务示例的核心和灵魂。因此,使用ApplicationPath批注对其进行装饰,该批注定义了Web服务的基本URL。package com.mcnz.restful.java.example;  import javax.ws.rs。*; @ApplicationPath(“/”)公共类ScoreService {}    此类将包含三个getter方法,使RESTful Web客户端可以查询获胜,丢失或关系的数量。这些方法被调用通过HTTP GET调用和返回当前赢,损失或领带计数为纯文本。因此,这些方法都有一个JAX-RS @GET注释,一个@Produces注释表示它们返回一个文本字符串和一个@Path注释,表明客户端需要使用它来调用该方法:@GET @Path(“/ score / wins”)@ Produces(“text / plain”) public int getWins(){return Score。WINS ;} @GET @Path(“/ score / loss ”)@ Produces(“text / plain”)public int getLosses(){return Score。LOSSES ;} @GET @Path(“/ score / ties”)@ Produces(“text / plain”)public int getTies(){return Score。TIES ; 这个JAX-RS教程的ScoreService的增加方法遵循类似的模式,但每个方法都是通过HTTP POST调用触发的:@POST @Path(“/ score / wins”)@ Produces(“text / plain”) public int increaseWins(){return Score。WINS ++; } @POST @Path(“/ score / ties”)@ Produces(“text / plain”)       public int increaseTies(){return Score。WINS ++;} @POST @Path(“/ score / loss”)@ Produces(“text / plain”)          public int increaseLosses(){return Score。损失 ++; ScoreService类的最后两个方法使用户能够获得完整分数的基于JSON的表示或将查询参数传递给Web服务以更新Score类的静态属性。两种方法都使用/ score路径,并且都生成JSON。但是getScore方法是通过HTTP GET请求调用的,而update方法是通过PUT调用的。仅仅为了记录,从RESTful Web服务返回JSON比使用String.format调用更简单。您可以使用@Producer注释并简单地返回JavaBeans,但因为我们在Score类中使用静态变量,所以这样做会有点混乱。我们将使用Eclipse保存未来的RESTful Web服务教程。

4

第4步:部署JAX-RS Web服务现在您已经编写了JAX-RS教程的ScoreService,现在是时候使用Eclipse的这个RESTful Web服务示例使用Eclipse进入测试阶段。请记住,我们使用TomEE Plus作为目标服务器,而不是Tomcat。Tomcat不提供内置的JAX-RS支持。要测试应用程序,首先右键单击restful Java项目,然后选择Run As> Run on server。这将部署Web项目并启动承载该应用程序的Apache TomEE Plus服务器。

5

步骤5:测试JAX-RS Web服务示例部署JAX-RS教程应用程序时,有许多不同的方法可以对其进行测试。一种方法是简单地将RESTful Web服务示例的URL键入Web浏览器。对以下URL的调用将触发GET调用,并且应显示表示初始分数的JSON字符串:HTTP://本地主机:8080 /宁静的Java /分通过将其调用到Web浏览器中来测试JAX-RS教程应用程序。要测试increaseTies方法,请在Bash shell中运行以下两个curl命令:$ curl -X POST“http:// localhost:8080 / restful-java / score / ties”  $ curl -X GET“http:// localhost:8080 / restful-java / score /”从第二个命令返回的JSON字符串表示绑定数确实增加了一个:{“wins”:“0”,“loss”:“0”,“tie”:“1”}现在,使用curl通过查询参数触发PUT调用:$ curl -X PUT“http:// localhost:8080 / restful-java / score?wins = 1&loss = 2&ties = 3”此PUT调用将返回以下JSON字符串:{“胜利”:“1”,“损失”:“2”,“领带”:“3”}

6

6.修复常见的JAX-RS问题在此示例中,ScoreService类使用@ApplicationPath进行批注。这适用于TomEE Plus,但在其他服务器或较旧的实现上,@ ApplicationPath注释放在一个扩展JAX-RS Application类的单独类上。这通常解决了RESTful URL无法被识别并触发404的问题:当尝试调用目标资源时,源服务器没有找到目标资源错误的当前表示。import javax.ws.rs.core.Application;    @ApplicationPath(“/”) 公共类ScoreApplication扩展Application {     public Set > getClasses(){return new       HashSet >(Arrays.asList(ScoreService.class));     }  }在实现基于Jersey的服务器上,虽然它明确地调用Jersey API,但是可以用更容易理解的类替换该类,因此它只适用于基于Jersey的实现。您只需告诉它JAX-RS带注释的Web服务所在的各种软件包的名称,并确保它们已加载:import javax.ws.rs.ApplicationPath;   import org.glassfish.jersey.server.ResourceConfig;   @ApplicationPath(“/”) 公共类ScoreApplication扩展了ResourceConfig {    public ScoreApplication(){     packages(“com.mcnz.restful.java.example”);  }  }当然,您必须确保使用TomEE Plus而不是Tomcat。如前所述,如果没有将JAX-RS实现添加到\ lib目录,Gradle构建脚本或Maven POM ,标准Tomcat安装将无法运行RESTful Web服务。这是使用Eclipse和TomEE Plus在Java中完整的,逐步完成的JAX-RS RESTful Web服务示例。

推荐信息