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

首先说明一下,jersey是干什么的呢,我个人的理解就是类似于一种webservice技术或框架

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

 

如以下使用步奏:

一.建立服务器端:

       1.下载jersey的相关jar

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

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

  

 
 
         Jersey REST Service
        com.sun.jersey.spi.container.servlet.ServletContainer
        
                 com.sun.jersey.config.property.packages
                  com.rest.jersey.first
          
         1
 
 
       Jersey REST Service
         /rest/*
 

       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 "" + " Hello Jersey" + "";
	}

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

" + "Hello Jersey" + "

" + " "; } /** * 客户端发送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包中找就明白了


 

你可能感兴趣的:(webservice)