`

Jersey 简介

    博客分类:
  • jdk
阅读更多

一 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要注入的参数将无法获取值,因为流已经被读取了。

 

 

 

分享到:
评论
2 楼 antlove 2013-08-20  
lijiejava 写道
好!!!

thx!!!
1 楼 lijiejava 2013-08-20  
好!!!

相关推荐

    基于 Jersey + SpringBoot 的在线考试系统

    基于 Jersey + SpringBoot 实现的的 restful 服务,主要包括用户管理、在线考试,自动批卷、成绩管理、错题管理、留言板、试卷管理、题库管理、试题科目维护等功能。 #### 项目源码 | | github | |--- |--- | | ...

    karyon-admin-web-2.0.02.zip

    jersey-guice-dispatch-wrapper.zip,允许通过guice allows绑定jersey资源方法分派包装器允许通过guice绑定jersey 1资源方法分派包装器。

    11.OpenFeign之feign使用简介

    Feign使用像Jersey和CXF这样的工具来编写Rest或SOAP服务的java客户端。此外,Feign允许您在诸如Apache HC这样的http库之上编写自己的代码。Feign将你的代码与http API连接起来,通过可定制的解码器和错误处理来将...

    JavaRESTfulWebService实战

    资源名称:Java RESTful Web Service实战内容简介:国内首本完整地、深度地讲解如何基于Java标准规范实现REST风格的Web服务的专著,阿里巴巴资深Java技术专家近10年开发经验结晶,3位业内著名技术专家联袂推荐!...

    dropwizard-demo:Dropwizard 宁静服务的最简单演示

    议题简介###Dropwizard 是近期崛起的一个轻量级的微服务(Microservice) 框架,以RESTful 为核心,整合了目前Java 主流的技术框架如Jersey、Hibernate 等,从前端网页、核心服务、资料库存取到资源监控,提供了一个...

    dropwizard-blog-freemarker:带有 Freemarker 视图模板的 Dropwizard 博客示例

    Dropwizard 是近期崛起的一个轻量级的微服务(Microservice) 框架,以RESTful 为核心,整合了目前Java 主流的技术框架如Jersey、Hibernate 等,从前端网页、核心服务、资料库存取到资源监控,提供了一个full-stack 却...

    seu-visLog:Web日志可视化系统,用于更好地理解用户行为(作为图形数据)

    服务器日志可视化-RESTful版本##先决条件要重建此项目,您需要具备以下条件: 玛文JDK 1.7(不建议使用1.8) MongoDB(最低版本) 玻璃鱼## Project简介visLog是Web服务器日志的可视化项目。 该项目是与Focus ...

    uekcloud:Uek Cloud平台

    项目简介 Restful风格的JavaEE安全、稳定、快速的云平台 核心技术 前端技术:摒弃掉JQuery和Bootstrap,和大牛讨论后的结果 (1) React (适合构建大应用,兼容web和原生app应用) (2) Vue (适合构建小型应用,也可以看...

    JAVA.WEB服务.构建与运行

    4.8 jax-rs:利用jersey生成wadl 182 4.9 restlet框架 186 4.10 下一章 191 第5章 web服务安全 193 5.1 web服务安全概述 193 5.2 线路级(wire-level)安全 194 5.3 为rabbitcounter服务添加安全支持 203 5.4 web服务...

    WebService:网络服务

    ##简介 展示了以下j2ee工具的使用 1.jersey,webservice工具 2.springMVC,内含webService的客户端调用,即类org.springframework.web.client.RestTemplate 3.hibernate,面向对象操纵数据库 4.json跨域请求,使用...

    BOJ_Solve_PBH:百柱在线裁判解决问题

    BOJ_Solve_PBH 白俊问题解决 这里是保存我的代码的地方,该代码已将Baekjun Online Jersey解锁。 在学习算法的同时,我练习了编码以帮助将来的编码测试和各种开发。 简介(2021-3-31) ### Solve.ac

    Spring Boot中文文档.rar

    28.3.JAX-RS和Jersey 28.4.嵌入式Servlet容器支持 28.4.1.Servlet,过滤器和监听器 注册Servlet,过滤器和监听器Spring Beans 28.4.2.Servlet上下文初始化 扫描Servlet,过滤器和侦听器 28.4...

    jeesuite-libs:分布式架构开发套件。包括缓存(一二级缓存,自动缓存管理),粒度,分布式定时任务,文件服务(七牛,阿里云OSS,fastDFS),日志,搜索,分布式锁,分布式事务,集成dubbo,spring boot支持以及常用的工具包等

    简介 jeesuite-libs分布式架构开发套件。包括缓存(一二级缓存,自动缓存管理),粒度,分布式定时任务,文件服务(七牛,阿里云OSS,fastDFS),日志,搜索,代码生成,API网关,配置中心,统一认证平台,分布式锁...

    《垃圾收集》(Garbage Collection)扫描版[PDF]——part2

    第1章 简介 1.1 内存分配的历史 1.1.1 静态分配 1.1.2 栈分配 1.1.3 堆分配 1.2 状态、存活性和指针可到达性 1.3 显式堆分配 1.3.1 一个简单的例子 1.3.2 垃圾 1.3.3 悬挂引用 1.3.4 共享 1.3.5 失败 1.4 为什么需要...

    (Garbage Collection)扫描版——part1

    第1章 简介 1.1 内存分配的历史 1.1.1 静态分配 1.1.2 栈分配 1.1.3 堆分配 1.2 状态、存活性和指针可到达性 1.3 显式堆分配 1.3.1 一个简单的例子 1.3.2 垃圾 1.3.3 悬挂引用 1.3.4 共享 1.3.5 失败 1.4 为什么需要...

Global site tag (gtag.js) - Google Analytics