? ? ? 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 更新学生信息。
?