您的位置:首页 > 其它

Jersey使用总结一(jersey初步使用和简单post请求几种参数传递,String方式,不含对象操作)

2012-07-16 20:19 896 查看
首先说明一下,jersey是干什么的呢,我个人的理解就是类似于一种webservice技术或框架

jersey-rest为service端,其它的jersey请求为客户端,客户端发送一个请求(带参或不带参)调用service端的方法,方法返回结果给客户端。

如以下使用步奏:

一.建立服务器端:

1.下载jersey的相关jar

2.建立一个web project,并导入相关jar包

2.1 配置xml配置文件:使用jersey 相关jar包中提供的servlet,默认请求为/rest/*的都通过这里

<?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 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

<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.rest.jersey.first</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>

2.2 编写配置文件中配置的servlet请求对应的操作类或访问方法

package com.rest.jersey.first;

import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.sun.jersey.api.client.ClientResponse;

/**
* 设定客户端请求访问的路径为:“hello”
* 实际上类上的面这个path(hello)是针对整个类生效的
* 在类中的每个方法中可以继续设置进一步的path
* @author xianbo
*
*/
@Path("/hello")
public class HelloResource {
/**
*
*客户端请求方式为:
*service.path("rest").path("hello").accept(MediaType.TEXT_PLAIN).get(String.class)
* @return
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}

/**
* 客户端请求方式为:
* service.path("rest").path("hello").accept(MediaType.TEXT_XML).get(String.class)
* @return
*/
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}

/**
* 客户端请求方式为
* service.path("rest").path("hello").accept(MediaType.TEXT_HTML).get(String.class)
* @return
*/
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
return "<html> " + "<title>" + "Hello Jersey" + "</title>"
+ "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
}

/**
* 客户端发送post请求
* service.path("rest").path("hello").accept(MediaType.TEXT_PLAIN_TYPE).post(String.class)
* service.path("rest").path("hello").post(String.class,"9999999")
*/
@POST
public String sayStringHellp(String str){
System.out.println(str);
return "success";
}

/**
* 也可以在“hello” 的路径下继续添加访问路径
* 此时的访问路径就是/hello/first
* service.path("rest").path("hello").path("first").post(String.class,"9999999")
* @return
*/
@Path("/first")
@POST
public String sayPathHelp(String str){
System.out.println("first:"+str);
return "success";
}

/**
* 也可以以传递的参数作为访问路径,起到动态路径设定
* 此时的访问路径就是"/hello/变量str"
* "@PathParam("str")String str"说明这个“String str”参数的来源是包含在请求路径中的请求参数
* service.path("rest").path("hello").path(param).post(String.class)
* @return
*/
@Path("/{str}")
@POST
public String sayParamHelp(@PathParam("str")String str){
System.out.println("first/"+str+":"+str);
return "success";
}

/**
* 也可以以传递的参数作为访问路径,起到动态路径设定
* 此时的访问路径就是"/hello/变量str"
* "@PathParam("str")String str"说明这个“String str”参数的来源是包含在请求路径中的请求参数
* service.path("rest").path("hello").path("123").path("456").post(String.class)
* @return
*/
@Path("/{str}/{str2}")
@POST
public String sayManyParamHelp(@PathParam("str")String str,@PathParam("str2")String str2){
System.out.println("first/"+str+":"+str+":str2"+str2);
return "success";
}
}

到此,service工程可以结束了,只等编写客户端进行对应的请求进行访问了:

2.3 编写客户端请求类进行测试:

package com.rest.jersey.first;

import java.net.URI;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;

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:xianbo
*/

public class HelloClient {
public static void main(String[] args) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(getBaseURI());
// Fluent interfaces
System.out.println("1:"+service.path("rest").path("hello").accept(
MediaType.TEXT_PLAIN).get(ClientResponse.class).toString());
// Get plain text
System.out.println("2:"+service.path("rest").path("hello").accept(
MediaType.TEXT_PLAIN).get(String.class));
// Get XML
System.out.println("3:"+service.path("rest").path("hello").accept(
MediaType.TEXT_XML).get(String.class));
// The HTML
System.out.println("4:"+service.path("rest").path("hello").accept(
MediaType.TEXT_HTML).get(String.class));

System.out.println("5:"+service.path("rest").path("hello").accept(MediaType.TEXT_PLAIN_TYPE).post(String.class));
System.out.println("6:"+service.path("rest").path("hello").post(String.class,"9999999"));
System.out.println("7:"+service.path("rest").path("hello").path("first").post(String.class,"9999999"));

String param = "test";
//传递单个参数param变量作为动态路径并且作为参数
System.out.println("8:"+service.path("rest").path("hello").path(param).post(String.class));

//多个参数包含在路径中传递到方法中作为参数使用	,123,456作为参数
System.out.println("9:"+service.path("rest").path("hello").path("123").path("456").post(String.class));

}

private static URI getBaseURI() {
return UriBuilder.fromUri(
"http://192.168.13.84:8088/TestJerseyRest/").build();
}
}


另外:貌似从spring 3才开始支持整合这个东西,所以很多的(属性注入之类)new 对象的在spring 2.X必须自己手动获取

如果要和spring 整合使用,那么上面的web.xml中的servlet就必须使用和spring相对应的servlet了,至于是哪个,直接到jar包中找就明白了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐