1. 程式人生 > >[JavaWEB]Rest學習記錄——Jersey學習(1)

[JavaWEB]Rest學習記錄——Jersey學習(1)

建立第一個JerseyWebService

eclipse + Maven外掛 + Jersey framework

  • 建立一個Maven專案
  • 選擇專案的ArcheType原型(jersey-quickstart-grizzly)
  • 填寫專案資訊,填寫完點選“Finish”
  • Eclipse位址列右下方可看到專案正在生成的進度條
  • 專案生成成功,檢視專案目錄結構
    -Main.java是grizzly web server啟動的Java小應用程式
    “F:\EclipseCode\jerseyTest\src\main\java\com\bxl\group\jerseyTest\Main.java”
    -MyResource是自動生成第一個REST Resource類,包含了一個簡單的GET請求的資源

    “F:\EclipseCode\jerseyTest\src\main\java\com\bxl\group\jerseyTest\MyResource.java”

修改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>com.bxl.group</groupId> <artifactId>jerseyTest</artifactId> <packaging>jar</packaging> <version>0.0.1-SNAPSHOT</version> <name>jerseyTest</name> <url>http://maven.apache.org</url
>
<dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey</groupId> <artifactId>jersey-bom</artifactId> <version>${jersey.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-grizzly2-http</artifactId> </dependency> <!-- uncomment this to get JSON support: <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-moxy</artifactId> </dependency> --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</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>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <scope>test</scope> </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>jerseyTest</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <inherited>true</inherited> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.bxl.group.jerseyTest.Main</mainClass> </configuration> </plugin> </plugins> </build> <properties> <jersey.version>2.1</jersey.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> </project>

新增基本類Student

/**
 * @author ShirleyPaul
 * @date : 2017年2月16日 上午11:45:44
 */
package com.bxl.group.jerseyTest;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
 public class Student {
    private int id;
    private String name;
    private String dept;

    public int getId() {
        return id;
    }

    public Student() {
    }

    public Student(int id, String name, String dept) {
        super();
        this.id = id;
        this.name = name;
        this.dept = dept;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDept() {
        return dept;
    }
    public void setDept(String dept) {
        this.dept = dept;
    }

}

新增一個REST web服務實現類RestDemo

/**
 * @author ShirleyPaul
 * @date : 2017年2月16日 上午11:46:14
 */
package com.bxl.group.jerseyTest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import com.bxl.group.jerseyTest.Student;

import org.apache.log4j.Logger;


@Path("/students")
public class RestDemo {
   private static Logger logger = Logger.getLogger(RestDemo.class);
   private static int index = 1;
   private static Map<Integer,Student> studentList = new HashMap<Integer, Student>();

   public RestDemo() {
       if(studentList.size()==0) {
           studentList.put(index, new Student(index++, "Baoxl",  "CS"));
           studentList.put(index, new Student(index++, "ShirleyPaul", "Math"));
       }
   }

   @GET
   @Path("{studentid}")
   @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
   public Student getMetadata(@PathParam("studentid") int studentid) {
       if(studentList.containsKey(studentid))
           return studentList.get(studentid);
       else
           return new Student(0, "Nil", "Nil");
   }

   @GET
   @Path("list")
   @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
   public List<Student> getAllStudents() {
       List<Student> students = new ArrayList<Student>();
       students.addAll(studentList.values());
       return students;
   }

   @POST
   @Path("add")
   @Produces("text/plain")
   public String addStudent(@FormParam("name") String name,
                            @FormParam("dept") String dept) {
       studentList.put(index, new Student(index++, name, dept));
       return String.valueOf(index-1);
   }

   @DELETE
   @Path("delete/{studentid}")
   @Produces("text/plain")
   public String removeStudent(@PathParam("studentid") int studentid) {
       logger.info("Receieving quest for deleting student: " + studentid);

       Student removed = studentList.remove(studentid);
       if(removed==null) return "failed!";
       else   return "true";
   }    

   @PUT
   @Path("put")
   @Produces("text/plain")
   public String putStudent(@QueryParam("studentid") int studentid,
                            @QueryParam("name") String name,
                            @QueryParam("dept") String dept
                            ) {
       logger.info("Receieving quest for putting student: " + studentid);
       if(!studentList.containsKey(studentid))
           return "failed!";
       else
           studentList.put(studentid, new Student(studentid, name, dept));

       return String.valueOf(studentid);
   }    
}

修改web.xml檔案
“-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”
“http://java.sun.com/dtd/web-app_2_3.dtd” >


Archetype Created Web Application


jersey
com.sun.jersey.spi.container.servlet.ServletContainer

    <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>com.bxl.group.jerseyTest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>  

執行

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<application xmlns="http://wadl.dev.java.net/2009/02">
<doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.1 2013-07-18 18:14:16"/>
<grammars>
<include href="application.wadl/xsd0.xsd">
<doc title="Generated" xml:lang="en"/>
</include>
</grammars>
<resources base="http://localhost:8080/jerseytest/">
<resource path="myresource">
<method id="getIt" name="GET">
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="application/vnd.sun.wadl+xml"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
<resource path="/students">
<resource path="delete/{studentid}">
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="studentid" style="template" type="xs:int"/>
<method id="removeStudent" name="DELETE">
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="application/vnd.sun.wadl+xml"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
<resource path="add">
<method id="addStudent" name="POST">
<request>
<representation mediaType="application/x-www-form-urlencoded">
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="name" style="query" type="xs:string"/>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="dept" style="query" type="xs:string"/>
</representation>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="application/vnd.sun.wadl+xml"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
<resource path="list">
<method id="getAllStudents" name="GET">
<response>
<ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02" xmlns="" element="student" mediaType="application/xml"/>
<ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02" xmlns="" element="student" mediaType="application/json"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="application/vnd.sun.wadl+xml"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
<resource path="put">
<method id="putStudent" name="PUT">
<request>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="studentid" style="query" type="xs:int"/>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="name" style="query" type="xs:string"/>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="dept" style="query" type="xs:string"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="application/vnd.sun.wadl+xml"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
<resource path="{studentid}">
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="studentid" style="template" type="xs:int"/>
<method id="getMetadata" name="GET">
<response>
<ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02" xmlns="" element="student" mediaType="application/xml"/>
<ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02" xmlns="" element="student" mediaType="application/json"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="application/vnd.sun.wadl+xml"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
</resource>
<resource path="application.wadl">
<method id="getWadl" name="GET">
<response>
<representation mediaType="application/vnd.sun.wadl+xml"/>
<representation mediaType="application/xml"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
<resource path="{path}">
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="path" style="template" type="xs:string"/>
<method id="geExternalGrammar" name="GET">
<response>
<representation mediaType="application/xml"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="text/plain"/>
</response>
</method>
<method id="apply" name="OPTIONS">
<request>
<representation mediaType="*/*"/>
</request>
<response>
<representation mediaType="*/*"/>
</response>
</method>
</resource>
</resource>
</resources>
</application>
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<students>
<student>
<dept>CS</dept>
<id>1</id>
<name>Baoxl</name>
</student>
<student>
<dept>Math</dept>
<id>2</id>
<name>ShirleyPaul</name>
</student>
</students>
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<student>
<dept>CS</dept>
<id>1</id>
<name>Baoxl</name>
</student>