鍍金池/ 教程/ Java/ RESTful Web 服務(wù) - 第一個應(yīng)用
RESTful Web 服務(wù) - 環(huán)境設(shè)置
RESTful Web 服務(wù) - 資源
RESTful Web 服務(wù) - 第一個應(yīng)用
RESTful Web 服務(wù) - 緩存
RESTful Web 服務(wù) - 方法
RESTful Web 服務(wù) - 安全性
RESTful Web 服務(wù) - 尋址
RESTful Web 服務(wù) - 無狀態(tài)
RESTful Web 服務(wù) - Java (JAX-RS)
RESTful Web 服務(wù) - 介紹
RESTful Web 服務(wù) - 消息

RESTful Web 服務(wù) - 第一個應(yīng)用

接下來我們開始使用 Jersey 框架編寫真實的 RESTful Web 服務(wù)。在開始使用 Jersey 框架編寫第一個示例之前,必須確保正確設(shè)置了 Jersey 環(huán)境,正如 RESTful Web 服務(wù) - 環(huán)境設(shè)置 教程中所闡述的。我還假設(shè)你掌握了一點點使用 Eclipse IDE 的基礎(chǔ)知識。

那么,讓我們開始編寫一個簡單的 Jersey 應(yīng)用程序吧,它將暴漏一個 Web 服務(wù)方法來顯示用戶列表。

步驟 1 - 創(chuàng)建 Java 項目

第一步是使用 Eclipse IDE 創(chuàng)建一個動態(tài) Web 項目。遵循選項 File -> New -> Project,最后在向?qū)Я斜碇羞x擇 Dynamic Web Project 向?qū)?。然后在如下所示的向?qū)Т翱谥袑㈨椖棵麨?UserManagement

http://wiki.jikexueyuan.com/project/restful/images/wizard.jpg" alt="wizard" />

一旦項目創(chuàng)建成功,在 Project Explorer 中就會得到如下所示的目錄結(jié)構(gòu):

http://wiki.jikexueyuan.com/project/restful/images/usermanagement_dir.jpg" alt="usermanagement_dir" />

步驟 2 - 添加需要的庫

我們把在項目中添加 Jersey 框架和它的依賴(庫)作為第二步。從下面下載的 jersey zip 文件夾目錄中把所有的 jars 復(fù)制到項目的 WEB-INF/lib 目錄中。

  • \jaxrs-ri-2.17\jaxrs-ri\api
  • \jaxrs-ri-2.17\jaxrs-ri\ext
  • \jaxrs-ri-2.17\jaxrs-ri\lib

首先,右擊項目名 UserManagement,選擇上下文菜單中的選項:Build Path -> Configure Build Path 顯示 Java Build Path 窗口。

最后使用 Libraries 選項卡下面的 Add JARs 按鈕把 JARs 文件添加到 WEB-INF/lib 目錄中。

步驟 3 - 創(chuàng)建源代碼文件

現(xiàn)在,讓我們在 UserManagement 項目下創(chuàng)建真實的源代碼文件。首先我們需要創(chuàng)建一個叫做 com.tutorialspoint 的包。要做到這一點,在包管理器中的 src 上右擊并遵循選項:New -> Package。

接下來我們會在 com.tutorialspoint 包下面創(chuàng)建 User.java,UserDao.java 以及 UserService.java 文件。

User.java 文件

package com.tutorialspoint;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "user")
public class User implements Serializable {

   private static final long serialVersionUID = 1L;
   private int id;
   private String name;
   private String profession;

   public User(){}

   public User(int id, String name, String profession){
      this.id = id;
      this.name = name;
      this.profession = profession;
   }

   public int getId() {
      return id;
   }

   @XmlElement
   public void setId(int id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   @XmlElement
   public void setName(String name) {
      this.name = name;
   }
   public String getProfession() {
      return profession;
   }
   @XmlElement
   public void setProfession(String profession) {
      this.profession = profession;
   }        
}

UserDao.java 文件

下面的程序已經(jīng)被硬編碼以顯示用戶清單相關(guān)的功能。這里我們可以實現(xiàn)可能從數(shù)據(jù)庫或者任意資源中選擇用戶或者其他所需數(shù)據(jù)需要的業(yè)務(wù)邏輯。

package com.tutorialspoint;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
   public List<User> getAllUsers(){
      List<User> userList = null;
      try {
         File file = new File("Users.dat");
         if (!file.exists()) {
            User user = new User(1, "Mahesh", "Teacher");
            userList = new ArrayList<User>();
            userList.add(user);
            saveUserList(userList);     
         }
         else{
            FileInputStream fis = new FileInputStream(file);
            ObjectInputStream ois = new ObjectInputStream(fis);
            userList = (List<User>) ois.readObject();
            ois.close();
         }
      } catch (IOException e) {
         e.printStackTrace();
      } catch (ClassNotFoundException e) {
         e.printStackTrace();
      }     
      return userList;
   } 
}

UserService.java 文件

package com.tutorialspoint;

import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/UserService")
public class UserService {

   UserDao userDao = new UserDao();

   @GET
   @Path("/users")
   @Produces(MediaType.APPLICATION_XML)
   public List<User> getUsers(){
      return userDao.getAllUsers();
   }    
}

這里有兩個關(guān)于主程序需要注意的要點,UserService.java:

  1. 第一步是使用 @Path 注釋 UserService 給 Web 服務(wù)指定一個路徑。
  2. 第二步是使用 @Path 注釋 UserService 方法給特定的 Web 服務(wù)方法指定一個路徑。

步驟 4 - 創(chuàng)建 Web.xml 配置文件

我們需要創(chuàng)建一個 Web.xml 配置文件,這是一個 XML 文件,用于給我們的應(yīng)用程序指定 Jersey 框架 servlet。

_web.xml 文件__

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns="http://java.sun.com/xml/ns/javaee" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
   id="WebApp_ID" version="3.0">
   <display-name>User Management</display-name>
   <servlet>
      <servlet-name>Jersey RESTful Application</servlet-name>
      <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.tutorialspoint</param-value>
         </init-param>
      </servlet>
   <servlet-mapping>
   <servlet-name>Jersey RESTful Application</servlet-name>
      <url-pattern>/rest/*</url-pattern>
   </servlet-mapping>  
</web-app>

步驟 5 - 部署程序

一旦完成源代碼和 Web 配置文件創(chuàng)建,就可以進入編譯和運行程序這一步。要做到這一點,使用 Eclipse 將應(yīng)用程序?qū)С鰹橐粋€ war 文件并部署到 Tomcat 中即可。要使用 eclipse 創(chuàng)建 WAR 文件,遵循選項 File -> export -> Web -> War File,最后選擇項目 UserManagement 和目標文件夾即可。要在 Tomcat 中部署 war 文件,把 UserManagement.war 放到 Tomcat 安裝目錄的 webapps 目錄中并啟動 Tomcat 即可。

步驟 6 - 運行程序

我們使用 Postman 來測試我們的 Web 服務(wù),這是一個 Chrome 擴展。

建立一個到 UserManagement 獲取所有用戶列表的請求。把 http://localhost:8080/UserManagement/rest/UserService/users 放到 POSTMAN 中選擇 GET 請求,可以看到下面的結(jié)果。

http://wiki.jikexueyuan.com/project/restful/images/restful_postman.jpg" alt="restful_postman" />

恭喜,你已經(jīng)成功創(chuàng)建你的第一個 RESTful 應(yīng)用程序了。為了更進一步,讓我們在接下來的幾個章節(jié)中做一些有趣的事情。