创建并部署基于Jersey的RESTful Web服务

日期: 2008-04-15 作者:William Brogden翻译:杨君 来源:TechTarget中国 英文

我发现基于Jersey工程的Web服务发展支持可以作为插件为NetBeans所使用。我想看看是什么参与在Jersey工具包的基础上创建和部署Web服务。   首先我们要知道什么是Jersey。   Jersey 和the JSR-311 RESTful Web服务API   JSR代表Java规范要求。

是Sun公司资助的Java Community Process所采用的机制,用于招聘新的专家小组,以推动新Java标准的演化。JSR-311是为RESTful Web服务的Java API而设计的产品。通常叫做JAX-RS. JAX-RS的目的是提供一个带有注释的API把Java类和接口联系起来……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

我发现基于Jersey工程的Web服务发展支持可以作为插件为NetBeans所使用。我想看看是什么参与在Jersey工具包的基础上创建和部署Web服务。

  首先我们要知道什么是Jersey。

  Jersey 和the JSR-311 RESTful Web服务API

  JSR代表Java规范要求。是Sun公司资助的Java Community Process所采用的机制,用于招聘新的专家小组,以推动新Java标准的演化。JSR-311是为RESTful Web服务的Java API而设计的产品。通常叫做JAX-RS. JAX-RS的目的是提供一个带有注释的API把Java类和接口联系起来,以便为RESTful Web服务建立一个资源类,这些接口可能会添加到POJO(普通Java对象)。

  Sun公司资助的GlassFish小组开放源代码项目的一部分。Jersey工程有任务提供工作着的参照执行JSR–311。除了Java接口和实施API的类以外,Jersey提供了一个servlet,它可以容纳资源类的任何成员。带有现时用户测验的工作中的执行非常重要,它为研究JSR-311规范的专家小组提供反馈,例如,用户组邮件列表中经常含有带有新特点的要求。

  使用由Java语言编写的注释

  注释是一个特殊的文字附注或元数据,通过1.5版本补充到Java,注释在Java源代码可以影响编译和由此产生的Java类的运行期行为。在Java注释的意义类似于编译的Java接口声明。为了方便程序设计师,注释被设计者更多的应用于编程框架并使编程风格得以执行。从句法角度来说,注释用以编译器可以确认的@符号作为标识符,现在目前有40个JSR-311指定的标识符。

  JAX-RS注释是如何创建一个资源类的。

  如果你正在使用NetBeans RESTful Web服务插件。它会在你建立源代码初期给与帮助,这些源代码中包含能够支持REST格式请求所要求的最小注解。让我们看一些有关注释的例子——以下添加到类的@路径注释,定义了URI的一部分,该URI用于定位类以及从URI中提取的变量的名称。

  @Path( "matching/{domain}/{word}" )

  所以如果你Web应用的名称是"MetaPhone",并且控制资源类的Jersey servle被映射到"resources",URI请求一个地名表发音近似于"leander",地址是
http://myserver/MetaPhone/resources/matching/Places/leander

  正如我们在下面详细讨论的,RESTful应用容器利用运行时间注释"GET"ProduceMime
找到最适合的方法来处理HTTP GET请求,并且ProduceMime 符合请求首部,
PathParam注释将输入参数从路径中提取出来。
  @GET
  @ProduceMime("text/html")
  public String getHtml(
         @PathParam("domain") String d,
         @PathParam("word") String w
       ) {

  我填补了gethtml方法,用一些事先预置在周围的语音代码查找代码和数据。返回的字符串是带有和地址表相匹配的HTML格式的页面。

  一个RESTful Web应用的生命周期

  在Jersey,支持JAX-RS资源的servlet是位于com.sun.ws.rest.impl.container.servlet package. 的ServletAdaptor类。RESTful Web服务的部署描述符将这个servlet映射到一个名称如"resources"并详细指明当服务器启动时,必须初始化。ServletAdaptor支持。搜寻包含JAX-RS注释的Java类并监督其使用HTTP方法,确保其由MIME 类型。除了HTML和纯文字外,Jersey工程还支持XML和JSON输出类型。

  任何支持不同HTTP方法和资源类型的资源类成员,都能在一个应用程序里得到支持。

  JAX-WS API为定位符合请求的最佳匹配提供规则。

  当一个可识别的URI被转发到ServletAdaptor时,它利用Java反射建立一个资源类实例,并准备将嵌入在类里的注释输入到适当的方法里。无论应答是怎样的,选择方法的输出成为应答的正文。

  重要的是每一个要求会导致一个资源类的新实例建立起来。当要求完成后,实例会被抛弃。尽管这个额外的对象建立可能显得有些浪费,它却大大简化了整个过程,这取决于程序管理员来提供静态方法或其它类来长期保持数据。

  将其部署到一个servlet容器

  如果你正在使用NetBeans 寻求发展,它会自动创建一个包含所有数据库和类的WAR文件,这些数据库和类通过收集所有Jersey支持的数据库来支持服务。

  将其布置到轻便服务器上

  例如Sun公司发布的Java SE 6,同Jersey文件样例里所显示的一样。可以用"lightweight Web server"创造最简单可行的服务器,它可以接收HTTP请求,并在单一资源服务器类里将请求映射到正确的方法,返回一个HTTP应答。轻便服务器的一个缺点就是没有提供所有能够为典型servlet定位的数据库。所以需要程序员把所有的JAR文件都放在类路径里。

  我发现,在运行Windows时,作为一个独立应用能够启动轻便服务器的Jersey实例代码就会出现问题,该实例用一个标准该实例方法呼叫这个简单的方式让操作员能停止服务器。

  系统读取()

  这在Unix Java实施中工作正常,但却在Windows命令提示里,冻结了整个程序。解决方法就是让 loop - (ctrl)C里的启动线程休眠打破回路,推出程序。
   while( true ){
           try { Thread.sleep(1000);
           }catch(InterruptedException e){}
    }

  这个单独的例子用了不到3MB来支持一个简单的RESTful服务实例。轻便服务器可以嵌入更大的应用程序中为一个简单确定的资源提供访问。

  Jersey的前景

  JerseyJSR-311的实施正在迅速的演进。我用的0.6ea 和0.7ea版本4月底就投入市场了。幸运的是,NetBeans RESTful Web服务插件在每次产品发布不久就会升级,并为你正常NetBeans插件管理员所接受。最终,Jersey将成为一个和GlassFish Java EE开放源服务器一起运送的产品品质参照实施。但我不能确定什么时候能实现。

相关推荐