Jersey 简介

一 Jersey简介

Jersey是 JAX-RS API的一个实现,通过它可以方便的开发RESTful Web services。

Http中的常用方法与REST中资源的CURD操作对应

方法 REST中的资源的操作
GET 检索资源
PUT 更新资源
POST 创建资源
DELETE 删除资源

 

二 Jersey简单例子

使用jar包 : asm-3.3.1.jar, jersey-core-1.1.4.1.jar, jersey-server-1.1.4.1.jar, jsr311-api-1.1.1.jar

 

IUserMgtWeb.java

package controller;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.sun.jersey.api.view.Viewable;
@Path("/user")
public interface IUserMgtWeb {
	@POST
	@Path("/login")
	@Produces(MediaType.TEXT_HTML)
	public Viewable login(@FormParam("username") String username,
			@FormParam("password") String password);
	
	@GET
	@Path("/info")
	@Produces(MediaType.APPLICATION_JSON)
	public Response getUserInfo();
}

UserMgtWebImpl.java

package controller.impl;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import com.sun.jersey.api.view.Viewable;
import controller.IUserMgtWeb;
@Path("/user")
public class UserMgtWebImpl implements IUserMgtWeb {
	@Override
	public Viewable login(String username,String password) {
		if("admin".equals(username)&&"admin".equals(password)){
			System.out.println("nice man!");
			return null;
		}else{
			System.out.println("username:"+username+",password:"+password);
			return new Viewable("/login.html",null);
		}
	}
	
	@Override
	public Response getUserInfo() {
		return Response.ok("{id:'001',name:'sam'}").build();
	}
}

UserMgtApplication.java

package application;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
import controller.IUserMgtWeb;
import controller.impl.UserMgtWebImpl;
public class UserMgtApplication extends Application{
	private Set<Object> singletons = new HashSet<Object>();
	private Set<Class<?>> empty = new HashSet<Class<?>>();
	
	@Override
	public Set<Class<?>> getClasses() {
		return empty;
	}
	@Override
	public Set<Object> getSingletons() {
		return singletons;
	}
	public UserMgtApplication(){
		empty.add(IUserMgtWeb.class);
		singletons.add(new UserMgtWebImpl());
	}
}

 web.xml

<?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">
	<display-name>Jersey</display-name>
	<servlet>
		<servlet-name>UserMgtWebRest</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<!-- 		<init-param> -->
<!-- 			<param-name>javax.ws.rs.Application</param-name> -->
<!-- 			<param-value>application.UserMgtApplication</param-value> -->
<!-- 		</init-param> -->
		<!-- 如果启用以下执行jersey初始化,那么容器将对指定包内的class都当作singletons做处理,
		            此时必须在相应的实现类中有rest相应注解出现,否则容器会报错 -->
		<init-param>
	      <param-name>com.sun.jersey.config.property.packages</param-name>
	      <param-value>controller.impl</param-value>
	    </init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>UserMgtWebRest</servlet-name>
		<url-pattern>/rest/*</url-pattern>
	</servlet-mapping>
</web-app>
 

login.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<form action="/Jersey/rest/user/login" method="post">
		<label>username:</label>
		<input type="text" name="username"/>
		<label>password:</label>
		<input type="password" name="password"/>
	    <input type="submit" value="submit"/>
	</form>
</body>
</html>

 

Note:

尽量不要使用PUT与DELETE方法,因为如果使用PUT或者DELETE方法,在后台通过request.getParameter("username")获取不到相应的数据。只能通过request.getInputStream()获取流中数据在解析。

如果使用PUT与DELETE方法并且通过FormParam注入参数,但是在filter或者其他代码快【先于注入方法的任意代码】中读取了request.getInputStream()流中信息,这FormParam要注入的参数将无法获取值,因为流已经被读取了。

 

 

 

猜你喜欢

转载自antlove.iteye.com/blog/1926185