webservice框架jersey简单总结[通俗易懂]

webservice框架jersey简单总结[通俗易懂]项目中需要使用到webservice,具体的是使用jersey。那么首先需要了解jersey和webservice的关系,捋顺webservice框架的各种实现,通过查阅相关博客,我个人总结webservice的结构图如下:通过上图,大概可以了解到webservice和jersey的关系了,然后我们需要了解RESTful是什么,自己也是说不太清楚,所以可以看这个博客地址:RES

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

项目中需要使用到webservice,具体的是使用jersey。那么首先需要了解jersey和webservice的关系,捋顺webservice框架的各种实现,通过查阅相关博客,我个人总结webservice的结构图如下:

webservice框架jersey简单总结[通俗易懂]

通过上图,大概可以了解到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() {

// 加载resources

register(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

@XmlRootElement

public 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注解的使用

@Context

HttpServletRequest request;

@Context

HttpServletResponse response;

@Context

ServletConfig servletConfig;

@Context

ServletContext servletContext;

@Context

HttpHeaders header;

@Context

UriInfo 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的参数,然后再进行后续的处理
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/190948.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 参加persist.sys物业写权限的方法

    参加persist.sys物业写权限的方法

  • 微信小程序 宠物论坛1[通俗易懂]

    微信小程序 宠物论坛1[通俗易懂]微信小程序宠物论坛(1)一个简单的论坛包括以下几个方面:登录模块发帖模块首页模块帖子详情模块搜索模块个人主页模块下面将从这6个方面介绍如何用微信小程序开发一个简单的论坛。1、登录模块先看界面图打开小程序首先看到这个界面,之后我们点击头像便完成授权登录。JS部分//index.js//获取应用实例constapp=getApp()constdb=wx.cloud.database()Page({data:{motto:’欢迎来到宠物论坛

  • access2016访问mysql_关于VB连接access2016数据库

    在xp和access03运行没问题,换到win10和access2016就出错Publicmrc1AsADODB.RecordsetPublicmsgtextAsStringPublicfindstr1AsStringPublicmrc11AsADODB.RecordsetPublicmsgtext1AsStr…在xp和access03运行没问题,换到win10和access2016就出错Pu…

  • angularjs输入验证[通俗易懂]

    angularjs输入验证[通俗易懂]转载自:http://www.tuicool.com/articles/2Qbiqi(译)AngularJS中使用的表单验证-ZackYang时间 2013-11-1514:22:00  博客园-原创精华区原文  http://www.cnblogs.com/woshinidezhu/p/Form-validation-with-AngularJS.html主题 

  • Android UI设计

    Android UI设计UI概述1、在Android应用中,UI(UserInterface)界面是人与手机之间数据传递、交互信息的重要媒介和对话接中。2、Android程序开发最重要的一个环节就是界面处理,界面的美观度直接影响用户的第一印象,因此,开发一个整齐、美观的界面是至关重要的。3、Android应用的界面是由View和ViewGroup对象构建而成的。View类是Android系统平台上用户界面表示的基本单元,View的一些子类被统称为Widgets(工具),它们提供了诸如文本输入框和按钮之类的UI对象

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号