webservice框架jersey简单总结
项目中需要使用到webservice,具体的是使用jersey。那么首先需要了解jersey和webservice的关系,捋顺webservice框架的各种实现,通过查阅相关博客,我个人总结webservice的结构图如下:
通过上图,大概可以了解到webservice和jersey的关系了,然后我们需要了解RESTful是什么,自己也是说不太清楚,所以可以看这个博客地址:REST介绍:http://redhacker.iteye.com/blog/1923226
然后,知道了一些概念上的定义,就可以具体使用jersey,自己做了jerseyDemo来简单说名jersey的使用。另外,jersey1.X的版本是sun公司提供的独立的jar包,在2.X版本中,已经将jersey融合到JavaSE中,在javax.ws.rs.*包中。
jersey常用注解解释:
Annotation | 作用 | 说明 |
@GET | 查询请求 | 相当于数据库的查询数据操作 |
@POST | 插入请求 | 相当于数据库的插入数据操作 |
@PUT | 更新请求 | 相当于数据库的更新数据操作 |
@DELETE | 删除请求 | 相当于数据的删除数据操作 |
@Path | uri路径 | 定义资源的访问路径,client通过这个路径访问资源。比如:@Path("user") |
@Produces | 指定返回MIME格式 | 资源按照那种数据格式返回,可取的值有:MediaType.APPLICATION_XXX。比如:@Produces(MediaType.APPLICATION_XML) |
@Consumes | 接受指定的MIME格式 | 只有符合这个参数设置的请求再能访问到这个资源。比如@Consumes("application/x-www-form-urlencoded") |
@PathParam | uri路径参数 | 写在方法的参数中,获得请求路径参数。比如:@PathParam("username") String userName |
@QueryParam | uri路径请求参数 | 写在方法的参数中,获得请求路径附带的参数。比如:@QueryParam("desc") String desc |
@DefaultValue | 设置@QueryParam参数的默认值 | 如果@QueryParam没有接收到值,就使用默认值。比如:@DefaultValue("description") @QueryParam("desc") String desc |
@FormParam | form传递的参数 | 接受form传递过来的参数。比如:@FormParam("name") String userName |
@BeanParam | 通过Bena的形式传递参数 | 接受client传递的bean类型的参数,同时这个bean可以在属性上配置@FormParam用以解决client的属性名称和bean的属性名称不一致的问题。比如:@BeanParam User user |
@Context | 获得一些系统环境信息 | 通过@Context可以获得以下信息:UriInfo、ServletConfig、ServletContext、HttpServletRequest、HttpServletResponse和HttpHeaders等 |
@XmlRootElement | 将bean转换为xml |
如果要讲bean以xml或json的格式返回,必须要这个注解。比如: @XmlRootElement public class User{...} |
@XmlElements | ||
@XmlElement |
Jersey使用示例:
1、添加Maven依赖或者导入jar包
<!--jersey --><dependency><groupId>org.glassfish.jersey.containers</groupId><artifactId>jersey-container-servlet-core</artifactId><version>2.13</version></dependency><!--JAXB API --><dependency><groupId>javax.xml.ws</groupId><artifactId>jaxws-api</artifactId><version>2.1</version></dependency><!-- Json支持 --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-asl</artifactId><version>1.9.12</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.12</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-jaxrs</artifactId><version>1.9.12</version></dependency><!-- 编译需要,tomcat里面有 --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>
<!-- 编译需要,tomcat里面有 -->
没有使用Maven的就自己下载相应的jar包,放到classpath下就是了。
2、修改web.xml,配置jerseyServlet
<servlet><servlet-name>JerseyServlet</servlet-name><servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class><!-- 配置自己的资源加载类去加载资源 --><init-param><param-name>javax.ws.rs.Application</param-name><param-value>com.cisdi.jersey.api.ApplicationAPI</param-value></init-param><!-- 配置默认的资源包路径,使用默认的配置类去加载资源 --><!-- <init-param> --><!-- <param-name>jersey.config.server.provider.packages</param-name> --><!-- <param-value>com.cisdi.jersey.api</param-value> --><!-- </init-param> --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>JerseyServlet</servlet-name><url-pattern>/api/*</url-pattern></servlet-mapping>
上面有两种加载资源的方式,一种是使用自己的资源加载器去加载资源,需要给出自己资源加载器的位置。另一种是使用默认的资源加载器加载,需要给出资源所在的package。个人主张第一种,写一个自己的资源加载器去加载想要加载的资源,这样感觉可控性强一点,
接下来会介绍这个资源加载器如何编写。
public class ApplicationAPI extends ResourceConfig {public ApplicationAPI() {// 加载resourcesregister(HelloResource.class);register(UserResource.class);// 注册数据转换器register(JacksonJsonProvider.class);// 注册日志register(LoggingFilter.class);}}
这个类就是将各种资源加载进来,暴露给client。之前说道使用自己的资源加载器可控性强的特点就是可以除了加载业务资源以外,还可以加载日子和其他的需要一些工具资源等等。或者package下的某个资源不想被暴露,就不要加载进来就可以了。
4、书写自己的资源
先弄了一个简单的资源,HelloResource@Path("/hello")public class HelloResource {@GET@Produces(MediaType.TEXT_PLAIN)public String sayHello() {return "hello jersey!";}}
接着可以弄个复杂点得对象资源,UserResource@XmlRootElementpublic class User {private int id;@FormParam("name")private String userName;@FormParam("desc")private String desc;Setter/Getter...}下面就是UserResource的各个方法@Path("user")public class UserResource {//这个类的方法都在下面 }//这个方法主要介绍@GET,@Path,@Produces,@PathParam,@DefaultValue,@QueryParam注解的使用@GET@Path("{username}")@Produces(MediaType.APPLICATION_XML)// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })public User getUser(@PathParam("username") String userName, @DefaultValue("description") @QueryParam("desc") String desc) {User user = new User();user.setId(new Random().nextInt());user.setUserName(userName);user.setDesc(desc);return user;}//访问路径:{host}:{port}/{serviceName}/api/user/username?desc=xxx ;username可以随便写//这个方法主要介绍@POST,@Consumes,@FormParam注解的使用@POST@Path("updateUser")@Consumes("application/x-www-form-urlencoded")public void updateUser(@FormParam("name") String userName, @FormParam("desc") String desc) {User user = new User();user.setId(1);user.setUserName(userName);user.setDesc(desc);System.out.println(user);}//访问路径:{host}:{port}/{serviceName}/api/user/updateUser;这个是通过提交表单访问的//这个方法主要介绍@BeanParam的使用@POST@Path("updateUser1")@Produces(MediaType.APPLICATION_XML)@Consumes("application/x-www-form-urlencoded")public User updateUser1(@BeanParam User user) {//注意这个方法需要在User这个bean中使用@FromParam注解System.out.println(user);return user;}//访问路径:{host}:{port}/{serviceName}/api/user/updateUser1;这个是通过提交表单访问的//这个方法主要介绍@Context注解的使用@ContextHttpServletRequest request;@ContextHttpServletResponse response;@ContextServletConfig servletConfig;@ContextServletContext servletContext;@ContextHttpHeaders header;@ContextUriInfo info;@GET@Path("/test/{param}")@Produces(MediaType.APPLICATION_XML)public User getContext() {MultivaluedMap<String, String> queryParameters = info.getQueryParameters();MultivaluedMap<String, String> pathParameters = info.getPathParameters();System.out.println(queryParameters);System.out.println(pathParameters);System.out.println(this.request);System.out.println(this.response);System.out.println(this.servletConfig);System.out.println(this.servletContext);System.out.println(this.header);System.out.println(this.info);return new User(1, "gusi");}//访问路径:{host}:{port}/{serviceName}/api/user/test/xxx?xxx=xxx&xxx=xxx;xxx都是可以乱写的说明:使用这种方式有很大的作用,当我们不知道client传递过来的参数名称,或者client传递过来的参数经常变化,那么我们就可以使用这样方式动态的获得传递给service的参数,然后再进行后续的处理
webservice框架jersey简单总结相关推荐
- 几种流行Webservice框架性能对比
1 摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有30多种,这对于开发者如何选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性 ...
- 几种流行Webservice框架性能对照
转自[http://blog.csdn.net/thunder4393/article/details/5787121],写的非常好,以收藏. 1 摘要 开发webservice应用程序中 ...
- 转 真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService
WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷.知名的XFile(新的如CXF).Axis1.Axis2等. 而Sun公司也不甘落后,从早期的JAX-R ...
- 关于Flex-Mvc的几个框架的简单介绍
目前,FLEX有好几个框架,官方和非官方的,其介绍详见http://www.infoq.com/news/2008/01/flex-mvc 从网上又收集了一些简单的评论,我还没有用过,打算最近对比后找 ...
- python django框架分析_Django框架模型简单介绍与使用分析
本文实例讲述了Django框架模型简单介绍与使用.分享给大家供大家参考,具体如下: ORM介绍 ORM Object relational mapping 对象关系映射 把面向对象中的类和数据库表一一 ...
- Java WebService 接口的简单生成和调用
Java WebService 接口的简单生成和调用 1.打开eclipse创建普通的java项目,写一个类 如下: package com.jspweb.ws;import javax.jws.W ...
- php中间件怎么使用,laravel框架中间件简单使用方法示例
本文实例讲述了laravel框架中间件简单使用方法.分享给大家供大家参考,具体如下: laravel内置了一个中间件来验证用户是否经过认证,如果用户没有经过认证,中间件会将用户重定向到登录页面,否则如 ...
- python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用
python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用 redispy安装 安装及简单使用:https://github.com/andymccurdy/ ...
- php mysql orm_PHP ORM框架与简单代码实现(转)
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...
- java持久层用文件_Java持久层框架MyBatis简单实例
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .本文 ...
最新文章
- python绘制灰度图片直方图-python数字图像处理(9):直方图与均衡化
- hdu1054 简单最小顶点覆盖
- iphone字体_iOS 13终于能换花式字体了?!发在朋友圈里真的超好看!
- 3、MySQL 8.0.20在Linux(centos 8)上搭建主从复制
- 设计模式 之 抽象工厂模式
- 30天自制操作系统 pdf_30天自制操作系统:第三天:系统引导完成
- webpack2 实践系列(二)— entry 和 output
- C#中常用的文件操作方法
- Python 第三方库的安装
- matlab y轴旋转面,Mayavi:绕y轴旋转
- 怎么看so文件是哪个aar引进来的_突破微信限制,超大文件可以随便发
- 入门Sysmac Studio,白菜妹子是这样做的。
- 基于C# 和Access数据库的电影院管理系统
- IK10外壳冲击等级测试
- 前端原生Html免费模板网站总结(带网址)
- win10+cuda10+tensorflow-gpu最新安装教程
- 为什么别人可以打开的网站,你却打不开?原因找到了 ,HTTP ERROR 404
- QT 控件增加双击事件
- 论文解读 | CenterNet:Keypoint Triplets for Object Detection
- 曾经作为程序员的你为什么不当程序员了?现在在做什么?
热门文章
- Web前端:“杭州华三通信技术有限公司”的主网站案例设计
- python视频培训班
- Ubuntu升级glibc
- 仿映客、花椒手机移动视频直播系统源码
- dk 7 linux x64.rpm,linux x64 Java/JDK 11下载 jdk-11.0.7_linux-x64_bin.rpm官方镜像版
- 时间序列分析之协整检验
- 瑞利衰落信道容量及瑞利衰落条件下中断容量对AWGN容量的占比
- 无线通信中多径传播包络服从瑞利衰落衰落MATLAB仿真
- 离散数学及其应用 算法
- [C++] CreateThread() 与 _beginthread() 的区别