RESTful 第一个应用程序

  • RESTful 第一个应用程序

    让我们开始使用Jersey框架编写实际的RESTful Web服务。在开始使用Jersey框架编写第一个示例之前,必须确保已按照RESTful Web服务-环境设置一章中的说明正确设置了Jersey环境。在这里,我还假设您对Eclipse IDE有所了解。
    因此,让我们继续编写一个简单的Jersey应用程序,它将公开一个Web服务方法以显示用户列表。
  • 创建一个Java项目

    第一步是使用Eclipse IDE创建一个动态Web项目。遵循选项文件→新建→项目,最后从向导列表中选择Dynamic Web Project向导。现在,使用向导窗口将项目命名为UserManagement,如以下屏幕截图所示-
    restful
    成功创建项目后,您的项目资源管理器中将具有以下内容-
    restful
    添加所需的库
    第二步,让我们在项目中添加Jersey框架及其依赖项(库)。从项目的WEB-INF/lib目录中的下载jersey zip文件夹的以下目录中复制所有jar。
    • \jaxrs-ri-3.0.0\jaxrs-ri\api
    • \jaxrs-ri-3.0.0\jaxrs-ri\ext
    • \jaxrs-ri-3.0.0\jaxrs-ri\lib
    现在,右键单击您的项目名称UserManagement,然后按照上下文菜单中可用的选项-“Build Path”→“Configure Build Path”显示“Java Build Path”窗口。
    现在,使用“Lib”选项卡下的“ADD JAR”按钮添加WEBINF/lib目录中存在的JAR。
  • 创建源文件

    现在,让我们在UserManagement项目下创建实际的源文件。首先,我们需要创建一个名为com.jc2182的包。为此,请右键单击“包资源管理器”部分中的src,然后按照选项-New→Package进行操作。
    接下来,我们将在com.jc2182包下创建UserService.java,User.java,UserDao.java文件。
    User.java
    
    package com.jc2182;  
    
    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
    
    package com.jc2182;  
    
    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; 
       } 
       private void saveUserList(List<User> userList){ 
          try { 
             File file = new File("Users.dat"); 
             FileOutputStream fos;  
             fos = new FileOutputStream(file); 
             ObjectOutputStream oos = new ObjectOutputStream(fos); 
             oos.writeObject(userList); 
             oos.close(); 
          } catch (FileNotFoundException e) { 
             e.printStackTrace(); 
          } catch (IOException e) { 
             e.printStackTrace(); 
          } 
       }    
    }
    
    UserService.java
    
    package com.jc2182;  
    
    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(); 
       }  
    }
    
    关于主程序,有两点需要注意,
    UserService.java
    • 第一步是使用@Path注解为UserService指定Web服务的路径。
    • 第二步是使用@Path注解UserService的方法为特定的Web服务方法指定路径。
    创建Web.xml配置文件
    您需要创建一个Web xml配置文件,该文件是一个XML文件,用于为我们的应用程序指定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.jc2182</param-value> 
          </init-param> 
       </servlet> 
       <servlet-mapping> 
          <servlet-name>Jersey RESTful Application</servlet-name> 
          <url-pattern>/rest/*</url-pattern> 
       </servlet-mapping>   
    </web-app>
    
    部署程序
    完成创建源和Web配置文件后,就可以开始执行此步骤,该步骤正在编译和运行程序。为此,使用Eclipse将您的应用程序导出为war文件,并将其部署在tomcat中。
    要使用Eclipse创建WAR文件,请遵循File→Export→Web→War文件选项,最后选择项目UserManagement和目标文件夹。要在Tomcat中部署war文件,请将UserManagement.war放置在Tomcat安装目录→webapps目录中,然后启动Tomcat。
    运行程序
    我们正在使用Postman(Chrome扩展程序)来测试我们的网络服务。
    向UserManagement请求以获取所有用户的列表。将带有GET请求的http://localhost:8080/UserManagement/rest/UserService/users放入POSTMAN中,然后看到以下结果。
    restful
    恭喜,您已经成功创建了第一个RESTful应用程序。