REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
REST 要求开发人员显式地使用 HTTP 方法,并且使用方式与协议定义一致。 这个基本 REST 设计原则建立了创建、读取、更新和删除(create, read, update, and delete,CRUD)操作与 HTTP 方法之间的一对一映射。 根据此映射:
- 若要在服务器上创建资源,应该使用 POST 方法。
- 若要检索某个资源,应该使用 GET 方法。
- 若要更改资源状态或对其进行更新,应该使用 PUT 方法。
- 若要删除某个资源,应该使用 DELETE 方法。
目前宣称支持REST的Java框架包括以下这些:
Restlet(http://www.restlet.org/)
Cetia4(https://cetia4.dev.java.net/)
Apache Axis2(http://http://ws.apache.org/axis2/)
sqlREST(http://sqlrest.sourceforge.net/)
REST-art(http://rest-art.sourceforge.net/)
下面以Restlet框架为例,介绍REST开发的方法
1. 修改web.xml 增加servlet 配置项和 <context-param> 配置项
<context-param>
<param-name>org.restlet.application</param-name>
<param-value>org.lifeba.ws.app.RestSimpleApplication</param-value>
</context-param>
<!--
<context-param>
<param-name>org.restlet.component</param-name>
<param-value>org.lifeba.ws.app.RestComponent</param-value>
</context-param>
-->
<servlet>
<servlet-name>RestletServlet</servlet-name>
<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RestletServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
2. 所有的应用类都必须继承自org.restlet.Application
public class RestSimpleApplication extends org.restlet.Application
3. 在应用类的createInboundRoot()方法中增加路由信息
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
router.attach("/student/{studentId}", StudentResource.class);
router.attach("/student", StudentsResource.class);
return router;
}
4. 资源类继承自org.restlet.resource.ServerResource
5. 启动Server,访问 http://localhost:9080/RESTApp/students 可以看到所有学生信息。
http://localhost:9080/RESTApp/student/1 显示ID=1的student
http://localhost:9080/RESTApp/add.jsp 增加学生
http://localhost:9080/RESTApp/update.jsp 更新学生信息。