`
sungang_1120
  • 浏览: 323716 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

使用Java创建RESTful Web Service

阅读更多

REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移)。2000年Roy Fielding博士在他的博士论文“Architectural Styles and the Design of Network-based Software Architectures”《体系结构与基于网络的软件架构设计》中提出了REST。

 

REST是一种体系结构。而HTTP是一种包含了REST架构属性的协议。

 

REST基础概念

 

  • 在REST中所有东西都被看作资源。每一个资源都有一个URI和它对应。
  • 在REST中使用统一接口处理资源。与数据库CRUD操作(Create、Read、Update 和 Delete)一样,可以用POST、GET、PUT和DELETE处理REST资源。
  • 每个REST请求都是孤立的,请求中包含了所需的全部信息。REST服务端不存储状态。
  • REST支持不同的通信数据格式,比如XML、JSON。

 

RESTful Web Services

 

RESTful Web Services因其简单性被广泛使用,它比SOAP要更简单。本文将重点介绍如何使用Jersey框架创建RESTful Web Services。Jersey框架实现了JAX-RS接口。本文示例代码使用Eclipse和Java SE 6编写。

 

创建RESTful Web Service服务端

 

  • 在Eclipse中创建一个“dynamic web project”(动态web工程) ,项目名设为 “RESTfulWS”。

 

 

 

package com.eviac.blog.restws;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
 
/**
*
* @author pavithra
*
*/
 
// 这里@Path定义了类的层次路径。
// 指定了资源类提供服务的URI路径。
@Path("UserInfoService")
public class UserInfo {
 
// @GET表示方法会处理HTTP GET请求
@GET
// 这里@Path定义了类的层次路径。指定了资源类提供服务的URI路径。
@Path("/name/{i}")
// @Produces定义了资源类方法会生成的媒体类型。
@Produces(MediaType.TEXT_XML)
// @PathParam向@Path定义的表达式注入URI参数值。
public String userName(@PathParam("i") String i) {
 
String name = i;
return "<User>" + "<Name>" + name + "</Name>" + "</User>";
}
 
@GET
@Path("/age/{j}")
@Produces(MediaType.TEXT_XML)
public String userAge(@PathParam("j") int j) {
 
int age = j;
return "<User>" + "<Age>" + age + "</Age>" + "</User>";
}
}

 

 

web.xml

 

<?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" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 <a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</a> id="WebApp_ID" version="2.5">
<display-name>RESTfulWS</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.eviac.blog.restws</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

 

 

  • 将此URL拷贝到浏览器地址栏中运行:
  • http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra

输出结果如下:

创建客户端

 

 

创建一个“com.eviac.blog.restclient”包,然后新建“UserInfoClient”类。

package com.eviac.blog.restclient;
 
import javax.ws.rs.core.MediaType;
 
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
 
/**
*
* @author pavithra
*
*/
public class UserInfoClient {
 
public static final String BASE_URI = "http://localhost:8080/RESTfulWS";
public static final String PATH_NAME = "/UserInfoService/name/";
public static final String PATH_AGE = "/UserInfoService/age/";
 
public static void main(String[] args) {
 
String name = "Pavithra";
int age = 25;
 
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource resource = client.resource(BASE_URI);
 
WebResource nameResource = resource.path("rest").path(PATH_NAME + name);
System.out.println("Client Response \n"
+ getClientResponse(nameResource));
System.out.println("Response \n" + getResponse(nameResource) + "\n\n");
 
WebResource ageResource = resource.path("rest").path(PATH_AGE + age);
System.out.println("Client Response \n"
+ getClientResponse(ageResource));
System.out.println("Response \n" + getResponse(ageResource));
}
 
/**
* 返回客户端请求。
* 例如:
* GET http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra
* 返回请求结果状态“200 OK”。
*
* @param service
* @return
*/
private static String getClientResponse(WebResource resource) {
return resource.accept(MediaType.TEXT_XML).get(ClientResponse.class)
.toString();
}
 
/**
* 返回请求结果XML
* 例如:<User><Name>Pavithra</Name></User>
*
* @param service
* @return
*/
private static String getResponse(WebResource resource) {
return resource.accept(MediaType.TEXT_XML).get(String.class);
}
}

 运行客户端程序后,可以看到以下输出:

Client Response
GET http://localhost:8080/RESTfulWS/rest/UserInfoService/name/Pavithra returned a response status of 200 OK
Response
<User><Name>Pavithra</Name></User>
 
Client Response
GET http://localhost:8080/RESTfulWS/rest/UserInfoService/age/25 returned a response status of 200 OK
Response
<User><Age>25</Age></User>

 

 

分享到:
评论

相关推荐

    使用Java创建RESTful Web Service - ImportNew1

    使用Java创建RESTful Web Service 在本文中,我们将讨论如何使用Java创建RESTful Web服务。REST(Representational State of Resource)是一种架构风格,它于2000年由Roy Fielding博士提出。RESTful Web服务是一种...

    Java Restful Web 源代码,Java Restful Web 源代码

    Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web 源代码Java Restful Web...

    《Java RESTful Web Service实战》PDF版本下载.txt

    《Java RESTful Web Service实战》PDF版本下载

    Java+restful+Web+Service实战

    Java RESTful Web Service实战是Java开发领域中一个重要的实践教程,它主要涵盖了使用Java技术和RESTful架构风格来创建高效、可扩展的网络服务。REST(Representational State Transfer)是一种网络应用程序的设计...

    Java RESTful Web Service实战.pdf

    在本PDF教程《Java RESTful Web Service实战》中,读者将深入学习如何使用Java来构建RESTful服务。 首先,我们要理解REST的基本原则。REST是一种网络应用程序的设计风格和开发方式,其核心思想是通过HTTP协议来操作...

    RESTful Web Service实现转账

    在现代的Web应用程序开发中,RESTful Web Service已经成为构建分布式系统和服务之间通信的重要方式。本文将深入探讨如何利用RESTful架构来实现转账业务,同时关注事务处理和并发控制这两个关键领域。 首先,让我们...

    《Java Restful Web Service实战》源代码.zip

    《Java Restful Web Service实战》源代码.zip是一个包含与Java Restful Web Service开发相关的实践项目源码的压缩包。在本文中,我们将深入探讨Java Restful Web Service的关键概念、技术栈以及如何通过实际示例来...

    RESTful Web Service Demo

    在"RESTful Web Service Demo"项目中,我们将探讨如何使用Java语言来创建这样的服务,并提供CURD(Create、Read、Update、Delete)操作。 首先,理解RESTful架构的关键概念: 1. 资源(Resource):在REST中,一切...

    JAX-RS方式的RESTful Web Service开发

    本文将深入探讨如何使用JAX-RS来构建RESTful Web Service,并结合实际代码示例进行解析。 首先,理解RESTful架构风格的核心概念至关重要。REST强调资源的概念,通过URI(统一资源标识符)来唯一标识每个资源。HTTP...

    读书笔记:Java RESTful Web Service实战.zip

    读书笔记:Java RESTful Web Service实战

    Java Restful Web Service,edition2.代码

    【Java Restful Web Service,edition2.代码】这个压缩包文件是关于使用Java开发RESTful Web服务的第二版源码,主要聚焦于JAX-RS 2.0规范的应用。RESTful Web服务是一种广泛用于构建分布式系统的服务架构风格,它...

    MyEclipse下的Restful Web Service的Demo

    【标题】"MyEclipse下的Restful Web Service的Demo"是一个示例项目,展示了如何在MyEclipse集成开发环境中创建和使用RESTful Web服务。REST(Representational State Transfer)是一种软件架构风格,常用于构建Web...

    Java-RESTful-Web-Service.rar

    Java-RESTful-Web-Service.rar

    1-Java RESTful Web Service实战.part1.rar

    Java RESTful Web Service实战教程是Java开发者学习现代Web服务开发的重要资源。RESTful Web服务是一种基于Representational State Transfer(表述性状态转移)架构约束的Web服务设计风格,它强调轻量级、简单性和可...

    使用-Spring-3-来创建-RESTful-Web-Services

    1. 轻松地创建 RESTful Web Services:使用 Spring 3,可以轻松地创建 Java 实现的服务器端 RESTful Web Services。 2. 无缝整合到 Spring 框架:Spring 3 的 REST 支持被无缝整合到 MVC 层中,可以很容易地应用到...

    RESTful Java Web Services

    在Java世界中,创建RESTful服务通常会用到JAX-RS(Java API for RESTful Web Services),这是一个标准的Java API,允许开发者以声明式的方式创建REST服务。JAX-RS提供了注解,如`@Path`、`@GET`、`@POST`等,用于...

    读书笔记:学习《java restful web service实战》自己写的代码.zip

    读书笔记:学习《java restful web service实战》自己写的代码

    Java RESTful WebService实战

    Java restful和webservice接口, WebService有两种方式,一是SOAP方式,二是REST方式。SOAP是基于XML的交互,WSDL也是一个XML文档,可以使用WSDL作为SOAP的描述文件;REST是基于HTTP协议的交互,支持JSON、XML等交互...

Global site tag (gtag.js) - Google Analytics