您的位置:首页 > Web前端 > JavaScript

基于Jsersy的RSET服务的实现

2013-10-23 00:31 134 查看
本文主要介绍如何用Jsersy实现RESTful服务。在介绍Jsersy之前,先介绍一下Rest和Restful的概念。

什么是REST

REST 中最重要的概念是资源(resources),使用全球 ID(通常使用 URI)标识。客户端应用程序使用 HTTP 方法(GET/ POST/ PUT/ DELETE)操作资源或资源集。RESTful Web 服务是使用 HTTP 和 REST 原理实现的 Web 服务。通常,RESTful Web 服务应该定义以下方面:Web 服务的基/根 URI,比如 http://host/<appcontext>/resources。支持 MIME 类型的响应数据,包括 JSON/XML/ATOM 等等。服务支持的操作集合(例如 POST、GET、PUT 或 DELETE)。首先大家要明确,REST不是一种技术标准,REST是一种架构风格,而RESTful是基于REST原理实现的一种Web服务。

什么是Jsersy

Jsersy是Java的REST架构风格实现RESTfulWeb服务开源框架,在Java世界里,一般都有一个标准,关于REST规范叫JAX-RS(即: JSR-311),该标准于2007提出,在JAX-RS标准提出之前,JAVA有restlet和resteasy之类的框架,随着REST架构设计风格广泛流行,支持REST风格的RESTful服务框架越来越多,如Spring MVC,Axis2等等。最新版Jsersy有以下几部分构成:Jersey CoreJersey ContainersJersey ConnectorsJersey MediaJersey Extensions每个模块下又分给很小模块,在这就不一一介绍,大家可以参考Jsersy帮助文 档:https://jersey.java.net/documentation/latest/modules-and-dependencies.html#modules

创建RESTful项目

在Eclipse中,创建一个新项目,采用Maven管理项目,pom.xml配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">[/code] 
<modelVersion>4.0.0</modelVersion>
<groupId>cn.opensv</groupId>
<artifactId>rest-example</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>rest-example Jersey Webapp</name>
<build>
<finalName>rest-example</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>9090</port>
<path>/rest</path>
<uriEncoding>UTF-8</uriEncoding>
<finalName>rest</finalName>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.0-m13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>2.0-m13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.0-m13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.0-m13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.0-m13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-sse</artifactId>
<version>2.0-m13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.0-m13</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
<properties>
<jersey-version>1.17.1</jersey-version>
</properties>
<repositories>
<repository>
<id>glassfish.java.net</id>
<name>GlassFish Maven Repository</name>
<url>http://download.java.net/maven/glassfish</url>
<layout>default</layout>
</repository>
<repository>
<id>m2.java.net</id>
<name>Java.net Maven 2 Repository</name>
<url>http://download.java.net/maven/2</url>
<layout>default</layout>
</repository> 
</repositories>
<pluginRepositories>
<pluginRepository>
<id>m2.java.net</id>
<name>Java.net Maven 2 Repository</name>
<url>http://download.java.net/maven/2</url>
<layout>default</layout>
</pluginRepository>
</pluginRepositories>
</project>
在本例中,使用tomcat 作为运行容器,因此,需要在pom.xml添加Tomcat插件。具体Tomcat插件如何使用,见我另一篇博文,/article/3518479.html

配置Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html#d4e194 -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">[/code] 
<!--配置JsersyServlet-->
<servlet>
<servlet-name>jersey</servlet-name>
<!--注意:如果Servlet是2.0-->
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<!--配置应用类-->
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>cn.opensv.rest.api.ExampleApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--配置Servlet映射-->
<servlet-mapping>
<servlet-name>jersey</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
本文先用最单的配置方式,具体更高级应用,在后续文章中会陆续介绍。

创建资源类

package cn.opensv.rest.api;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
//资源类
@Path("api/example01")
public class Example01 {
@GET 
@Produces("text/plain")
public String get() {
return "I am get Method!";
}
@PUT
@Produces("text/plain")
public String put() {
return "I am put Method!";
}
@POST 
@Produces("text/plain")
public String post() {
return "I am post Method!";
}
@DELETE
@Produces("text/plain")
public String delete() {
return "I am delete Method!";
}
}
@Path调用资源服务的路径,即REST的URI。@GET http 的GET请求 GET请求是获取/列出/检索单个资源或资源集合。@PUT http 的PUT请求PUT请求是更新现有资源或资源集合。@POST http的POST请求 POST请求是新建资源。@DELETE http的DELETE请求 DELETE请求是删除资源或资源集合。@Produces是每次请求返回的HTTP内容的类型。这样基本搞掂一个简单的RESTful服务。

创建应用类

import java.util.HashSet;import java.util.Set;import javax.ws.rs.ApplicationPath;import javax.ws.rs.core.Application;/*** 创建应用类* @author liliangwen**/@ApplicationPath("/")public class ExampleApplication extends Application {@Overridepublic Set<Class<?>> getClasses() {final Set<Class<?>> classes = new HashSet<Class<?>>();//注册资源类classes.add(Example01.class);return classes;}}在应用类中注册资源类,并把应用类配置到Web.xml中。

客户端测试

本文先简单介绍一个测试工具,可以借助Chrome浏览器的插件进行的REST服务测试。插件名称:Chrome Poster。在URL框中输入访问资源URL,分别点击GET,POST,PUT,DELETE按钮会调用不同的资源服务。当然如果对Linux 的Curl命令熟悉,也可以用该命令进行测试。注意:本实验运行环境:tomcat 7.0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐