首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET Framework >

Jersey framework开发RESTFUL施用

2012-08-29 
Jersey framework开发RESTFUL应用本文演示环境为eclipse + Maven插件 + Jersey framework。本文只关注Jerse

Jersey framework开发RESTFUL应用

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


1. 在eclipse中创建Maven项目


Jersey framework开发RESTFUL施用

2.单击"Next"


Jersey framework开发RESTFUL施用

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

Jersey framework开发RESTFUL施用

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


Jersey framework开发RESTFUL施用

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


Jersey framework开发RESTFUL施用

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


Jersey framework开发RESTFUL施用

7. 最终设置结果如下:


Jersey framework开发RESTFUL施用

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

Jersey framework开发RESTFUL施用
<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>
Jersey framework开发RESTFUL施用

9. 添加基本POJO类Student:

Jersey framework开发RESTFUL施用
 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 ?
Jersey framework开发RESTFUL施用?

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

Jersey framework开发RESTFUL施用
 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     @GET38     @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         else44             return new Student(0, "Nil", "Nil");45     }46     47     @GET48     @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     @POST57     @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     @DELETE66     @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     @PUT77     @Path("put")78     @Produces("text/plain")79     public String putStudent(@QueryParam("studentid") int studentid,80                              @QueryParam("name") String name,81                              @QueryParam("dept") String dept82                              ) {83         logger.info("Receieving quest for putting student: " + studentid);84         if(!studentList.containsKey(studentid))85             return "failed!";86         else87             studentList.put(studentid, new Student(studentid, name, dept));88         89         return String.valueOf(studentid);90     }    91 }92 
Jersey framework开发RESTFUL施用

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

Jersey framework开发RESTFUL施用
<!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>
Jersey framework开发RESTFUL施用?

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


Jersey framework开发RESTFUL施用

13. 测试

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


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

Jersey framework开发RESTFUL施用
<students>  <student>    <dept>CS</dept>    <id>1</id>    <name>Frank</name>  </student>  <student>    <dept>Math</dept>    <id>2</id>    <name>Jersey</name>  </student></students>
Jersey framework开发RESTFUL施用输入:http://localhost:8080/jerseywstest/rest/students/1则会返回一个学生的信息。

13.2) 测试POST方法。

添加一个testpost.htm文件

Jersey framework开发RESTFUL施用
<!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>
Jersey framework开发RESTFUL施用


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

13.3) PUT和DELETE方法的测试

添加一个Junit测试类

Jersey framework开发RESTFUL施用
 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     @Test19     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     @Test28     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 ?

热点排行