`

Jersey实现restful,CXF调用以及jquery AJAX调用

    博客分类:
  • java
阅读更多
1.首先指明所需要的jar,附件中是我学习时所创建的工程,如果你想直接看项目代码,可以下载下来瞧瞧。jersey所需要的必要jar:asm-3.3.jar、jersey-core-1.7.jar、jersey-server-1.7.jar、jsr311-api-1.1.jar,另外附件中的工程的lib中还有一些jar:commons-beanutils-1.8.0.jar、commons-collections-3.2.jar、commons-lang-2.4.jar、commons-logging-1.1.1.jar、ezmorph-1.0.4.jar、json-lib-2.4-jdk15.jar这些jar是使用JSON所需要的jar。

2.web.xml配置,其中com.thinknet.restful就是你的需要加载发布的REST服务包名,如果你在不同的包下面存放了rest服务类,那你就需要在【<param-value>】配置中以逗号分开你需要加载的包,如下所示:
  <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.thinknet.restful,com.thinknet.restful1</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>


3.java代码,这里我举出了三个GET、POST、PUT服务方法,还有DELETE服务方法没写,如果你有兴趣可以做得更好。
package com.thinknet.restful;

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;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import net.sf.json.JSONObject;

@Path(value = "/thinknet")
public class CardUnifiedCheck
{
    @GET
    @Path("/getSayHello")
    @Produces(MediaType.TEXT_PLAIN)
    public String sayhello()
    {
        return "get hello jersey.";
    }

    @POST
    @Path("/postSayHello")
    public String sayhelloPost(String data)
    {
        JSONObject jo = JSONObject.fromObject(data);
        return jo.getString("name") + " post say hello.";
    }

    @PUT
    @Path("/putSayHello")
    public String sayHelloPut(@QueryParam("name")
    String name)
    {
         return name + " put say hello.";
    }
}


4.如果你把上面所说的都做好了,rest服务就只需要发布就可以了,我是用tomcat发布的。

5.在浏览器中输入:http://localhost:8080/tnwebserver/rest/thinknet/getSayHello就会响应get hello jersey.

6.但是如果我访问POST、PUT等服务呢?可能浏览器中可以请求这些服务,我用浏览器请求带参的POST服务没有通过,报405的错误,我想是需要一点特殊方法才行,但我们没必须要去研究用浏览器访问,下面分别说说CXF模拟客户端与Jquery中的AJAX模拟客户端请求。
CXF代码【PUT请求】:
        ClientResource clientR = new ClientResource("http://localhost:8080/tnwebserver/rest/thinknet/putSayHello");
        clientR.addQueryParameter("name", "无敌浩克");
        
        Representation result = clientR.put("");
        result.setCharacterSet(CharacterSet.UTF_8);
        System.out.println(new String(result.getText()));

CXF代码【POST请求】:
        ClientResource clientR = new ClientResource("http://localhost:8080/tnwebserver/rest/thinknet/postSayHello");
        // clientR.addQueryParameter("name", "无敌浩克");
        JSONObject jo = new JSONObject();
        jo.put("name", "无敌浩克");
        
        Representation result = clientR.post(jo.toString());
        result.setCharacterSet(CharacterSet.UTF_8);
        System.out.println(new String(result.getText()));

如果你对CXF客户端访问rest服务感兴趣,请下载jar包:cxf-2.6.13.jar

JQuery Ajax请求rest服务
	$(function(){
		// GET按钮请求
		$("#getBtn").click(function(){
			var requestURL = "/tnwebserver/rest/thinknet/getSayHello";
			$.ajax({
				type : "GET",
				url : requestURL,
				async : false,
				cache : false,
				success : function(resultData, textStatus) {
					$("#getText").val(resultData);
				}
			});
		});
		
		// POST按钮请求
		$("#postBtn").click(function(){
			var paramter = {};
			paramter= "{'name':'"+$("#postParamVal").val()+"'}";
			var requestURL = "/tnwebserver/rest/thinknet/postSayHello";
			$.ajax({
				type : "POST",
				url : requestURL,
				async : false,
				data : paramter,
				cache : false,
				contentType: "application/json;charset=utf-8",
				success : function(resultData, textStatus) {
					$("#postText").val(resultData);
				}
			});
		});
		
		// PUT按钮请求
		$("#putBtn").click(function(){
			var paramter = {};
			paramter= "{'name':'"+$("#putParamVal").val()+"'}";
			var requestURL = "/tnwebserver/rest/thinknet/putSayHello";
			$.ajax({
				type : "PUT",
				url : requestURL,
				async : false,
				data : paramter,
				cache : false,
				contentType: "application/json;charset=utf-8",
				success : function(resultData, textStatus) {
					$("#putText").val(resultData);
				}
			});
		});
	});

以上GET与POST的请求都是正常的,但是这里的PUT就出现了问题,我们传递过去的参数变成了null(仔细看PUT服务方法中参数加了一个注解@QueryParam),是服务端没有接收到,但CXF访问PUT服务没问题,其实是我们JS代码没有设置好所导致的,我找了很久也没能找到解决方案,只要加了注解@QueryParam的服务,Jquery Ajax中的参数服务端就无法接收,这个问题我想把交给你们解决,如果你们感兴趣的话。

分享到:
评论

相关推荐

    使用CXF和camel-cxf调用webservice

    本篇文章将详细介绍如何使用CXF和camel-cxf调用Web服务,以及这两个工具的核心功能和使用场景。 Apache CXF是一个全面的服务开发框架,它支持多种Web服务标准,如SOAP、WS-*协议栈、RESTful服务等。CXF提供了丰富的...

    jersey 实现restful服务

    本教程将重点讲解如何使用Jersey框架来实现RESTful服务。 Jersey是Java语言中一个非常流行的实现RESTful服务的开源库,它是JAX-RS(Java API for RESTful Web Services)规范的一个参考实现。JAX-RS提供了一套标准...

    myService_purpose1sv_cxf调用axis2的接口服务_接口服务_

    标题“myService_purpose1sv_cxf调用axis2的接口服务_接口服务_”暗示了一个名为“myService”的具体服务示例,这个服务利用CXF来调用Axis2实现的接口。"purpose1sv"可能是项目或功能的特定标识符,但没有足够的上...

    jersey实现restful简单实例

    除了提供服务端实现,Jersey还包含一个客户端API,允许你在Java代码中调用RESTful服务。以下是一个简单的示例: ```java import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax...

    Spring CXF Restful 实例

    在Spring CXF中,我们可以轻松地定义这些资源和操作,实现RESTful服务。 1. **配置Spring CXF**:创建一个Spring配置文件,如`cxf-servlet.xml`,在其中定义CXF的Servlet,这样我们就可以在Spring应用上下文中托管...

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...

    spring4+myabtis3+jersey(restful风格的webservice)

    总结来说,这个项目结合了Spring4的依赖注入和事务管理、MyBatis3的数据库操作、Jersey的RESTful服务实现以及Maven的依赖管理,构建了一个完整的、基于RESTful的Web服务系统。通过JSON数据格式,实现了高效的数据...

    jersey restful webservice集成以及使用

    **标题:“jersey restful webservice集成以及使用”** RESTful Web服务是一种广泛采用的Web服务设计风格,它遵循 Representational State Transfer(表述性状态转移)原则,通过HTTP协议提供服务。Jersey是Java...

    cxf restful

    【标题】:CXF RESTful服务的实现与应用 【正文】: Apache CXF是一个流行的开源框架,用于构建和开发Web服务。它支持多种协议,包括RESTful(Representational State Transfer)风格的服务,使得开发者可以方便地...

    cxf客户端调用axis服务端流程

    总之,使用CXF客户端调用Axis服务端涉及多个步骤,包括生成客户端代码、配置客户端、创建服务代理以及进行实际调用。理解这些步骤并正确实现它们是成功通信的关键。在实际开发过程中,可能会遇到各种问题,需要耐心...

    cxf实现restful资料

    总之,这份"使用Spring整合CXF发布RESTFul项目案例"资料将帮助你深入理解RESTful服务的实现,以及如何利用Spring和CXF这一强大组合来构建高效、灵活的REST服务。通过实践案例,你可以亲手尝试并掌握相关技能。

    cxf webservice restful实现

    总之,通过Spring和CXF的整合,我们可以轻松创建RESTful风格的Web服务,并实现客户端的便捷调用。这种方式不仅简化了开发流程,还提高了服务的可维护性和可扩展性。在实际项目中,根据具体需求,我们还可以进一步...

    浅谈java调用Restful API接口的方式

    使用HttpURLConnection可以实现Restful接口的调用,但需要手动设置headers、parameters和body等信息。 其次,介绍了使用HttpClient实现Restful接口的调用。HttpClient是Apache组织提供的一个开源项目,提供了一个...

    Spring集成Cxf调用WebServices

    4. **创建CXF服务**:在Spring中配置CXF服务,通常需要定义一个服务接口、其实现类,以及对应的WSDL描述。然后,通过`&lt;jaxws:endpoint&gt;`或`&lt;jaxrs:server&gt;`标签在Spring配置文件中声明服务。 5. **调用Web Services...

    CXF Restful服务简单例子

    CXF框架支持RESTful服务的实现,让我们来详细探讨如何使用CXF构建一个简单的RESTful服务。\n\n一、CXF简介\nApache CXF是一个强大的Java框架,提供了一种灵活的方式来构建和部署Web服务。它支持多种Web服务规范,...

    spring与jquery ajax交互 和 servlet与jquery ajax交互

    在现代Web应用开发中,Spring框架、jQuery库以及Ajax技术是不可或缺的部分。Spring作为一个全面的Java企业级应用框架,提供了强大的MVC(Model-View-Controller)架构支持,而jQuery则简化了JavaScript的DOM操作和...

    Http请求Restful风格的远程调用工具类

    Http请求Restful风格的远程调用,在远程调用的过程中会出现四种请求方式,这个工具把此部分代码给封装了一下。

    使用SpringBoot整合jersey 实现Restful web service.同时整合springmvc。

    在本文中,我们将深入探讨如何使用SpringBoot框架与Jersey库整合来实现RESTful Web服务,并同时集成Spring MVC。这将使我们能够构建一个高效、灵活的后端系统,为客户端提供API接口。 首先,SpringBoot是Spring框架...

    CXF V3.2.4 实现的WebService调用(带安全认证)

    在本文中,我们将深入探讨如何使用Apache CXF V3.2.4实现带有安全认证的Web服务调用。Apache CXF是一个开源框架,它允许开发者创建和消费各种Web服务,包括SOAP和RESTful API。CXF 3.2版本引入了许多增强功能,包括...

Global site tag (gtag.js) - Google Analytics