一 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(); } }
扫描二维码关注公众号,回复:
602566 查看本文章
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要注入的参数将无法获取值,因为流已经被读取了。