java搭建RESTful WebServices 快速入门(一)

REST(REpresentational State Transfer):中文名称是表述性资源转移。

Rest是一种基于Web标准的架构,它使用HTTP协议进行数据之间的传输。Rest强调的是资源(而非行为---比如增删改查),那么如何访问这些资源呢?我们可以通过一组接口访问,而这组接口就是Http的标准方法(GET, POST, PUT, DELETE)。

在Rest架构中,Rest服务端仅仅提供访问资源的接口,而Rest客户端就可以访问这些资源。在这里每一个资源都被一组URI标识(URI仅仅表示资源,你不能在URI上体现出行为即如果你写了一个这样的uri,那么就错了:/system/user/user_addUI.action).Rest会使用不同的资源表述,注意不是资源,它强调的是资源表述,资源表述其实就是资源的表示形式,可以是Json格式的,Xml格式的或者是普通文本格式的。但是现在大多会用Json在前后端传输数据(这就是前后端分离开发,后端定义接口,通过json把这个接口,其实也就是java对象传递到前端,供前端使用,这样前后端只需关注他们自己的那一部分就行了)。

Http方法

下面就是一些常用的基于Rest架构的Http Method:
  • GET − 对资源的只读访问

  • PUT − 创建新资源

  • DELETE − 删除一个资源

  • POST − 更新一个已存在的资源或者是创建新资源

  • OPTIONS − 获取一个资源所支持的操作


Restful web service介绍

web service是一组开放的标准和协议---用来在不同的应用程序和系统中传输数据。而且,对于不同编程语言所编写的应用程序之间或者是不同的操作系统平台之间,我们也可以使用web service在因特网中传输数据---这有点像一台计算机上的进程间通信一样。而这种互操作性正是webservice使用了开放的标准。
基于Rest架构的Web Services 就称为Restful Web Services. 它使用Http方法去实现了Rest架构的基本理念.一个RESTful Web Service应用会:1)定义URI 2)提供资源表述( RE presentational):比如,json,xml。

创建Restful Web Service应用:

好!现在我们就来动手吧。那么在本教程中呢,我们创建一个名叫UserManagement 的Web Services应用。下面列出应用中会使用的方法:
序号 HTTP Method URI 描述 操作类型
1 GET /UserService/users 列出所有User列表 只读
2 GET /UserService/users/1 获取id为1的User 只读
3 PUT /UserService/users/2 插入id为2的User 幂等
4 POST /UserService/users/2 更新id为2的User N/A
5 DELETE /UserService/users/1 删除id为1的User 幂等
6 OPTIONS /UserService/users 列出Web Services所支持的操作 只读

环境搭建

在本教程中我们使用Jersey框架搭建Restful Web services应用,使用Tomcat7服务器+MyEclipse 14。什么是Jersey框架?它就是一个JAX-RS(java api for restful web services 这是官方的javaEE标准)的标准实现。
1.下载最新的Jersey框架jar包:   https://jersey.java.net/download.html
下载完成后解压缩包,将会看到如下的目录结构:

2.tomcat,myeclipse,jdk的安装配置就不说了。

第一个Restful web services程序:

1.创建一个Dynamic web project工程
2.复制所有的jar包到/WEB-INF/lib中
\jaxrs-ri-2.17\jaxrs-ri\api
\jaxrs-ri-2.17\jaxrs-ri\ext
\jaxrs-ri-2.17\jaxrs-ri\lib
3.创建com.restful包
4.创建UserService.java, UserDao.java, User.java
User.java:
package com.restful;  

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.restful;  

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.restful;  

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;  
//为WebServceis指定Path
@Path("/UserService") 

public class UserService {  
   UserDao userDao = new UserDao();  
   @GET 
   //为WebServices中的方法指定Path
   @Path("/users") 
   @Produces(MediaType.APPLICATION_XML) 
   public List<User> getUsers(){ 
      return userDao.getAllUsers(); 
   }  
}
5. 创建Web.xml配置文件:
你需要配置Jersey Servlet到我们的应用中,所以你要注册这个Servlet:
<?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</servletclass> 
      <init-param> 
         <param-name>jersey.config.server.provider.packages</param-name> 
         <param-value>com.restful</param-value> 
      </init-param> 
   </servlet> 
   <servlet-mapping> 
      <servlet-name>Jersey RESTful Application</servlet-name> 
      <url-pattern>/rest/*</url-pattern> 
   </servlet-mapping>   
</web-app>

6.部署程序:
可以运行了!对,现在就把改程序部署到Tomcat服务器上,
在浏览器中输入: http://localhost:8425/UserManagement/rest/UserService/users
我的端口号是8425
你会看到:

那么恭喜你,成功了!

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值