模板小程序,网站seo具体怎么做?,工业和信息化网站备案系统,wordpress视频站模板开发Web服务的RESTful方法不断受到越来越多的关注#xff0c;并且似乎正在将SOAP淘汰。 我不会讨论哪种方法更好#xff0c;但是我相信我们都同意REST更轻量级。 在本教程中#xff0c;我将向您展示如何使用RESTeasy开发RESTful服务以及如何将它们部署在Tomcat服务器上。 在… 开发Web服务的RESTful方法不断受到越来越多的关注并且似乎正在将SOAP淘汰。 我不会讨论哪种方法更好但是我相信我们都同意REST更轻量级。 在本教程中我将向您展示如何使用RESTeasy开发RESTful服务以及如何将它们部署在Tomcat服务器上。 在此过程中还将创建一个基于Eclipse的Maven项目。 我最近想测试计划用于正在构建的应用程序中的REST客户端因此我需要一种快速的方法来建立RESTful基础结构。 贾斯汀撰写了一篇很酷的指南讲述了如何使用Spring提供RESTful服务 。 但是我想要更快的东西并且不要一次与Spring混为一谈。 因此我决定使用JBoss RESTeasy 。 从官方网站 RESTEasy是一个JBoss项目它提供各种框架来帮助您构建RESTful Web服务和RESTful Java应用程序。 它是JAX-RS规范的完全认证且可移植的实现。 JAX-RS是新的JCP规范它通过HTTP协议为RESTful Web服务提供Java API。 RESTEasy可以在任何Servlet容器中运行但是还可以与JBoss Application Server进行更紧密的集成以使用户在该环境中获得更好的体验。 可以在这里找到最新的RESTeasy版本并在这里找到相关文档。 目前最新版本是2.1.0.GA。 您可能还需要RESTeasy JavaDoc和JAX-RS JavaDoc 。 由于使用JBoss AS会取消整个“轻量级”概念因此我决定与我们的老朋友Tomcat一起使用。 我从这里下载了最受欢迎的servlet容器的最新版本7.0.5 beta。 请注意目前这还处于beta阶段但是Tomcat已被证明非常强大我认为应该不会出现任何问题。 让我们开始创建一个名为“ RESTeasyProject”的基于Eclipse的Maven项目。 所使用的原型为“ webapp-jee5”如下图所示 对于参数我们将“ com.javacodegeeks”用作组ID将“ resteasy”用作工件ID。 下一步是在我们的pom.xml文件中添加RESTeasy依赖项。 存储库URL为http://repository.jboss.org/maven2/但是不幸的是该存储库中提供的最新版本为2.0-beta-2。 无论如何我们需要添加到Maven文件中的行是 …
repositoriesrepositoryidorg.jboss.resteasy/idurlhttp://repository.jboss.org/maven2//url/repository
/repositories
…
dependencies
…
dependencygroupIdorg.jboss.resteasy/groupIdartifactIdresteasy-jaxrs/artifactIdversion2.0-beta-2/version
/dependency
dependencygroupIdorg.jboss.resteasy/groupIdartifactIdresteasy-jaxb-provider/artifactIdversion2.0-beta-2/version
/dependency
dependencygroupIdorg.jboss.resteasy/groupIdartifactIdresteasy-jettison-provider/artifactIdversion2.0-beta-2/version
/dependency
…
/dependencies
… resteasy-jaxrs构件引用了JAX-RS实现的核心RESTeasy类。 另外我们同时使用resteasy-jaxb-provider和resteasy-jettison-provider因为我们希望同时支持XML和JSON响应格式。 JAXB体系结构用于XML序列化而Jettison框架用于编写JSON。 这是完整的pom.xml project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.javacodegeeks/groupIdartifactIdresteasy/artifactIdpackagingwar/packagingversion0.0.1-SNAPSHOT/versionnameresteasy JEE5 Webapp/nameurlhttp://maven.apache.org/urlrepositoriesrepositoryidorg.jboss.resteasy/idurlhttp://repository.jboss.org/maven2//url/repository/repositoriesdependenciesdependencygroupIdjavax.servlet/groupIdartifactIdservlet-api/artifactIdversion2.5/versionscopeprovided/scope/dependencydependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.1/versionscopeprovided/scope/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion3.8.1/versionscopetest/scope/dependencydependencygroupIdorg.jboss.resteasy/groupIdartifactIdresteasy-jaxrs/artifactIdversion2.0-beta-2/version/dependencydependencygroupIdorg.jboss.resteasy/groupIdartifactIdresteasy-jaxb-provider/artifactIdversion2.0-beta-2/version/dependencydependencygroupIdorg.jboss.resteasy/groupIdartifactIdresteasy-jettison-provider/artifactIdversion2.0-beta-2/version/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion2.0.2/versionconfigurationsource1.5/sourcetarget1.5/target/configuration/plugin/pluginsfinalNameresteasy/finalName/build
/project 首先让我们看看将在我们的服务中使用的模型类 package com.javacodegeeks.resteasy.model;import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;XmlRootElement(name employee)
public class Employee {private String employeeId;private String employeeName;private String job;XmlElementpublic String getEmployeeId() {return employeeId;}public void setEmployeeId(String employeeId) {this.employeeId employeeId;}XmlElementpublic String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName employeeName;}XmlElementpublic String getJob() {return job;}public void setJob(String job) {this.job job;}} 典型的模型类其中包含一些字段以及相应的获取器/设置器。 使用JAXB批注以指示要序列化的字段以及将它们映射到的元素。 更具体地说使用XmlRootElement批注来指示顶级类元素。 类似地使用XmlElement注释获取器以将相应的JavaBean属性映射到XML元素。 默认情况下使用属性名称但是我们可以通过提供自定义名称来覆盖它。 现在让我们创建第一个启用RESTeasy的类名为“ SampleService”。 package com.javacodegeeks.resteasy;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;import com.javacodegeeks.resteasy.model.Employee;Path(/sampleservice)
public class SampleService {private static MapString, Employee employees new HashMapString, Employee();static {Employee employee1 new Employee();employee1.setEmployeeId(1);employee1.setEmployeeName(Fabrizio);employee1.setJob(Software Engineer);employees.put(employee1.getEmployeeId(), employee1);Employee employee2 new Employee();employee2.setEmployeeId(2);employee2.setEmployeeName(Justin);employee2.setJob(Business Analyst);employees.put(employee2.getEmployeeId(), employee2);}GETPath(/hello)Produces(text/plain)public String hello(){return Hello World; }GETPath(/echo/{message})Produces(text/plain)public String echo(PathParam(message)String message){return message; }GETPath(/employees)Produces(application/xml)public ListEmployee listEmployees(){return new ArrayListEmployee(employees.values());}GETPath(/employee/{employeeid})Produces(application/xml)public Employee getEmployee(PathParam(employeeid)String employeeId){return employees.get(employeeId); }GETPath(/json/employees/)Produces(application/json)public ListEmployee listEmployeesJSON(){return new ArrayListEmployee(employees.values());}GETPath(/json/employee/{employeeid})Produces(application/json)public Employee getEmployeeJSON(PathParam(employeeid)String employeeId){return employees.get(employeeId); }} 如您所见我们的服务有很多注释。 我们可以声明性地定义每个方法都会响应的HTTP方法例如GET或POST 。 对于提供资源的URL我们在服务和方法级别都使用PATH 。 如果方法接受参数或属于特定路径段 则以PathParam表示。 最后 Consumes批注定义资源方法可以接受的媒体类型而Produces定义可以生成的类型。 让我们研究更多细节。 我们将一些模拟数据存储在静态映射上在实际的应用程序中这些数据将被DAO取代。 请注意模型类将由库针对XML和JSON表示形式进行序列化。 现在让我们看一下暴露的方法 hello 一种仅打印具有文本/纯内容类型的预定义字符串的方法。 echo 此方法返回提供的任何参数。 请注意方括号内的字段名称必须与参数名称匹配。 与上面类似的内容类型。 listEmployees 此方法提供模型对象列表的XML表示。 格式由Produces注释指示。 getEmployee 与上一个相同但仅基于ID参数返回一个模型对象。 listEmployeesJSON 与XML相似但产生的格式为JSON。 getEmployeeJSON 与上一个相同但仅基于ID参数返回一个模型对象。 接下来我们必须相应地设置Web应用程序的web.xml文件以便RESTeasy处理传入的REST请求。 在我们的Maven项目中可以在“ src / main / webapp / WEB-INF”目录下找到该文件。 声明文件如下所示 ?xml version1.0 encodingUTF-8?web-app version2.5 xmlnshttp://java.sun.com/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsddisplay-nameresteasy/display-namelistenerlistener-classorg.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap/listener-class/listenerservletservlet-nameResteasy/servlet-nameservlet-classorg.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher/servlet-class/servletservlet-mappingservlet-nameResteasy/servlet-nameurl-pattern/restful-services/*/url-pattern/servlet-mappingcontext-paramparam-nameresteasy.scan/param-nameparam-valuetrue/param-value /context-paramcontext-paramparam-nameresteasy.servlet.mapping.prefix/param-nameparam-value/restful-services/param-value/context-param/web-app 为了使用resteasy创建注册表必须部署ResteasyBootstrap上下文侦听器同时使用HttpServletDispatcher Servlet以便将传入请求正确路由到适当的服务。 我们已经配置了名为“ Resteasy”的特定servlet以拦截“ / restful-services / *”路径下的请求。 我们需要使用resteasy.servlet.mapping.prefix配置选项将其定义为RESTeasy框架。 请注意该值不包含尾部斜杠或通配符。 最后我们使用resteasy.scan开关自动扫描WEB-INF / lib jar和WEB-INF / classes目录中的各种带注释的类。 您还可以使用许多其他RESTeasy配置开关来微调应用程序的行为。 最后一步是构建项目并将其部署到servler容器。 运行Eclipse配置然后选择“ Maven安装”。 假设一切正常这将在项目的“目标”文件夹下生成一个名为“ resteasy.war”的网络存档。 也可以在同一目录中找到展开的文件夹。 将WAR文件复制到Tomcat的应用程序存储库即“ apache-tomcat-7.0.5 \ webapps”文件夹。 如果尚未启动服务器请在控制台上看到以下行 添加扫描的资源com.javacodegeeks.resteasy.SampleService 现在已经部署了应用程序让我们对其进行测试。 请注意由于所有方法都处理GET请求因此可以使用您喜欢的浏览器并仅编写URL来执行测试。 对于懒惰的开发人员它们在这里在XML和JSON的情况下我还添加了具有预期结果的公共链接 http// localhost8080 / resteasy / restful-services / sampleservice / hello http// localhost8080 / resteasy / restful-services / sampleservice / echo / message http// localhost8080 / resteasy / restful-services / sampleservice / employees 链接 http// localhost8080 / resteasy / restful-services / sampleservice / employee / 1 链接 http// localhost8080 / resteasy / restful-services / sampleservice / json / employees 链接 http// localhost8080 / resteasy / restful-services / sampleservice / json / employee / 1 链接 请注意完整路径包括Web应用程序上下文“ resteasy”我们定义的RESTeasy处理上下文“ restful-services”服务路径“ sampleservice”以及相应的方法路径。 仅此而已。 与往常一样您可以在此处找到Eclipse项目。 相关文章 Spring3 RESTful Web服务 带有Spring和Maven教程的JAX–WS GWT 2 Spring 3 JPA 2 Hibernate 3.5教程– Eclipse和Maven 2展示 GWT Spring和Hibernate进入数据网格世界 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例 翻译自: https://www.javacodegeeks.com/2011/01/restful-web-services-with-resteasy-jax.html