最近项目中WebService采用REST风格的WebService实现。
官方文档地址:
http://jersey.java.net/nonav/documentation/latest/index.html
Jersey的四种行为
对应我们日常说的CRUD.
方法/资源 |
资源集合; URI 如: |
成员资源; URI 如: |
对应的操作 |
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,用于限制post和get方法返回的参数类型,支持json、string、xml、html
范例如下:@Produces({"application/xml", "application/json"})
3. @Consumes,用于限制输入的参数的类型,支持json、string、xml、html
范例如下:@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简单应用(测试)”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **RESTful API设计原则**: - **资源定位(URI)**:每个资源都有一个唯一的URI(统一资源标识符),例如`/users/{...
**REST (Representational State Transfer) WebService 和 SOAP (Simple Object Access Protocol) WebService 是两种不同的 Web Service 技术,它们在 SOA(Service-Oriented Architecture,面向服务架构)领域中...
接下来,我们将创建一个简单的REST服务示例: 1. **引入依赖**:在项目中添加JAX-RS实现库的依赖,如Jersey。 2. **创建资源类**:定义一个Java类,比如`UserResource`,并使用`@Path`注解标记资源路径。 3. **定义...
REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议进行通信,采用无状态的方式,利用标准的方法(如GET、POST等),通过URL地址指定资源并进行操作。RESTful Web服务是...
例如,我们可以创建一个简单的REST资源类: ```xml ``` 4. **编写REST服务接口**:在Java类中定义REST服务接口,例如`HelloServiceImpl.java`: ```java @Path("/hello") public class HelloServiceImpl { ...
在本篇文章中,我们将详细介绍如何通过生成类文件的方式来创建一个简单的 Java WebService 应用程序。这种方式非常适合初学者理解和实践 WebService 的基本概念与工作原理。 #### 二、基础知识回顾 1. **...
Spring框架是Java开发中的一个核心框架,它提供了一个全面的编程和配置模型,使得开发复杂的Web应用变得更加简单。而Web服务,尤其是基于SOAP的Web服务,是另一种常见的跨平台通信方式。然而,本文将探讨的是如何在...
在实际开发中,开发者可以使用JAX-RS提供的这些工具,通过简单的注解就可以创建出强大的REST服务。例如,你可以创建一个处理GET请求的资源类: ```java @Path("/hello") public class HelloWorldResource { @GET ...
### 基于REST的WebService规范2.0版本——深入解析 #### 一、概述 在现代软件架构中,REST(Representational State Transfer)已成为构建网络应用服务的标准方式之一。RESTful Web服务允许不同系统之间通过HTTP...
标题 "cxf+spring=webservice CXF 应用开发" 暗示了我们将讨论如何结合Apache CXF和Spring框架来创建Web服务。Apache CXF是一个开源的Java框架,主要用于构建和部署SOAP和RESTful Web服务。Spring框架则是一个广泛...
【标题】:“使用CXF构建Web服务和REST应用” 在Java世界中,开发Web服务和RESTful API是一项常见的任务,Apache CXF是一个强大的开源框架,它使得这项工作变得简单高效。CXF允许开发者以多种方式创建和消费Web服务...
- Tomcat或Jetty等应用服务器:部署Web Service,你需要一个应用服务器,如Tomcat或Jetty,将编译后的WAR文件部署到服务器上,启动服务。 5. 客户端(Client)开发: - JAX-WS客户端:使用wsimport工具,根据...
3. WebService与RestfulWebService的对比:WebService是一种跨编程语言及操作系统的远程调用技术,通常被定义为一组模块化的简单对象访问协议,具有基于SOAP的API方式和基于REST的方式两种。而RestfulWebService是一...
【CXF Webservice 最简单的应用详解】 Apache CXF 是一个开源的 Java 框架,主要用于构建和开发 Web 服务。它提供了丰富的功能,包括支持多种 Web 服务规范,如 SOAP、RESTful API 和 JAXB,使得创建和消费 Web ...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,主要分为SOAP(简单对象访问协议)基于的Web Service和REST(Representational State Transfer)服务。本项目“cxf+spring发布webservice和restservice”...
它提供了一种简单的方法来实现系统间的信息交换和服务共享,使得位于不同位置的应用能够通过网络互相调用对方提供的服务。WebService的主要优点在于它支持跨平台和语言,这意味着开发者可以使用不同的编程语言和操作...
WebService是互联网上应用程序之间进行通信的一种技术,它允许不同的系统之间交换数据和服务,不受平台或编程语言限制。在本“WebService课件”中,我们将会深入探讨微软课程中关于WebService的相关知识,涵盖了一到...
Webservice通常基于SOAP(简单对象访问协议)或REST(表述性状态转移)协议,提供跨平台、跨语言的数据交换能力。Spring框架则以其灵活的依赖注入和AOP(面向切面编程)特性,简化了代码的编写和管理。Struts作为一...