`
redhacker
  • 浏览: 494249 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jersey框架初体验

    博客分类:
  • REST
 
阅读更多
一、背景

最近,Jersey学习群组的朋友越来越多,很多朋友问一些非常基础的问题,我看这种现象普遍存在,原因是进入群中的同学们大部分是Jersey的初学者,更有甚者,可能是java的初学者,他们带着对REST webservice的好奇,闯入了Jersey这个框架的学习领域,然而,由于是新手,感觉老虎吃天,无法下爪!为了引导新手们学习,后续我将写几篇关于Jersey入门级的博客,敬请大家期待!

二、前言

本篇主要是Jersey体验,你将在不做任何编码的情况下,体验Jersey框架的神气魅力!本文还假定你在eclipse里安装了Maven插件!

三、步骤

1、新建Maven项目







2、选择项目的Maven原型(jersey-quickstart-grizzly),这个是基于1.7版本的Jersey



3、填写本项目的项目信息,填写完点击“Finish”



4、在Eclipse地址栏右下方可以看到项目正在生成



5、生成后的项目结构如下图,其中Main.java是grizzly web server启动的Java小应用程序,
MyResource是自动生成第一个REST Resource类,包含了一个简单的GET请求的资源。




6、执行Main.java,grizzly web server将启动。



7、访问http://localhost:9998/application.wadl,如下图所示,这是生成的REST资源描述语言



8、访问生成的测试资源,如下图所示,看到“Got it”,说明你成功的体验了Jersey的第一个Hello World程序!



总结:

1、目前,大部分开源项目都使用Maven管理,能够掌握Maven对于学习一个开源项目至关重要,否则都不知道如何开始!

2、使用Maven可以自动下载对应Jar的源码和Javadocs,这对深入学习某个开源项目提供了简便的途径,否则下了二进制的jar,还要去找源码,不仅浪费时间,而且可能找到的源码对不上版本。

3、最好是使用Eclipse maven插件,一些操作都可视化执行,比命令行简单多了,否则要记很多命令,也很费神,我深有体会!希望大家能尽快入门,少走弯路。


如果您觉得本文对您有益,请点击博文后的google广告或在博主微店(美鲜果店)订购一份水果以表感谢,对作者表示支持,谢谢!
  • 大小: 50.4 KB
  • 大小: 30.6 KB
  • 大小: 41.4 KB
  • 大小: 58.9 KB
  • 大小: 47.8 KB
  • 大小: 2.7 KB
  • 大小: 47.6 KB
  • 大小: 79.5 KB
  • 大小: 56.8 KB
  • 大小: 35.5 KB
分享到:
评论
18 楼 redhacker 2014-10-29  
楼主,想问一下访问这个http://localhost:9998/application.wadl
里面的内容是从哪里来的???
apwy111 写道
楼主,想问一下访问这个http://localhost:9998/application.wadl
里面的内容是从哪里来的???


<application xmlns="http://wadl.dev.java.net/2009/02">
<doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 1.18.1 02/19/2014 03:28 AM"/>
<grammars/>
<resources base="http://localhost:9998/">
<resource path="/myresource">
<method id="getIt" name="GET">
<response>
<representation mediaType="text/plain"/>
</response>
</method>
</resource>
</resources>
</application>

这个应该是自动生成的啊。类似于wsdl
17 楼 apwy111 2014-10-11  
楼主,想问一下访问这个http://localhost:9998/application.wadl
里面的内容是从哪里来的???


<application xmlns="http://wadl.dev.java.net/2009/02">
<doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 1.18.1 02/19/2014 03:28 AM"/>
<grammars/>
<resources base="http://localhost:9998/">
<resource path="/myresource">
<method id="getIt" name="GET">
<response>
<representation mediaType="text/plain"/>
</response>
</method>
</resource>
</resources>
</application>
16 楼 空谷悠悠 2014-09-17  
redhacker 写道
空谷悠悠 写道
jersey文档中提到:
Client instances are expensive resources. It is recommended a configured instance is reused for the creation of Web resources
这也是我关注的问题,如何保证避免每次调用资源去重新new一个client对象,文档中也给出了配置实例方案
ClientConfig cc = new DefaultClientConfig();
    cc.getProperties().put(
        ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
    Client c = Client.create(cc);

源码中Client.create(cc)静态方法中也是new的一个client,这里每次仍去创建一个新的对象了,貌似没有避免我上面提到的问题。
Q:jersey有实现避免重复创建client的方案吗?有,如果实现呢?


你可以通过工厂模式避免重复实例化Client类,也可以通过Spring声明式配置,使用Spring容器实例化一个单例的Client类。create的具体实现我没去看,但我上述的方式就可以解决你的问题。

直接单例模式我也说不上妥与不妥,如果这么除暴,文档没必要给出配置实例方案而忽略单例模式,我思考一个问题,能够保证为了一个session(客户端),创建一个实例。
15 楼 redhacker 2014-09-17  
空谷悠悠 写道
jersey文档中提到:
Client instances are expensive resources. It is recommended a configured instance is reused for the creation of Web resources
这也是我关注的问题,如何保证避免每次调用资源去重新new一个client对象,文档中也给出了配置实例方案
ClientConfig cc = new DefaultClientConfig();
    cc.getProperties().put(
        ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
    Client c = Client.create(cc);

源码中Client.create(cc)静态方法中也是new的一个client,这里每次仍去创建一个新的对象了,貌似没有避免我上面提到的问题。
Q:jersey有实现避免重复创建client的方案吗?有,如果实现呢?


你可以通过工厂模式避免重复实例化Client类,也可以通过Spring声明式配置,使用Spring容器实例化一个单例的Client类。create的具体实现我没去看,但我上述的方式就可以解决你的问题。
14 楼 空谷悠悠 2014-09-17  
jersey文档中提到:
Client instances are expensive resources. It is recommended a configured instance is reused for the creation of Web resources
这也是我关注的问题,如何保证避免每次调用资源去重新new一个client对象,文档中也给出了配置实例方案
ClientConfig cc = new DefaultClientConfig();
    cc.getProperties().put(
        ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
    Client c = Client.create(cc);

源码中Client.create(cc)静态方法中也是new的一个client,这里每次仍去创建一个新的对象了,貌似没有避免我上面提到的问题。
Q:jersey有实现避免重复创建client的方案吗?有,如果实现呢?
13 楼 redhacker 2014-09-05  
空谷悠悠 写道
请教一个问题:
   webResource.type(MediaType.APPLICATION_JSON).post(ClientRespnse.class,object)。这里obejct是单个对象的json形式,当然可以请求成功,但是批量新增时,往往是传递一个List<Object>,我将这里的List<Object>转成json形式,post请求就报错,难得jersey不支持这种方式吗?如果可以,正确的方式又该怎么样呢?


如果不支持某种类型,可实现相应的Reader,请参考:http://redhacker.iteye.com/blog/267604中的例子
12 楼 空谷悠悠 2014-08-29  
请教一个问题:
   webResource.type(MediaType.APPLICATION_JSON).post(ClientRespnse.class,object)。这里obejct是单个对象的json形式,当然可以请求成功,但是批量新增时,往往是传递一个List<Object>,我将这里的List<Object>转成json形式,post请求就报错,难得jersey不支持这种方式吗?如果可以,正确的方式又该怎么样呢?
11 楼 redhacker 2014-08-08  
it_palmer 写道
很好!期待以后继续进一步分享

嗯嗯。。谢谢支持!
10 楼 redhacker 2014-06-23  
suny0906 写道
很好,转发了

谢谢!
9 楼 redhacker 2014-06-23  
it_palmer 写道
很好!期待以后继续进一步分享


今年有点忙,继续发布博客的假话搁浅了,有时间还会继续发。。。
8 楼 it_palmer 2014-06-16  
很好!期待以后继续进一步分享
7 楼 suny0906 2013-11-11  
很好,转发了
6 楼 redhacker 2013-08-03  
冬天秋天 写道
按照你说手动添加可以找到quickstart项目骨架了
http://ldq2010-163-com.iteye.com/picture/126811
成功创建maven项目。
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	... 48 more
MultiException stack 4 of 4

运行Main.java 报这样一堆错误提示……,但是能够查看到wadl并在页面访问,得到Got it! 的输出。
不过看着这一堆报错,很不爽。


奇怪,我没有看到这个错误!
5 楼 冬天秋天 2013-08-02  
按照你说手动添加可以找到quickstart项目骨架了
http://ldq2010-163-com.iteye.com/picture/126811
成功创建maven项目。
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	... 48 more
MultiException stack 4 of 4

运行Main.java 报这样一堆错误提示……,但是能够查看到wadl并在页面访问,得到Got it! 的输出。
不过看着这一堆报错,很不爽。
4 楼 冬天秋天 2013-08-02  
mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.1

这些命令是在CMD 的命令行窗口输入吗?
3 楼 redhacker 2013-08-01  
冬天秋天 写道
我安装的maven插件找不到这个---选择项目的Maven原型(jersey-quickstart-grizzly)

搜的下面有个 add 的手动添加。
2 楼 redhacker 2013-08-01  
冬天秋天 写道
我安装的maven插件找不到这个---选择项目的Maven原型(jersey-quickstart-grizzly)

嗯,可能会出现这种情况的,不行你就照着下面的信息输进去。这种情况可能是eclipse自身导致的,没有初始化缓存过来,成功添加几次原型就好了。

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=2.1
1 楼 冬天秋天 2013-07-31  
我安装的maven插件找不到这个---选择项目的Maven原型(jersey-quickstart-grizzly)

相关推荐

    java Jersey框架初体验

    通过这次简单的体验,你可以感受到Jersey框架的便捷性和灵活性。Maven的使用使得项目管理和依赖管理变得简单,而Eclipse的Maven插件进一步简化了这些操作,避免了手动配置的麻烦。在深入学习Jersey的过程中,建议...

    jersey框架

    Jersey 框架是基于 Java 的开源 RESTful Web Service 框架,它遵循 JAX-RS(Java API for RESTful Web Services)规范,并且是 JSR 311 和 JSR 339 的参考实现。RESTful 服务旨在提供一种简洁、无状态、基于标准的...

    使用Jersey框架搭建Rest服务

    ### 使用Jersey框架搭建Rest服务 #### 编写目的 本文档旨在详细介绍如何利用Spring与Jersey框架构建RESTful Web服务。重点涵盖环境配置、Spring框架配置、Jersey与Spring的集成配置,以及通过前端Ajax调用REST服务...

    jersey框架介绍

    Jersey 框架是一个基于Java的RESTful Web服务开发框架,它的设计灵感来源于Roy Fielding博士在2000年提出的REST(Representational State Transfer)架构风格。REST是一种轻量级的网络应用架构,强调资源的概念,...

    jersey框架下载功能

    Jersey是Java世界中的一款轻量级RESTful Web服务框架,它是JAX-RS(Java API for RESTful Web Services)规范的一个实现。本篇文章将详细探讨如何使用Jersey来处理POST请求中的表单数据,并实现一个简单的下载功能。...

    jersey+spring+mybatis框架初使用

    【jersey+spring+mybatis框架初使用】 在IT行业中,开发Web应用程序时,我们经常使用各种框架来简化工作流程并提高效率。本教程将引导初学者了解如何整合jersey、spring和mybatis这三个强大的开源框架,以实现基本...

    基于restful框架jersey

    ### 基于RESTful框架Jersey的知识点详解 #### 一、Jersey RESTful框架简介 Jersey RESTful框架是一款开源的RESTful框架,它实现了JAX-RS(JSR 311 & JSR 339)规范。JAX-RS是一种Java API,用于开发RESTful web...

    jersey 1.9 框架源码

    Jersey是Java世界中的一款流行的RESTful Web服务框架,它基于JSR 311(Java API for RESTful Web Services)标准实现。本资源提供的"jersey 1.9 框架源码"是该框架的一个较早版本,对于学习和理解RESTful服务的实现...

    基于jersey搭建webservice框架

    【基于Jersey搭建WebService框架】 在Java开发中,构建RESTful Web服务时,Jersey是一个常用的框架。它作为Java EE的一部分,提供了实现 Representational State Transfer (REST) 架构风格的工具集。本教程将围绕...

    巧用 Jersey RESTful WebService框架解决文件上传乱码

    在IT行业中,RESTful WebService框架是开发网络应用的重要工具,Jersey作为Java平台上的一个开源框架,专门用于实现RESTful服务。本文将深入探讨如何巧妙利用Jersey框架解决文件上传时可能出现的乱码问题,同时也会...

    Jersey框架Getting Started

    ** Jersey框架Getting Started** Jersey 是一个开源的Java RESTful Web服务实现,它基于JSR 311(Java API for RESTful Web Services)标准。本文将深入介绍如何开始使用Jersey框架创建RESTful服务。 首先,理解...

    深入了解JAVA Jersey框架

    深入了解JAVA Jersey框架 JAVA Jersey框架是基于JAX-RS(JSR311)的开源参考实现,用于构建RESTful Web服务。它包含三个部分:核心服务器、核心客户端和集成。 Jersey框架主要用于处理业务逻辑层,提供了DI、子资源...

    基于springboot集成jersey的框架

    本篇文章将深入探讨如何基于SpringBoot集成Jersey框架,同时利用Redis作为缓存,Druid作为数据源连接池,MyBatis作为持久层框架,以及Log4j2进行日志管理,从而打造一个强大的微服务应用。 首先,SpringBoot简化了...

    Jersey+spring Demo

    【标题】"Jersey+Spring Demo" 是一个基于Java的Web服务开发实例,它整合了两个重要的技术框架:Jersey和Spring。这个示例旨在帮助开发者理解如何在J2EE环境中构建RESTful Web服务,同时利用Spring框架进行依赖注入...

    Java使用Jersey框架构建 RESTful Web服务返回json数据所需的jar包

    Java使用Jersey框架构建 RESTful Web服务返回json数据所需的jar包。Jackson-core-asl.jar / Jackson-jaxrs.jar / Jackson-mapper-asl.jar / Jackson-xc.jar / jersey-media-json-Jackson.jar

    Equinox OSGi应用嵌入Jersey框架搭建REST服务

    在本文中,我们将讨论如何在Equinox OSGi环境中嵌入Jersey框架来构建RESTful Web服务。Jersey是JAX-RS(Java API for RESTful Web Services)规范的参考实现,它提供了一种创建高效、高质量REST服务的方法。 首先,...

    jersey document

    本文主要是一份关于Java Jersey框架的学习指南,为初学者和希望深入学习Jersey框架的开发者提供详细的技术资料分享。Jersey是Java的一个开源的、实现了JAX-RS (JSR 370)规范的RESTful Web服务框架。它用于构建web...

Global site tag (gtag.js) - Google Analytics