jersey (RESTful Web Service框架)

jersey是一个RESTful Web Service框架。web service即远程函数调用,通过该特性,在互联网中跨机器调用其他服务器上的函数,就像调用本地代码一样简单又方便。原理是框架把请求对象序列化为json形式的字符串,发送http请求到指定的服务器上,服务器端把json字符串再反序列化为对象,找到函数代码入口后开始执行,得到返回对象后序列化为json字符串,作为客户端http请求的回应返回,客户端再将结果反序列化为对象。至此,完成一次远程调用。虽然细节上比较麻烦,但框架会帮我们封装好细节,并且总体上看好处是显而易见的——把服务分布在不同的机器上有利于负载均衡,该请求还是无状态的,对于此次请求的处理不依赖于上一次的状态。

获取jar

<!-- pom.xml的依赖部分 --> 
<dependencies>
<span style="white-space:pre">	</span><dependency>
		<groupId>org.glassfish.jersey.containers</groupId>
		<artifactId>jersey-container-servlet</artifactId>
		<version>2.5</version>
	</dependency>
	<dependency>
		<groupId>org.glassfish.jersey.media</groupId>
		<artifactId>jersey-media-json-jackson</artifactId>
		<version>2.5</version>
	</dependency>
</dependencies>

常用类

org.glassfish.jersey.server. ResourceConfig
用来绑定resource,代表着WebService的类。

ResourceConfig org.glassfish.jersey.server.ResourceConfig. register(Class<?> componentClass)
用来绑定resource的函数。

代码

app类:
package com.likeyichu.webservice;

import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;

public class App extends ResourceConfig {
	public  App() {
		//向jersey框架注册资源类,凡完全限定名是以指定字符串开头的类,都将包含
		packages("com.likeyichu.webservice");
		register(JacksonFeature.class);
	}
}
serviceResource类;
package com.likeyichu.webservice;

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

@Path("animal")
public class Animal {
	public String species,name;
	public int age;
	public static Animal animal=new Animal();
	
	@GET
	@Path("{species}")
	@Produces(MediaType.APPLICATION_JSON)
	public Animal wsAnimal(@PathParam("species") String species,
			@QueryParam("name") String name,
			@QueryParam("age") int age
			){
		animal.species=species;
		animal.name=name;
		animal.age=  age==0?2:age;
		return animal;
	}
}
注意:每次根据@path找到的类,jersey都会自动new一个 新对象,所以想对一些成员变量保持不变的话可以把它们设置为static。

在WebContainer中配置

该地址为jersey官方文档。
用Tomcat作HttpServer
web.xml配置,让Tomcat读取
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<display-name>Archetype Created Web Application</display-name>

	<servlet>
		<!-- 自己定名字,随便取 -->
		<servlet-name>jerseyws</servlet-name>
		<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>javax.ws.rs.Application</param-name>
			<!-- 自己的继承了ResourceConfig的类名 -->
			<param-value>com.likeyichu.webservice.App</param-value>
		</init-param>
		<!-- 指定这个“jerseyws” Servlet被tomcat加载的顺序 -->
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>jerseyws</servlet-name>
		<!-- 如果项目名为ABC,那么www.abc.com/ABC/*的请求都会被jersey框架处理-->
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>

效果



json反序列化到形参

public class UrlRequest {
	private String url;
	public String getUrl() {return url;}
	public void setUrl(String url) {this.url = url;}
}

@Path("post")
	@POST
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)  //因为这行,urlResponseFun2()的形参request会被jersey注入
	//注意请求的头部必须有 ContentType:application/json  否则tomcat会报错
	public UrlResponse urlResponseFun2 ( UrlRequest request) throws IOException {
		省略
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值