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对象传递到前端,供前端使用,这样前后端只需关注他们自己的那一部分就行了)。
GET − 对资源的只读访问
PUT − 创建新资源
DELETE − 删除一个资源
POST − 更新一个已存在的资源或者是创建新资源
OPTIONS − 获取一个资源所支持的操作
序号 | 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所支持的操作 | 只读 |
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;
}
}
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 getAllUsers(){
List userList = null;
try {
File file = new File("Users.dat");
if (!file.exists()) {
User user = new User(1, "Mahesh", "Teacher");
userList = new ArrayList();
userList.add(user);
saveUserList(userList);
}
else{
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
userList = (List) ois.readObject();
ois.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return userList;
}
private void saveUserList(List 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 getUsers(){
return userDao.getAllUsers();
}
}
5. 创建Web.xml配置文件:
User Management
Jersey RESTful Application
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.restful
Jersey RESTful Application
/rest/*