Jersey framework开发RESTFUL应用

本文演示环境为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  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值