RESTful Web Service是轻量级的service,可以通过HTTP的方式来实现对后台数据库的CRUD,

在Web开发和移动开发时使用的比较广泛,非常方便。

在Java世界里, JAX-RS规范定义了对RESTful Web Service的实现。

Oracle的Jersey框架则是对JAX-RS的一个实现。

下面我们学习如何使用Jersey来创建RESTful WebService。

我的开发环境:

Eclipse Juno, Java 1.6, Tomcat 7.0, Jersey 1.18

1. 创建第一个RESTful web service

1.1创建一个叫jersey1的Dynamic Web Project.

1.2在WEB-INF/lib文件夹中导入jersey的包。

1.3创建web.xml,定义Jersey的使用。

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3. <display-name>sample</display-name>
  4. <servlet>
  5. <servlet-name>Jersey REST Service</servlet-name>
  6. <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  7. <init-param>
  8. <param-name>com.sun.jersey.config.property.packages</param-name>
  9. <param-value>sample</param-value>
  10. </init-param>
  11. <load-on-startup>1</load-on-startup>
  12. </servlet>
  13. <servlet-mapping>
  14. <servlet-name>Jersey REST Service</servlet-name>
  15. <url-pattern>/rest/*</url-pattern>
  16. </servlet-mapping>
  17. </web-app>

上面这个XML是Jersey 1.x版本使用的,现在Jersey已经更新到了2.x版本,如果用Jersey2.x版本,web.xml需要按照http://blog.csdn.net/sdujava2011/article/details/70941256中所述来配置,本文中下面的web.xml同理。

1.4创建Java class

[java] view plaincopy
  1. package sample;
  2. import javax.ws.rs.GET;
  3. import javax.ws.rs.Path;
  4. import javax.ws.rs.Produces;
  5. import javax.ws.rs.core.MediaType;
  6. //Sets the path to base URL + /hello
  7. @Path("/hello")
  8. public class Hello {
  9. // This method is called if TEXT_PLAIN is request
  10. @GET
  11. @Produces(MediaType.TEXT_PLAIN)
  12. public String sayPlainTextHello() {
  13. return "Hello Jersey";
  14. }
  15. // This method is called if XML is request
  16. @GET
  17. @Produces(MediaType.TEXT_XML)
  18. public String sayXMLHello() {
  19. return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
  20. }
  21. // This method is called if HTML is request
  22. @GET
  23. @Produces(MediaType.TEXT_HTML)
  24. public String sayHtmlHello() {
  25. return "<html> " + "<title>" + "Hello Jersey" + "</title>"
  26. + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
  27. }
  28. }

1.5.创建测试应用

[java] view plaincopy
  1. package sample;
  2. import java.net.URI;
  3. import javax.ws.rs.core.MediaType;
  4. import javax.ws.rs.core.UriBuilder;
  5. import com.sun.jersey.api.client.Client;
  6. import com.sun.jersey.api.client.ClientResponse;
  7. import com.sun.jersey.api.client.WebResource;
  8. import com.sun.jersey.api.client.config.ClientConfig;
  9. import com.sun.jersey.api.client.config.DefaultClientConfig;
  10. public class Test {
  11. public static void main(String[] args) {
  12. ClientConfig config = new DefaultClientConfig();
  13. Client client = Client.create(config);
  14. WebResource service = client.resource(getBaseURI());
  15. // Fluent interfaces
  16. System.out.println(service.path("rest").path("hello")
  17. .accept(MediaType.TEXT_PLAIN).get(ClientResponse.class)
  18. .toString());
  19. // Get plain text
  20. System.out.println(service.path("rest").path("hello")
  21. .accept(MediaType.TEXT_PLAIN).get(String.class));
  22. // Get XML
  23. System.out.println(service.path("rest").path("hello")
  24. .accept(MediaType.TEXT_XML).get(String.class));
  25. // The HTML
  26. System.out.println(service.path("rest").path("hello")
  27. .accept(MediaType.TEXT_HTML).get(String.class));
  28. }
  29. private static URI getBaseURI() {
  30. return UriBuilder.fromUri(
  31. "http://localhost:8080/jersey1").build();
  32. }
  33. }

1.6. 部署项目到tomcat后,运行Test程序:

2.然后来结合JAXB来创建RESTful web service.

JAX-RS可以直接通过JAXB来创建XML和JSON的输出。

JAXB是Java对xml的实现。

2.1 创建叫jersey2的Dynamic Web Project,导入jersey库。

2.2 创建一个对象,这里注意下,加上@XmlRootElement就可以了。

[java] view plaincopy
  1. package sample;
  2. import javax.xml.bind.annotation.XmlRootElement;
  3. @XmlRootElement
  4. public class Todo {
  5. private String summary;
  6. private String description;
  7. public String getSummary() {
  8. return summary;
  9. }
  10. public void setSummary(String summary) {
  11. this.summary = summary;
  12. }
  13. public String getDescription() {
  14. return description;
  15. }
  16. public void setDescription(String description) {
  17. this.description = description;
  18. }
  19. }

2.3 创建一个class来调用jersey

[java] view plaincopy
  1. package sample;
  2. import javax.ws.rs.GET;
  3. import javax.ws.rs.Path;
  4. import javax.ws.rs.Produces;
  5. import javax.ws.rs.core.MediaType;
  6. @Path("/todo")
  7. public class TodoResource {
  8. // This method is called if XMLis request
  9. @GET
  10. @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
  11. public Todo getXML() {
  12. Todo todo = new Todo();
  13. todo.setSummary("This is my first todo");
  14. todo.setDescription("This is my first todo");
  15. return todo;
  16. }
  17. // This can be used to test the integration with the browser
  18. @GET
  19. @Produces({ MediaType.TEXT_XML })
  20. public Todo getHTML() {
  21. Todo todo = new Todo();
  22. todo.setSummary("This is my first todo");
  23. todo.setDescription("This is my first todo");
  24. return todo;
  25. }
  26. }

2.4 web.xml文件

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. id="WebApp_ID" version="2.5">
  6. <display-name>sample</display-name>
  7. <servlet>
  8. <servlet-name>Jersey REST Service</servlet-name>
  9. <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
  10. <init-param>
  11. <param-name>com.sun.jersey.config.property.packages</param-name>
  12. <param-value>sample</param-value>
  13. </init-param>
  14. <load-on-startup>1</load-on-startup>
  15. </servlet>
  16. <servlet-mapping>
  17. <servlet-name>Jersey REST Service</servlet-name>
  18. <url-pattern>/rest/*</url-pattern>
  19. </servlet-mapping>
  20. </web-app>

2.5 部署项目,然后通过浏览器来测试

输入url: http://localhost:8080/jersey2/rest/todo

可以看到RESTful web service的输出:

为了更清楚一点,我用Chrome浏览器的Postman来测试一下,这是一个RESTful的客户端。

小结:

可以看到在Java中,可以通过JAX-RS+JAXB非常方便的实现RESTful web service。

直接在对象中定义url以及get,post,put,delete等方法就行了。

本文转自http://blog.csdn.net/starshus/article/details/22644249,所有权力归原作者所有。

使用Jersey来创建RESTful WebService相关推荐

  1. Jersey构建Java RestFul Webservice基础学习教程

    1.用Jersey构建RESTful服务1–HelloWorld http://www.waylau.com/jersey-restful-helloworld/ 2.用Jersey构建RESTful ...

  2. java 创建restful_使用Java创建RESTful Web Service

    [RESTful Web Service是轻量级的service,可以通过HTTP的方式来实现对后台数据库的CRUD,在Web开发和移动开发时使用的比较广泛,非常方便.在Java世界里, JAX-RS ...

  3. CXF发布restful WebService的入门例子(服务器端)

    研究了两天CXF对restful的支持.    现在,想实现一个以  http://localhost:9999/roomservice 为入口,  http://localhost:9999/roo ...

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

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

  5. 使用CXF与Spring集成实现RESTFul WebService

    以下引用与网络中!!! 一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. ...

  6. SpringBoot2.x系列教程38--整合JAX-RS之利用Jersey框架实现RESTful

    SpringBoot2.x系列教程38--整合JAX-RS之利用Jersey框架实现RESTful 作者:一一哥 一. JAX-RS与Jersey简介 1. JAX-RS简介 在Java EE 6 中 ...

  7. WCF实现RESTFul Web Service(三):RESTful WebService VS SOAP WebService

    SOAP SOAP最早是针对RPC的一种解决方案,简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等).但是随着SOAP作为WebService的广泛应用, ...

  8. 用 Java 技术创建 RESTful Web 服务--转载

    简介 JAX-RS (JSR-311) 是为 Java EE 环境下的 RESTful 服务能力提供的一种规范.它能提供对传统的基于 SOAP 的 Web 服务的一种可行替代. 在本文中,了解 JAX ...

  9. spring3创建RESTFul Web Service

    spring 3支持创建RESTFul Web Service,使用起来非常简单.不外乎一个@ResponseBody的问题. 例如:后台controller: 做一个JSP页面,使用ajax获取数据 ...

最新文章

  1. 2019攻防世界web新手区
  2. 如何在C#Windows控制台应用程序中更新当前行?
  3. linux查看安装的所有内核,Linux怎么查看系统已安装内核
  4. [SharePoint]ExcelService未响应或拒绝访问
  5. 信息系统项目管理知识--项目人力资源管理
  6. 关于测试行业的零星思考
  7. Day4 python基础
  8. 6-day6-函数-1
  9. Servlet_urlpartten配置
  10. 开源mindmap_Java开发人员访谈的MindMap
  11. 重新添加MySQL服务
  12. ReactJs 第三章 React元素的渲染
  13. (19)System Verilog模块设计示例
  14. 8个深度学习方面的最佳实践
  15. C# Linq处理list数据
  16. Magento 自定义EMS FEDEX DHL UPS扩展 第三章
  17. Android EditText属性大全
  18. 同步Chrome浏览器插件
  19. 基于Node.js的ORM框架 Prisma的上手使用
  20. Codeforces 982E Billiard 扩展欧几里德

热门文章

  1. input和textarea的区别
  2. PyQt窗体视觉样式
  3. java开发13寸_Java 从入门到进阶之路(二十九)
  4. ip找计算机名 linux,如何从IP地址中查找LAN中的计算机名称?
  5. 贪心——跳跃游戏 II(Leetcode 45)
  6. 字符串——垂直柱状图(洛谷 P1598)
  7. C语言课后习题(69)
  8. C语言课后习题(30)
  9. java检测文件修改_Java 实例 – 查看主机指定文件的最后修改时间
  10. python课后题答案第二章_Python编程:从入门到实践——练习题答案(第二章)