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

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模拟客户端请求。
[color=red]CXF代码【PUT请求】:[/color]

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()));

[color=red]CXF代码【POST请求】:[/color]

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

[color=red]JQuery Ajax请求rest服务[/color]:

$(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中的参数服务端就无法接收,这个问题我想把交给你们解决,如果你们感兴趣的话。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值