`

Jersey framework开发RESTFUL应用

    博客分类:
  • Java
 
阅读更多

本文演示环境为eclipse + Maven插件 + Jersey framework。本文只关注Jersey的使用,所以只使用类中定义的静态数据做演示。请在使用时修改我的代码。如果你的eclipse中没有安装 Maven插件,请关注我的博客,我马上就会推出Maven+eclipse的开发教程。


1. 在eclipse中创建Maven项目


2.单击"Next"


3. 选择Maven项目类型为"maven-archetype-webapp"

4. 输入项目相关的Maven设置


5. 分别创建src/main下java文件夹以及src下test文件夹


6. 设置src/main/java和src/test/java为source folder


7. 最终设置结果如下:


8. 修改pom.xml,添加Maven相应依赖库

复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.jianxi.tutorials.jerseyws</groupId> <artifactId>jerseywstest</artifactId> <packaging>war</packaging> <version>1.0</version> <name>jerseywstest Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>asm</groupId> <artifactId>asm</artifactId> <version>3.2</version> </dependency> </dependencies> <build> <finalName>jerseywstest</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <configuration> <warFile>target/jerseywstest.war</warFile> </configuration> </plugin> </plugins> </build> </project>
复制代码

9. 添加基本POJO类Student:

复制代码
1 package net.jianxi.tutorials.jerseyws.metadata; 2 3  import javax.xml.bind.annotation.XmlRootElement; 4 5 @XmlRootElement 6  public class Student { 7 private int id; 8 private String name; 9 private String dept; 10 11 public int getId() { 12 return id; 13 } 14 15 public Student() { 16 } 17 18 public Student(int id, String name, String dept) { 19 super(); 20 this.id = id; 21 this.name = name; 22 this.dept = dept; 23 } 24 public void setId(int id) { 25 this.id = id; 26 } 27 public String getName() { 28 return name; 29 } 30 public void setName(String name) { 31 this.name = name; 32 } 33 public String getDept() { 34 return dept; 35 } 36 public void setDept(String dept) { 37 this.dept = dept; 38 } 39 40 } 41  
复制代码
 

10. 添加一个REST web服务实现类RestWsDemo:

复制代码
1 package net.jianxi.tutorials.jerseyws; 2 3  import java.util.ArrayList; 4  import java.util.HashMap; 5  import java.util.List; 6  import java.util.Map; 7 8  import javax.ws.rs.DELETE; 9  import javax.ws.rs.FormParam; 10  import javax.ws.rs.GET; 11  import javax.ws.rs.POST; 12  import javax.ws.rs.PUT; 13 import javax.ws.rs.Path; 14 import javax.ws.rs.PathParam; 15 import javax.ws.rs.Produces; 16 import javax.ws.rs.QueryParam; 17 import javax.ws.rs.core.MediaType; 18 19 import net.jianxi.tutorials.jerseyws.metadata.Student; 20 21 import org.apache.log4j.Logger; 22 23 24 @Path("/students") 25 public class RestWsDemo { 26 private static Logger logger = Logger.getLogger(RestWsDemo.class); 27 private static int index = 1; 28 private static Map<Integer,Student> studentList = new HashMap<Integer, Student>(); 29 30 public RestWsDemo() { 31 if(studentList.size()==0) { 32 studentList.put(index, new Student(index++, "Frank", "CS")); 33 studentList.put(index, new Student(index++, "Jersey", "Math")); 34 } 35 } 36 37 @GET 38 @Path("{studentid}") 39 @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 40 public Student getMetadata(@PathParam("studentid") int studentid) { 41 if(studentList.containsKey(studentid)) 42 return studentList.get(studentid); 43 else 44 return new Student(0, "Nil", "Nil"); 45 } 46 47 @GET 48 @Path("list") 49 @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) 50 public List<Student> getAllStudents() { 51 List<Student> students = new ArrayList<Student>(); 52 students.addAll(studentList.values()); 53 return students; 54 } 55 56 @POST 57 @Path("add") 58 @Produces("text/plain") 59 public String addStudent(@FormParam("name") String name, 60 @FormParam("dept") String dept) { 61 studentList.put(index, new Student(index++, name, dept)); 62 return String.valueOf(index-1); 63 } 64 65 @DELETE 66 @Path("delete/{studentid}") 67 @Produces("text/plain") 68 public String removeStudent(@PathParam("studentid") int studentid) { 69 logger.info("Receieving quest for deleting student: " + studentid); 70 71 Student removed = studentList.remove(studentid); 72 if(removed==null) return "failed!"; 73 else return "true"; 74 } 75 76 @PUT 77 @Path("put") 78 @Produces("text/plain") 79 public String putStudent(@QueryParam("studentid") int studentid, 80 @QueryParam("name") String name, 81 @QueryParam("dept") String dept 82 ) { 83 logger.info("Receieving quest for putting student: " + studentid); 84 if(!studentList.containsKey(studentid)) 85 return "failed!"; 86 else 87 studentList.put(studentid, new Student(studentid, name, dept)); 88 89 return String.valueOf(studentid); 90 } 91 } 92
复制代码


11. 修改src/main/webapp/WEB-INF/web.xml文件如下:

复制代码
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>jerseyws</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> </init-param> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>net.jianxi.tutorials.jerseyws</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jerseyws</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
复制代码
 

12. 运行Maven package任务,构建war文件,部署war应用到你的Web服务器。


13. 测试

我马上就会推出如何用SoapUI工具测试Jersey Web服务的教程。这里这介绍简单的测试方法。


13.1) 对于GET,可以直接通过浏览器进行测试,在浏览器中直接输入:http://localhost:8080/jerseywstest/rest/students/list, 你应该看到返回的XML数据:

复制代码
<students> <student> <dept>CS</dept> <id>1</id> <name>Frank</name> </student> <student> <dept>Math</dept> <id>2</id> <name>Jersey</name> </student> </students>
复制代码
输入:http://localhost:8080/jerseywstest/rest/students/1则会返回一个学生的信息。

13.2) 测试POST方法。

添加一个testpost.htm文件

复制代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <form action="/jerseywstest/rest/students/add" method="post"> <input type="text" id="name" name="name"/><br/> <input type="text" id="dept" name="dept"/><br/> <input type= "submit"/> </form> </body> </html>
复制代码



 提交后你在用list方法就可以看到数据的变化。

13.3) PUT和DELETE方法的测试

添加一个Junit测试类

复制代码
1 package net.jianxi.tutorials.jerseyws; 2 3 4  import javax.ws.rs.core.MultivaluedMap; 5 6  import org.junit.Before; 7  import org.junit.BeforeClass; 8  import org.junit.Test; 9 10  import com.sun.jersey.api.client.Client; 11  import com.sun.jersey.api.client.ClientResponse; 12  import com.sun.jersey.api.client.WebResource; 13  import com.sun.jersey.core.util.MultivaluedMapImpl; 14 15  public class RestWsDemoTest { 16 private String url = "http://localhost:8080/jerseywstest/rest/students"; 17 18 @Test 19 public void testDelete() { 20 Client client = Client.create(); 21 WebResource webResource = client.resource(url + "/delete/1"); 22 ClientResponse response = webResource.delete(ClientResponse.class); 23 24 System.out.println("Response for delete request: " + response.getStatus()); 25 } 26 27 @Test 28 public void testPut() { 29 Client client = Client.create(); 30 WebResource webResource = client.resource(url + "/put"); 31 MultivaluedMap queryParams = new MultivaluedMapImpl(); 32 queryParams.add("studentid", "2"); 33 queryParams.add("name", "nametest"); 34 queryParams.add("dept", "depttest"); 35 ClientResponse response = webResource.queryParams(queryParams).put(ClientResponse.class, "foo:test"); 36 System.out.println("Response for put request: " + response.getStatus()); 37 } 38 } 39  
分享到:
评论

相关推荐

    使用Maven和Jersey Framework开发REST风格Web Service

    在IT行业中,开发RESTful Web服务是常见的任务,它允许应用程序通过HTTP协议交换数据。本文将深入探讨如何使用Maven和Jersey框架来构建这样的服务。Maven是Java项目管理和综合工具,而Jersey则是Java EE中用于实现...

    java jersey spring 集成 开发restful API 服务

    Spring是Java企业级应用开发的基石,它提供了依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)等功能,极大地简化了项目构建。Spring还包含了Spring MVC模块,用于构建Web应用,但与...

    jersey实现restful简单实例

    Jersey通过提供一组JAX-RS(Java API for RESTful Web Services)实现,使得开发人员能够方便地创建和部署RESTful服务。 一、JAX-RS简介 JAX-RS是Java标准,定义了如何在Java应用中创建RESTful服务的API。它通过...

    使用SpringBoot整合jersey 实现Restful web service.同时整合springmvc。

    在本文中,我们将深入探讨如何使用SpringBoot框架与Jersey库整合来实现RESTful Web服务,并同时集成Spring MVC。这将使我们能够构建一个高效、灵活的后端系统,为客户端提供API接口。 首先,SpringBoot是Spring框架...

    jersey的开发包

    此“jersey的开发包”包含了所有必要的组件和库,可以帮助开发者快速搭建并运行RESTful服务。 REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,用于分布式系统之间...

    基于restful框架jersey

    ### 基于RESTful框架Jersey的知识点详解 #### 一、Jersey ...通过以上介绍,我们可以看到Jersey RESTful框架的强大功能以及如何将其与Spring MVC框架完美结合,为开发高效、可靠的RESTful服务提供了有力的支持。

    jersey 开发所需jar

    Jersey是Oracle公司推出的一款基于Java的RESTful Web服务框架,它允许开发者轻松地构建和部署RESTful应用程序。REST(Representational State Transfer)是一种轻量级的网络通信协议,广泛应用于现代Web服务开发中,...

    RESTFul.Web.Service.Development.with.Jersey.2

    This book provides a comprehensive introduction to Jersey framework (an implementation of JAX-RS specification) as the application development framework for RESTFul web service development. This book ...

    java+restful+Jersey+webservice 远程调用

    Jersey是Sun Microsystems(现已被Oracle收购)开发的开源项目,它是JAX-RS(Java API for RESTful Web Services)规范的参考实现。JAX-RS为创建RESTful服务提供了一套标准的注解,使得开发者可以轻松地将HTTP方法...

    jersey所有的jar包

    11. **jersey-test-framework**: 为开发人员提供了测试Jersey应用程序的框架。 12. **jersey-test-framework-provider-grizzly2**: 允许在Grizzly HTTP服务器上运行Jersey测试。 13. **jersey-test-framework-...

    使用Jersey框架搭建Rest服务

    - **Flex开发环境**:FlashBuilder 4 Plugin,虽然文档未提及具体用途,但此工具适用于Flex应用的开发。 - **JDK**:JDK 6.0,提供Java开发所需的基础环境。 - **J2EE**:Tomcat 6,作为Web应用服务器。 - **应用...

    jersey所需jar包

    `jersey-test-framework-provider-grizzly2.jar` 和 `jersey-test-framework-core.jar` 提供了内置的测试框架,可以帮助开发者在不部署到服务器的情况下测试 RESTful 服务。 综上所述,这个压缩包包含的 JAR 文件...

    RESTFUL_API_设计开发

    RESTful API设计开发是现代Web服务开发中的一个重要概念,它基于Representational State Transfer(表述性状态转移)架构原则,提供了一种简洁、可扩展且无状态的接口设计方式。Jersey是Java平台上的一个开源框架,...

    jax-rs-boilerplate:这个项目是一个小型的JAX-RS样板,结合了Spring Framework,Hibernate和Jersey来构建Restful Web服务。 应用程序服务器是Jetty,数据库服务器是MySQL。 通过应用MVC和DAO模型,可以轻松扩展和维护该项目

    这个项目是一个小型的JAX-RS样板,结合了Spring Framework,Hibernate和Jersey来构建Restful Web服务。 应用程序服务器是Jetty,数据库服务器是MySQL。 通过应用MVC和DAO模型,可以轻松扩展和维护该项目。

    jersey-archive-1.8.rar

    这个“jersey-archive-1.8.rar”压缩包包含了 Jersey 1.8 版本的所有 JAR 包,用于支持开发和运行基于 Jersey 的 RESTful 应用程序。 JAR (Java Archive) 文件是 Java 平台特有的归档格式,用于打包多个 Java 类、...

    jersey所有jar包下载

    7. **测试支持**:Jersey 提供了 Test Framework,可以在不部署到服务器的情况下对 RESTful 服务进行单元测试和集成测试。 8. **模块化**:Jersey 采用模块化设计,允许按需选择和引入所需的功能模块,减少不必要的...

    RESTful.jar

    RESTful.jar是一个封装了RESTful服务核心功能的Java应用程序,它在软件开发领域,尤其是Web服务开发中扮演着重要角色。REST(Representational State Transfer,表述性状态转移)是一种网络应用设计风格和开发方式,...

    jersey1.18 jar包

    标签"jersey rest"进一步明确了这个压缩包与RESTful服务开发有关,Jersey通过提供一套完整的API,简化了RESTful服务的实现,如支持GET、POST、PUT、DELETE等HTTP方法,以及JSON、XML数据格式的处理。 在压缩包的...

Global site tag (gtag.js) - Google Analytics