Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范,是JAX-RS的参考实现,并且提供了更多的特性和工具,简化了RESTful service 和 client 的开发。

Jetty 是开源的servlet容器,它为基于Java的web组件例如JSP和servlet提供运行环境。用Java编写,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象内嵌在应用中,从而为独立运行(stand-alone)的Java应用提供网络和web连接。

故Servlet是两者组合使用的桥梁,下面是个简单的测试代码:

POM:

<jetty.version>8.1.9.v20130131</jetty.version>

        <!--jersey-->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.9</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.9</version>
</dependency>
<!-- jetty -->
<dependency>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp</artifactId>
<version>${jetty.version}</version>
</dependency>

---

WS实现类Hello.java

@Path("/hello")
public class Hello { /**
* 接收HTTP的GET请求
*
* @return 返回text/plain响应
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello world!";
} //访问路径 /hello/text/name123
@GET
@Path("/text/{name}")
@Produces(MediaType.TEXT_PLAIN)
public String hello(@PathParam("name") String name) throws Exception {
return "hello, " + name;
} //访问路径 /hello/json/name123
@GET
@Path("/json/{name}")
@Produces(MediaType.APPLICATION_JSON)
public String hello2(@PathParam("name") String name) throws Exception {
return "hello, " + name;
} //访问路径 /hello/xml/name123
@GET
@Path("/xml/{name}")
@Produces(MediaType.APPLICATION_XML)
public String hello3(@PathParam("name") String name) throws Exception {
return "hello, " + name;
} }

---

Jetty启动类JerseyTest.java

public class JerseyTest {

    public static void main(String[] args) throws Exception {
Server server = new Server();
SelectChannelConnector serverConnector = new SelectChannelConnector();
serverConnector.setPort(8080); ResourceConfig resourceConfig = new ResourceConfig(Hello.class); //Jersey类ServletContainer从HttpServlet继承,故可传入Jetty类ServletContextHandler.addServlet方法
ServletContainer servletContainer = new ServletContainer(resourceConfig);
server.addConnector(serverConnector); ServletContextHandler servletContextHandler = new ServletContextHandler();
servletContextHandler.addServlet(new ServletHolder(servletContainer), "/*");
server.setHandler(servletContextHandler); server.start();
server.join();
} }

---

浏览器访问路径: http://localhost:8080/hello/text/Likai

JAX-RS常用注解:

@GET
@PUT
@POST
@DELETE
@Path   uri路径 定义资源的访问路径,client通过这个路径访问资源。如:@Path("user")
@Produces   指定返回MIME格式 资源按照那种数据格式返回,如:@Produces(MediaType.APPLICATION_XML)
@Consumes   接受指定的MIME格式 只有符合这个参数设置的请求再能访问到这个资源。比如@Consumes("application/x-www-form-urlencoded")
@PathParam   uri路径参数 写在方法的参数中,获得请求路径参数。比如:@PathParam("username") String userName
@QueryParam   uri路径请求参数 写在方法的参数中,获得请求路径附带的参数。比如:@QueryParam("desc") String desc
@DefaultValue   设置@QueryParam参数的默认值 如果@QueryParam没有接收到值,就使用默认值。比如:@DefaultValue("description") @QueryParam("desc") String desc
@FormParam   form传递的参数 接受form传递过来的参数。比如:@FormParam("name") String userName
@BeanParam   通过Bena的形式传递参数 接受client传递的bean类型的参数,同时这个bean可以在属性上配置@FormParam用以解决client的属性名称和bean的属性名称不一致的问题。比如:@BeanParam User user
@Context   获得一些系统环境信息 通过@Context可以获得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等
@XmlRootElement   将bean转换为xml 如果要将bean以xml或json的格式返回,必须要这个注解。比如:@XmlRootElement public class User{...}
@XmlElements
@XmlElement   

参考

http://www.eclipse.org/jetty/

https://jersey.github.io/

end

使用Jersey和Jetty开发RESTful Web service的更多相关文章

  1. 用Jersey为Android客户端开发Restful Web Service

    平时在做Android客户端的时候经常要与服务器之间通信,客户端通过服务端提供的接口获取数据,然后再展示在客户端的界面上,作为Android开发者,我们平时更多的是关注客户端的开发,而对服务端开发的关 ...

  2. web基础----->jersey整合jetty开发restful应用(一)

    这里介绍一个jersey与jetty整合开发restful应用的知识.将过去和羁绊全部丢弃,不要吝惜那为了梦想流下的泪水. jersey与jetty的整合 一.创建一个maven项目,pom.xml的 ...

  3. 如何使用 JMeter 调用你的 Restful Web Service?进行简单的压力测试和自动化测试

    表述性状态传输(REST)作为对基于 SOAP 和 Web 服务描述语言(WSDL)的 Web 服务的简单替代,在 Web 开发上得到了广泛的接受.能够充分证明这点的是主流 Web 2.0 服务提供商 ...

  4. 使用JAX-RS创建RESTful Web Service

    guice resteasy http://www.cnblogs.com/ydxblog/p/7891224.html http://blog.csdn.net/withiter/article/d ...

  5. 【转】 Build a RESTful Web service using Jersey and Apache Tomcat 2009

    Build a RESTful Web service using Jersey and Apache Tomcat Yi Ming Huang with Dong Fei Wu, Qing GuoP ...

  6. JAX-RS 方式的 RESTful Web Service 开发

    JAX-RS 方式的 RESTful Web Service 开发 ——基于 CXF+Spring 的实现 Web Service 目前在风格上有两大类,一个是基于 SOAP 协议,一个是完全遵循 H ...

  7. RESTful Web Service实战 小结1

    1 REST的基本实现形式HTTP+URI+XML,但不是唯一形式.XML后来被Json格式替代.REST是一中架构风格(Representational State Transfer,表述性状态转移 ...

  8. <<Java RESTful Web Service实战>> 读书笔记

    <<Java RESTful Web Service实战>> 读书笔记 第一章   JAX-RS2.0入门 REST (Representational State ransf ...

  9. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

    转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...

随机推荐

  1. JMeter学习(八)JDBC Request

    [step_1]:“测试计划”--(右键)à添加à线程组: [step_2]:选择step_1中添加的线程组—(右键)à添加à配置元件àJDBC Connection Configuration,添加 ...

  2. codeforces 155D 质数

    题意:有编号1到n的n台机器,有m次操作,操作为开启或关闭机器,成功开启机器k的条件为k和所有已经开启的机器编号互质. 思路:vis[i]数组存放占领i这个位置的机器编号,因为所有开启的机器的编号互质 ...

  3. POJ 1459 网络流 EK算法

    题意: 2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20 2 1 1 2 表示 共有2个节点,生产能量的点1个,消耗能量的点1个, 传递能量的通道2条:(0,1)20 (1,0) ...

  4. Eclipse Validating缓慢的优化

    使用Eclipse的人基本都有这种情况,如图: 各种等待有木有,各种崩溃啊有木有,反正我是觉得挺烦的,但是也不知道是干嘛的,如果取消了,造成程序出问题,就是给自己找麻烦,我知道这个事情肯定是可以关的, ...

  5. 百度竞价推广URL通配符使用说明

    {keywordid} 被替换为触发该创意的关键词ID(全局唯一ID,不是字面ID),当没有对应的keywordid时,替换为0. {creative} 被替换为所点击的创意ID(全局唯一ID). 2 ...

  6. js实现级联菜单(没有后台)

    html代码: <!-- js级联菜单 --> <div id="cascMenu"> <select id="select" o ...

  7. elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)

    (1)在倒排索引中查找搜索串,获取document list date来举例 word doc1 doc2 doc3 2017-01-01 * *2017-02-02  *   *2017-03-03 ...

  8. JavaWeb -- Jsp 自定义标签的使用

    Jsp中不要有一行Java代码, 需要的Java代码都要封到自定义标签中. 自定义标签的作用: a.  自定义标签除了可以移除jsp页面java代码外,它也可以实现以上功能. b.  控制jsp页面某 ...

  9. jQuery download file

    jQuery.download = function (url, method, p, c, e, i, o, goodsType, reciveUser, suplier) { jQuery('&l ...

  10. Linux软件安装(一)

    软件安装方式: 1. rpm方式 该方式软件安装本质与Windows下安装软件方式一致,就是把软件包里面的二进制代码文件复制到系统指定目录(如 C://program files) 优点:软件安装非常 ...