`
longgangbai
  • 浏览: 7255091 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

REST WebService简单应用

 
阅读更多

  最近项目中WebService采用REST风格的WebService实现。

   官方文档地址:

http://jersey.java.net/nonav/documentation/latest/index.html

 

Jersey的四种行为

对应我们日常说的CRUD.

方法/资源

资源集合; URI 如:
http://host/api/resources

成员资源; URI 如:
http://host/api /resources/123

对应的操作

POST

列出资源集合的所有成员。

检索标识为 1234 的资源的表示形式。

C(创建)

GET

使用一个集合更新(替换)另一个集合。

更新标记为 1234 的数字资源。

R(读取)

PUT

在集合中创建数字资源,其ID 是自动分配的。

在下面创建一个子资源。

U(更新)

DELETE

删除整个资源集合。

删除标记为 1234 的数字资源。

D(删除)

 

相关的架包结构

·      核心服务器:jersey-core.jar,jersey-server.jar,jsr311-api.jar,asm.jar

·      核心客户端:(用于测试)jersey-client.jar

·      JAXB 支持:(在高级样例中使用)jaxb-impl.jar,jaxb-api.jar,activation.jar,stax-api.jar,wstx-asl.jar

·      JSON 支持:(在高级样例中使用)jersey-json.jar

·      Spring支持:(在高级样例中使用)jersey-spirng.jar

元注解信息说明

生存周期说明

1.       默认不使用注解,表示生存周期等于request,请求过后自动销毁,默认是线程安全的。

2.       application,使用@Singleton注解。生存周期等于整个应用程序的生存周期。

3.       session,使用@PerSession注解。生存周期等于一个session请求,session销毁,该rest资源实例也同时销毁。

Bean注解说明

1.@Path路径信息,表示映射出去的访问路径。
范例如下:@Path("/myResource")

2. @Produces用于限制postget方法返回的参数类型,支持jsonstringxmlhtml
范例如下:@Produces({"application/xml", "application/json"})

3. @Consumes用于限制输入的参数的类型,支持jsonstringxmlhtml
范例如下:@Consumes("text/plain")

4. @QueryParam@DefaultValue通过request传入的参数,@DefaultValue表示默认参数。
范例如下:@DefaultValue("2") @QueryParam("step")        int step,

5. @PathParam @ MatrixParam@ HeaderParam@ CookieParam@@ QueryParam FormParam听从以相同的规则。@ MatrixParam提取URL路径段的信息。 @ HeaderParam提取的HTTP头信息。 @ CookieParam提取信息的Cookie饼干宣布相关的HTTP标头。@ FormParam略有特殊,因为它提取请求表示,该类型匹配前面的@Consumes所声明的类型。
范例如下:

  @POST

  @Consumes("application/x-www-form-urlencoded")

  public void post(@FormParam("name")   String name) {

6.pojo层面等相关注解,@XmlRootElement,支持JPA注解。

7.Spring相关注解,比如@Autowired(required=true@Qualifier("persionDao")@Component

@Scope("request")

 

 

 

简单demo的结构如下:

 

 

 

 

 简单的开发代码如下:

 

package com.easyway.jaxrs.rest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
/**
 * 采用JAX-RS方式
 * @author longgangbai
 *  http://localhost:8080/JAXRSWS/services/hello
 *  
 *  
 *  @Path  注解访问的路径
 *  @GET   Http请求的方式
 *  @Produces  响应结果的形式
 *  
 */
@Path("/hello")  
public class HelloWS {

	/**
	 * 通过HTTP访问到WebService到方式
	 * 
	 * http://localhost:8080/JAXRSWS/services/hello
	 * 
	 * 文本格式返回给客户端
	 * @return
	 */
	@GET   
	@Produces(MediaType.TEXT_PLAIN)
	public String sayPlainTextHello() {
		return "Hello Jersey";
	}
	
	/**
	 * xml格式返回给客户端
	 * @return
	 */
	@GET
	@Produces(MediaType.TEXT_XML)
	public String sayXMLHello() {
		return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
	}

	/**
	 * html格式的接受
	 * @return
	 */
	@GET
	@Produces(MediaType.TEXT_HTML)
	public String sayHtmlHello() {
		return "<html> " + "<title>" + "Hello Jersey" + "</title>"
				+ "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
	}

}
	

 

 Web.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<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">
  <servlet>
  	<display-name>JAX-RS REST Servlet</display-name>
  	<servlet-name>JAX-RS REST Servlet</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.easyway.jaxrs.rest</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>JAX-RS REST Servlet</servlet-name>
  	<url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

 

 

index.jsp页面如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript" src="jquery/jquery-1.4.2.js"></script>
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<script type="text/javascript">
	<!--js 调用JAXRS WS 服务返回文本-->
	function txtverity() {
	    $.ajax({
	        type : "POST",
	        url : "<%=request.getContextPath()%>/services/hello?tmp="+(new Date()),
	        dataType : "text",
	        success : textcallback
	    });
    }
	function textcallback(data) {
	   alert("text="+data);
	}
	
	
   function xmlverity() {
       alert("aa");
	    $.ajax({
	        type : "POST",
	        url : "<%=request.getContextPath()%>/services/sayXMLHello?tmp="+(new Date()),
	        dataType : "html",
	        success : xmlcallback
	    });
    }
   function xmlcallback(data) {
	   alert("text="+data);
	}
	</script>
  </head>
  
  <body>
  <input type="button" id="txtbtn"  onclick="txtverity()" value="文本" />
  <input type="button"  id="jsonbtn"   onclick="txtverity()" value="JSON文本"/>
  <input type="button" id="xmlbtn"   onclick="xmlverity()" value="XML文本"/>
  </body>
</html>

 

分享到:
评论

相关推荐

    REST WebService简单应用(测试)

    NULL 博文链接:https://topmanopensource.iteye.com/blog/1279320

    使用python创建一个简单的restful风格的webservice应用

    这是一个如何使用python快速构建简单restful风格webservice的应用教程。 rest风格的服务通常使用web.py来创建服务器端脚本,一般情况下包含两个url路径:一个是为了查询所有用户,一个是为了查询单个用户。例如下面的...

    4JVA_SupRails_WS:带有SOAP和Rest Web服务的简单JEE应用程序

    具有SOAP和Rest Web服务的简单JEE应用程序。 带有GlassFish Server 3.1.2的NetBeans 7.4(不适用于GlassFish 4.0) 如何 : 1-复制回购2-使用NetBeans打开项目(与Eclipse不同,无需导入,只需“文件-打开项目”...

    WeatherApp:简单的REST API使用者

    WeatherApp 简短说明:简单的Web API,使用REST模板来使用Rest WebService,并允许获取所选地区的范围内的任何天的当前天气或天气预报要使用此应用,您需要在OpenWeatherApp服务上注册一个API密钥。 您可以在src / ...

    mft-upload:一种用于将文件上传到SOAP WebService的REST实用程序。 它是可配置的,并且可以与Oracle托管文件传输(MFT)一起使用

    上载一个简单的REST实用程序,用于将文件上传到托管文件传输服务器或其他基于文件的集成服务器,SaaS或PaaS云应用程序。用例该软件包公开了一个REST接口,可以上传到MFT SOAP WebServices或任意HTTP表单应用程序。 ...

    ASP EXCEL导入SQL

     REST是基于HTTP的,因此天生就有在互联网上穿透防火墙的能力,REST可以简单地认为它是轻量级的WebService,但是它具有自己的一些显著特点:  所有的资源通过统一的接口访问(HTTP/HTTPSGET、POST、PUT、ELETE),...

    Web服务性能测试:Node完胜Java

    简介 我最近做了一些简单的关于内存的WebService性能测试。我使用Java(REST+SOAP)和Node.js(REST)将一些接口功能缓存起来。跟期望的一样,Node应用的性能远远超出Java。(响应时间至少快1倍以上)。 ...

    ASP.NETMVC4中调用WEBAPI的四个方法

    ASP.NETAPI简单来说就是对REST协议进行了充分的支持,可以使用HTTP中的GET,POST,PUT和DELETE进行服务的发布。在本文中,将以例子说明如何使用ASP.NETWEBAPI去创建一个REST风格的Web服务,并且如何编写

    deploy-ml-model:使用flask和docker将简单的机器学习模型部署到AWS ec2实例

    training.ipynb在上训练逻辑回归模型并生成一个腌制的模型文件(iris_trained_model.pkl) 使用app.py将推理逻辑包装在Flask服务器中,以将模型用作REST Web服务: 执行命令python app.py以运行flask应用程序。...

    financeager:从命令行轻松组织您的财务!

    您可能是一个想要用简单的软件来组织财务的人,因为您对Excel之类的东西已经厌倦了。 而且您喜欢命令行。 还有Python。 注意 该项目正在积极开发中。 在发布1.0.0版本之前,可能会遇到一些问题,例如命令行界面,...

    Activiti5用户指南(中文版)

    Activiti5用户指南(中文版) 第一章、简介 ....................................................................................................................................................................

Global site tag (gtag.js) - Google Analytics