input发送a.jax_JAX-RS 2.0:服务器端处理管道

input发送a.jax

这篇文章的灵感来自JAX-RS 2.0规范文档 (附录C)中的Processing Pipeline部分。 我喜欢它的原因在于它提供了JAX-RS中所有模块的漂亮快照-以准备好吞咽的胶囊形式!

礼貌– JAX-RS 2.0规范文档

礼貌– JAX-RS 2.0规范文档

因此,我想到了使用此图简要概述不同的JAX-RS组件以及它们如何相互协调。

涵盖了什么?

  • 过滤器(请求和响应)
  • 方法匹配
  • 注射
  • 拦截器(请求和响应)
  • 实体提供者(请求和响应)

注意:这里讨论的是服务器端处理管道,即在客户端发送HTTP请求(GET,POST,PUT等)之后触发的动作序列

当客户端(浏览器或自定义REST客户端)向您的RESTful服务发送HTTP请求时,一切就开始了!

请求过滤器(链)

请求过滤器

客户端请求由JAX-RS过滤器处理。 它们适用于服务器端和客户端(我们将研究服务器端过滤器-基于请求和响应)

  • 过滤器是可选组件,您可以通过简单地实现ContainerRequestFilter接口来编写过滤器。 需要使用@Provider批注对它们进行批注,以通过JAX-RS运行时自动检测
  • 可以更改ContainerRequestContext的实例并更改标头,Cookie,URI等属性。过滤器不允许您访问HTTP请求正文/消息有效负载( 拦截器可以做到这一点)
  • 可用于实现日志记录,身份验证等
  • 如果需要在资源方法匹配之前执行过滤器实现类,请在实现类上使用@PreMatching批注。
  • 过滤器可以(全局)绑定到所有JAX-RS方法,也可以使用@NamedBinding批注或DynamicFeature接口的实现有选择地绑定
  • @Priority批注可用于确定多个过滤器(顺序链)的执行顺序。

方法匹配

在(成功)执行过滤器之后,JAX-RS运行时将启动资源方法匹配过程

  • 调用的确切方法基于规范概述的算法 (尽管JAX-RS提供程序不受其约束)
  • 由以下提到的注释的组合确定
  • @ GET,@ PUT,@ POST,@ DELETE等–这些注释应与实际的HTTP操作匹配(注释到HTTP动词的映射非常明显)
  • @Path –其值(相对于上下文根)用于映射请求URI,例如/ tweeters / all
  • @Consumes –其值应与HTTP请求中发送的Content-Type标头值匹配
  • @Produces –其值应与HTTP请求中发送的Accept标头值匹配

HTTP组件注入

方法匹配完成后,所需的HTTP组件将在JAX-RS运行时注入到JAX-RS资源类中(如果已配置)。 我们需要做的就是使用适当的注释

HTTP URI参数

  • @QueryParam –从URI查询参数中提取值并将其注入,例如, http : //tweeter.com/info?tweeter = abhi_tweeter上的GET请求
  • @PathParam –从URI模板参数中提取值并将其注入,例如在http://tweeter.com/info/tweeter/abhi_tweeter上的GET请求
  • @MatrixParam –从URI矩阵参数中提取值并将其注入

其他HTTP组件

JAX-RS使访问(注入)HTTP请求组件(如标头,Cookie甚至HTTP表单数据)变得容易

  • @HeaderParam –提取请求的标头。 您还可以使用@Context批注注入HttpHeaders实例
  • @CookieParam –用于从HTTP请求中注入HTTP cookie
  • @FormParam –可以帮助使用HTTP POST请求从通过HTML表单发送的属性中插入值
  • @BeanParam –可以帮助在自定义域类的实例变量上使用上述所有与注入相关的注释,而不是使用这些注释将值注入各个方法参数

请求拦截器(链)

req-interceptors-entityproviders

拦截器适用于服务器端和客户端(我们将仅查看服务器端拦截器-基于请求和响应)

  • 拦截器有助于在处理HTTP请求有效负载之前对其进行突变
  • 仅当在JAX-RS运行时中注册了MessageBodyReader (请参见下一主题)实现时,才调用请求拦截器。
  • 用于传入服务器请求的拦截器由ReaderInterceptor接口的实现处理,并且需要使用@Provider注释进行注释,以通过JAX-RS运行时自动检测
  • ReaderInterceptorContext实例在JAX-RS运行时传递,并且可以使用java.io.InputStream形式访问HTTP正文。
  • 拦截器可以(全局)绑定到所有JAX-RS方法,也可以通过使用@NamedBinding批注或DynamicFeature接口的实现有选择地绑定
  • 拦截器可以被链接和(使用@priority)和优先呼叫的继续进行ReaderInterceptorContext的方法自动调用链中的或化MessageBodyReader实现本身下一个拦截
  • ReaderInterceptor充当MessageBodyReader的包装器(在内部调用)

实体提供者(

实体提供者帮助将HTTP消息有效负载转换为适当的Java类型(用于注入到JAX-RS资源类的方法参数中),反之亦然

  • HTTP请求有效负载到其对应的Java类型的转换是通过实现MessageBodyReader接口的具体类完成的
  • MessageBodyReader实现的readFrom方法是执行操作的地方。 JAX-RS运行时会传入所有上下文信息,包括有效载荷本身(以InputStream的形式),然后可以对其进行自省并将其转换为适当的Java类型。
  • JAX-RS规范要求,对于某些Java类型(例如String,InputStream,File等),实现应包含MessageBodyReader接口的现成实现。

响应过滤器(链)

过滤器

响应过滤器类似于前面讨论的以请求为中心的过滤器。

  • 响应过滤器是可选组件,您可以通过简单地实现ContainerResponseFilter接口来编写一个。
  • 这些类型的过滤器用于修改响应标头,添加cookie等。可以更改ContainerResponseContext的实例并更改属性以实现此目的。 筛选器不允许您访问HTTP响应正文/消息有效负载( 拦截器可以执行此操作)
  • 需要使用@Provider批注对它们进行批注,以通过JAX-RS运行时自动检测
  • 过滤器可以(全局)绑定到所有JAX-RS方法,也可以使用@NamedBinding批注或DynamicFeature接口的实现有选择地绑定
  • @Priority批注可用于确定多个过滤器(顺序链)的执行顺序。

响应拦截器(链)

resp-interceptors-entityproviders1

  • 仅当注册MessageBodyWriter (请参阅下一主题)以处理传出的HTTP有效负载时,才调用它们。
  • 传出服务器响应的拦截器由类WriterInterceptor的实现处理,并且需要使用@Provider注释进行注释,以通过JAX-RS运行时自动检测
  • 可以将拦截器进行链接和确定优先级(使用@Priority),并调用WriterInterceptorContext的proce方法会自动调用链中的下一个拦截器或MessageBodyWriter实现本身
  • WriterInterceptor充当MessageBodyWriter的包装器(在内部调用)

实体提供者(

  • 应用程序代码返回的Java对象到HTTP响应有效负载的转换是通过实现MessageBodyWriter接口的具体类完成的
  • MessageBodyWriter实现的writeTo方法是执行操作的地方。 JAX-RS运行时将所有上下文信息与OutputStream一起传递给OutputStream ,从Java类型转换后,响应流可以写入该OutputStream。
  • JAX-RS规范要求,对于某些Java类型(如String,InputStream,File等),实现应包含MessageBodyWriter接口的现成实现。

好吧! 这是对服务器端请求处理如何在JAX-RS中工作以及哪些组件起作用的相当简短的概述。 谢谢阅读。 干杯!

参考资料

  • JAX-RS规格文件
  • Java EE 7 API Java文档

翻译自: https://www.javacodegeeks.com/2015/01/jax-rs-2-0-server-side-processing-pipeline.html

input发送a.jax

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 登录失败,qq音乐登录失败 QQ音乐总是显示登录失败是怎么回事

urlproc.exe是什么进程?没见过,请前辈们指点?造成QQ音乐登录不上现象的原因有如下三种可能: 一、木马病毒对QQ音乐的必要组件或文件进行破坏,导致QQ音乐登录失败,登陆不上的情况发生。 二、Windows系统防火墙(或其他安…

C 常对象成员

C 常对象成员在C 中,可以将对象的成员声明为const,包括常数据成员和常成员函数C 常数据成员 常数据成员的作用与一般常变量相似,用关键字const来声明常数据成员。常数据成员的值是不能改变的,只能通过构造函数的参数初始化表对常数…

娄底二中高考2021成绩查询,2021年娄底高考状元名单公布,娄底高考状元学校资料及最高分...

2019年高考已经落下帷幕,高考放榜时刻就要到来,每年的高考状元都会被各界高度关注,那么今年娄底高考状元花落谁家呢?娄底高考状元会给人带来惊喜吗,让我们一起期待2019年娄底高考状元的诞生。下面小编为给为梳理下历年…

C 常指针

C 指向对象的常指针C 定义指向对象的常指针的一般形式为 类名 * const指针变量名;也可以在定义指针变量时使之初始化在C 中,虽然指向对象的常指针变量的值不能改变,但可以改变其所指向对象的值,如果想将一个指针变量固定地与一个对…

microsoftexchange邮箱容量怎样看_企业邮箱申请注册的要求有哪些?_网站建设_创客网络...

随着现在互联网信息化发展的速度不断加快,企业邮箱作为企业之间信息传输的重要工具,其重要性不亚于企业网站,但市场上企业邮箱种类繁多,包含的功能也各不相同,稍有差异,你知道怎么去选择好企业邮箱吗&#…

Unity中Shader观察空间推导(在Shader中实现)

文章目录 前言一、观察空间矩阵推导1、求观察空间基向量2、求观察空间的基向量在世界空间中的矩阵 的 逆矩阵2、求平移变换矩阵3、相乘得出 观察空间转化矩阵4、得到顶点的世界空间坐标,然后转化到观察空间5、把观察空间坐标转化为齐次裁剪坐标输出到屏幕 二、最终效…

C 常引用

C 对象常引用在C 中,常用常指针和常引用作函数参数,既能保证数据安全,使数据不能被随意修改,在调用函数时又不必建立实参的拷贝。用常指针和常引用作函数参数,可以提高程序运行效率。在C 中,如果变量名和引…

mui hello html5 安装,HBuilder开发App Step1——环境搭建,HelloMUI 以及真机调试(示例代码)...

No1. 必须搭建java环境只需要最基础的java环境,也就是cmd下可以运行java和javac即可,具体教程请自行百度,都会有很详细的教程,这里不重点介绍。No2. 下载安装HBuilder下载完成后请将zip包解压缩到自定义的目录(windows)&#xf…

C 析构函数

C 析构函数概述C 析构函数是一个特殊的成员函数,作用与构造函数相反,它的名字是类名的前面加一个~符号,析构函数是与构造函数作用相反的函数,当对象的生命期结束时,会自动执行析构函数。C 执行析构函数的情…

vue 侦听器侦听对象属性_不删除侦听器–使用ListenerHandles

vue 侦听器侦听对象属性听一个可观察的实例并对它的变化做出React很有趣。 做一些必要的事情来打断或结束这种聆听会变得很有趣。 让我们看看问题的根源和解决方法。 总览 这篇文章将首先讨论这种情况,然后再讨论常见的方法和问题所在。 然后,它将提供解…

华硕笔记本桌面没有显示计算机,华硕笔记本的桌面不见了,急求高手解答

满意答案下放工人2013.04.06采纳率:54% 等级:12已帮助:5701人★桌面-点击鼠标右键-点击排列图标-点击显示桌面图标★在桌面上右键点击→“属性”→桌面项→左下有个“自定义桌面”进入设置,把…

Facebook开源 C++11 组件库,真香!

Folly是Facebook open source library的缩写,提供了类似 Boost 和 std 库的功能。包括散列、字符串、向量、内存分配、位处理等,满足大规模高性能的需求。逻辑设计Folly 是一组相对独立的组件,有的简单到几个符号。对内部依赖没有限制&#x…

undertow ssl_SSL与WildFly 8和Undertow

undertow ssl我一直在研究WildFly 8的一些安全性主题,偶然发现了一些没有很好记录的配置选项。 其中之一是用于新的Web子系统Undertow的TLS / SSL配置。 有很多关于较旧的Web子系统的文档,并且确实仍然可以使用,但是这里是使用新方法进行配置…

C++对象的动态建立

C对象的动态建立和释放在C中,如果定义的对象是静态的,在程序运行过程中,对象所占的空间是不能随时释放的。为提高内存空间的利用率,希望在需要用到对象时才建立对象,在不需要用该对象时就撤销它,释放它所占…

java字符连接字符串数组_Java中连接字符串的最佳方法

java字符连接字符串数组最近有人问我这个问题–在Java中使用运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗。 这些是我要研究的方法: 使用运算符 使用StringBuilder 使用StringBuffer…

C 构造函数重载

C 用参数初始化表对数据成员初始化在C 中,构造函数的函数可以通过体内赋值语句对数据成员实现初始化,C 还提供另一种初始化数据成员的方法,用参数初始化表来实现对数据成员的初始化。这种方法不在函数体内对数据成员初始化,而是在…

乐播投延迟很高_大屏也要高刷新!华为4K@120智慧屏初体验,屏幕软件都够硬

买电视就是买屏幕,华为智慧屏也不例外。可参数大而全的旗舰产品往往都有着相当高昂的售价,假如你不愿意将就千元级别的画质,希望电视能坚持更长时间,却又没有足以点满所有技能树的预算……华为新出的S系列智慧屏,大概正…

java常见性能优化_十大最常见的Java性能问题

java常见性能优化Java性能是所有Java应用程序开发人员都关心的问题,因为快速使应用程序与使其正常运行同等重要。 史蒂文海恩斯(Steven Haines)使用他在Java性能问题上的个人经验得出的结论是, 大多数问题都有共同的根本原因 。 因…

为甚 html 显示为源码,显示字符串作为美化HTML源代码

我正在开发一个ASP.NET MVC Web应用程序。在一个页面上,我有一个字符串,如下所示:This is some text !对于预览模式,我使用Html.Raw(Model.MyText),文本显示为呈现的HTML:此是一些文字!我现在想…

C语言 | 链表概述

C语言链表概述链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构,是根据需要开辟内存单元。链表有一个“头指针”变量,它存放一个地址,该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部…