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/*的都通过这里

  <?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包中找就明白了


 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值