java ee打印功能_Java EE 8的前5个新功能

java ee打印功能

备受期待的Java Enterprise Edition 8版本具有两个令人兴奋的新API(JSON绑定1.0和Java EE Security 1.0),并且对当前API进行了改进(JAX-RS 2.1,Bean Validation 2.0,JSF 2.3,CDI 2.0,JSON-P) 1.1,JPA 2.2和Servlet 4.0)。 这是近四年来Oracle企业Java平台的第一个版本,它包含数百个新功能,更新的功能和错误修复。 那么最好的新功能是什么? 我试图在这篇博客文章中回答这个高度主观的问题。

TL; DR的前5个新功能

  1. 新的安全性API:注释驱动的身份验证机制
    全新的Security API包含三个出色的新功能:身份存储抽象,新的安全上下文以及新的注释驱动的身份验证机制,这些机制使web.xml文件声明过时。 这是我今天要谈论的最后一个。
  2. JAX-RS 2.1:新的React式客户端
    JAX-RS 2.1中新的React式客户端包含React式编程样式,并允许组合端点结果。
  3. 新的JSON绑定API
    新的JSON绑定API为JSON序列化和反序列化提供了本机Java EE解决方案。
  4. CDI 2.0:在Java SE中使用
    CDI 2.0中有趣的新功能允许在Java SE应用程序中引导CDI。
  5. Servlet 4.0:服务器推送
    Servlet 4.0中的服务器推送功能使Servlet规范与HTTP / 2保持一致。

你准备好了吗? 因此,让我们开始吧。

1.新的安全性API

Java EE 8中添加的最重要的一项新功能可能就是新的安全性API。

此新API的主要动机是简化,标准化和现代化跨容器和实现处理安全性问题的方式。 他们做得很好。

由于三个新的注释使web.xml文件声明多余,Web身份验证的配置已实现现代化。 稍后再详细介绍。

新的安全上下文 API标准化了Servlet和EJB容器执行身份验证以及

新的身份存储抽象可简化身份存储的使用。

因此,让我们看一下其中的第一个。

注释驱动的认证机制

此功能全部与配置Web安全有关。 web.xml文件中需要哪种传统的XML声明。

由于有了HttpAuthenticationMechanism接口,该接口代表HTTP身份验证,并带有三个内置的启用CDI的实现,每个实现都表示可配置Web安全性的三种方式之一,因此不再需要此功能。

使用这些注释之一触发它们。

@BasicAuthenticationMechanismDefinition
@FormAuthenticationMechanismDefinition
@CustomFormAuthenticationMechanismDefinition

它们复制了servlet容器中已经可用的经典HTTP基本身份验证,表单和基于自定义表单的身份验证的功能。

例如,要启用基本身份验证, 仅需向您的servlet添加BasicAuthenticationMechanismDefinition批注即可。

@BasicAuthenticationMechanismDefinition(realmName="${'user-realm'}")
@WebServlet("/user")
@DeclareRoles({ "admin", "user", "demo" })
@ServletSecurity(@HttpConstraint(rolesAllowed = "user"))
public class UserServlet extends HttpServlet { … }

现在,您可以放弃XML配置,并使用这些新注释之一来提高Web安全性。

2. JAX-RS 2.1:新的React式客户端

让我们看一下JAX-RS 2.1中新的React式客户端,以及它如何包含React式编程风格。

被动式方法以数据流的思想为中心,该模型具有一个执行模型,该模型可以在流中传播更改。 一个典型的示例是JAX-RS方法调用。 当调用返回时,将对方法调用的结果执行下一个操作(可能是继续,完成或错误)。

您可以将其视为流程的异步管道 ,而下一个流程将对前一个流程的结果起作用,然后将其流程的结果传递给链中的下一个流程。 数据流是可组合的,因此您可以将许多流组合并转换为一个结果。

通过在用于构造客户端实例的Invocation.Builder实例上调用rx()方法来启用React式功能。 它的返回类型是具有参数化响应类型CompletionStage 。 Java 8中引入了CompletionStage接口,并提出了一些有趣的可能性。

例如,在此代码段中,对不同的端点进行了两次调用,然后将结果合并:

CompletionStage<Response> cs1 = ClientBuilder.newClient().target(".../books/history").request().rx().get();CompletionStage<Response> cs2 = ClientBuilder.newClient().target(".../books/geology").request().rx().get();cs1.thenCombine(cs2, (r1, r2) ->r1.readEntity(String.class) + r2.readEntity(String.class)).thenAccept(System.out::println);

3.新的JSON绑定API

现在,让我们继续下一个重要功能。 新的JSON绑定API,此API为JSON序列化和反序列化提供了本机Java EE解决方案

以前,如果要在JSON上对Java进行序列化和反序列化,则必须依靠Jackson或GSON之类的第三方API。 不再。 使用新的JSON Binding API,您可以拥有所有可能希望本机可用的功能。

从Java对象生成JSON文档再简单不过了。 只需调用toJson()方法并将其要序列化的实例传递给它即可。

String bookJson = JsonbBuilder.create().toJson(book);

将JSON文档反序列化为Java对象也很简单。 只需将JSON文档和目标类传递给fromJson()方法,然后弹出您的Java对象。

Book book = JsonbBuilder.create().fromJson(bookJson, Book.class);

但这还不是全部。

行为定制

通过注释字段,JavaBeans方法和类,可以自定义默认的序列化和反序列化行为。

例如,您可以使用@JsonbNillable来自定义空处理,并使用@JsonbPropertyOrder批注来自定义在类级别指定的属性顺序。 你可以指定与@JsonbNumberFormat()标注的数字格式,并与@JsonbProperty()注释更改字段的名称。

@JsonbNillable
@JsonbPropertyOrder(PropertyOrderStrategy.REVERSE)
public class Booklet {@JsonbProperty("cost")@JsonbNumberFormat("#0.00")private Float price;}

或者,您可以选择使用运行时配置构建器JsonbConfig来处理定制:

JsonbConfig jsonbConfig = new JsonbConfig().withPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE_WITH_DASHES).withNullValues(true).withFormatting(true);Jsonb jsonb = JsonbBuilder.create(jsonbConfig);

无论哪种方式,JSON Binding API都为Java对象的序列化和反序列化提供了广泛的功能。

4. CDI 2.0:在Java SE中使用

现在,让我们继续下一个API。 CDI 2.0 API。 此版本具有许多新功能,更有趣的功能之一是能够在Java SE应用程序中引导CDI

要在Java SE中使用CDI,必须明确引导CDI容器。 这可以通过SeContainerInitializer抽象类上调用静态方法 newInstance() 来实现 。 它返回一个SeContainer实例,该实例是CDI运行时的句柄,您可以使用该实例执行CDI解析,如此代码段所示。 它可以访问BeanManager,它是CDI的核心入口点。

SeContainer seContainer =SeContainerInitializer.newInstance().initialize();Greeting greeting = seContainer.select(Greeting.class).get();greeting.printMessage("Hello World");seContainer.close();

通过向CDI bean传递要检索和使用的bean的类名,可以使用select()方法对其进行检索。

配置选项

通过添加拦截器,扩展,替代品,属性和装饰器,可以对SeContext进行进一步的配置

.enableInterceptors()
.addExtensions()
.selectAlternatives()
.setProperties()
.enableDecorators()

通过调用SeContainer上的close()方法来手动关闭容器,或者在使用try-with-resources结构时自动关闭容器,因为SeContainer扩展了AutoCloseable接口。

5. Servlet 4.0:服务器推送

最后但并非最不重要的一点是,Servlet 4.0中的服务器推送功能使Servlet规范与HTTP / 2保持一致。

要了解此功能,您首先需要知道什么是服务器推送。

什么是服务器推送?

服务器推送是HTTP / 2协议中众多新功能之一,旨在通过将客户端资源推送到浏览器的缓存中来预期客户端资源需求,以便当客户端发送对网页的请求并收到响应时返回从服务器上,它所需的资源已经在缓存中。 这是一项性能增强功能,可提高网页加载速度。

它在Servlet 4.0中如何公开?

在Servlet 4.0中, 服务器Push功能通过HttpServletRequest实例获得PushBuilder实例公开

看一下这个代码片段。 您可以看到header.png的路径是通过path()方法在PushBuilder实例上设置的,并通过调用push()将其推送到客户端。 当该方法返回时,将清除路径和条件标头,以供构建器重用。 推送menu.css文件,然后将ajax.js javascript文件推送到客户端。

protected void doGet(HttpServletRequest request, HttpServletResponse response) {PushBuilder pushBuilder = request.newPushBuilder();pushBuilder.path("images/header.png").push();pushBuilder.path("css/menu.css").push();pushBuilder.path("js/ajax.js").push();// Return JSP that requires these resources}

到Servlet doGet()方法完成执行时,资源将到达浏览器。 从JSP生成HTML需要这些资源,不需要从服务器请求它们,因为它们已经是浏览器缓存了。

结论

好吧,这是Java EE 8中最好的新功能,但是还有许多其他功能可以告诉您。

目前为止就这样了。

翻译自: https://www.javacodegeeks.com/2018/04/the-top-5-new-features-in-java-ee-8.html

java ee打印功能

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

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

相关文章

SDL2事件笔记

SDL2事件窗口关闭的事件&#xff1a;鼠标事件鼠标点击事件鼠标移动事件键盘事件用SDL_PollEvent(&event)来检测是否有事件&#xff0c;用SDL_Event的实例属性event.type来获取事件。 窗口关闭的事件&#xff1a; SDL_QUIT鼠标事件 鼠标点击事件 鼠标点击事件&#xff1…

什么是复数

我们把形如 zabi&#xff08;a、b均为实数&#xff09;的数称为复数。其中&#xff0c;a 称为实部&#xff0c;b 称为虚部&#xff0c;i 称为虚数单位。当 z 的虚部 b&#xff1d;0 时&#xff0c;则 z 为实数&#xff1b;当 z 的虚部 b≠0 时&#xff0c;实部 a&#xff1d;0 …

qnx 设备驱动开发_QNX驱动开发——应用层与resource manger交互 | 学步园

QNX操作系统是一个类Unix实时操作系统&#xff0c;遵从POSIX规范&#xff0c;驱动程序具有良好的可移植性。编写任何驱动程序都会遇到同样的一个问题&#xff1a;应用程序与驱动程序之间是如何进行交互的。其实这个问题很简单&#xff0c;QNX有大量资料说明这一点。当客户端调用…

spring api层打包_Spring项目的按层打包已过时

spring api层打包我认为Spring应用程序不应该以逐层方法构造。 在我看来&#xff0c;按功能打包更有意义。 首先&#xff0c;让我简要描述每种方法。 “按层打包”&#xff08;在非Java世界中为“按类型折叠”&#xff09; 该项目结构根据源代码文件所属的体系结构层将其分为…

C++ Primer(第五版)第七章 类 部分答案

第七章 类练习7.2练习7.3练习7.4练习7.6练习7.7练习7.9练习7.14、7.15、7.22练习7.23、7.24、7.26练习7.27练习7.2 曾在 2.6.2 节的练习&#xff08;第 76 页&#xff09;中编写了一个 Sales_data类&#xff0c;请向这个类添加 combine 和 isbn 成员。 创建头文件sales.h #ifn…

arpanet(阿帕网)

“阿帕”&#xff08;ARPA&#xff09;&#xff0c;是美国高级研究计划署&#xff08;Advanced Research Project Agency&#xff09;的简称。他的核心机构之一是信息处理技术办公室&#xff08;IPTO Information Processing Techniques Office&#xff09;&#xff0c;一直在关…

mongodb数据库淘汰_mongodb 内存数据淘汰策略

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼About MongoMongoDB uses memory mapped files.This means the the operating system essentially controls what is paged in and out of memory (to and from disk).The RulesIf your indexes working set exceed memory, the l…

Markdown常用转义字符

如果字符无法正常输出&#xff0c;则在前面加\试试。 空格&#xff1a; 数学公式 数学公式要使用$$&#xff0c;需将公式放在两个$中间。 下标: _上标: ^分数&#xff1a;方法1&#xff1a;\frac{分子}{分母} 方法2&#xff1a;分子 \over 分母 对于\frac的方法…

互联网工程任务组(IETF)

国际互联网工程任务组&#xff08;The Internet Engineering Task Force&#xff0c;简称 IETF&#xff09;是一个公开性质的大型民间国际团体&#xff0c;汇集了与互联网架构和互联网顺利运作相关的网络设计者、运营者、投资人和研究人员&#xff0c;并欢迎所有对此行业感兴趣…

javafx 打印控件_Java的新视差控件(JavaFX)

javafx 打印控件介绍 视差是一种视觉效果&#xff0c;您可以组合以不同速度移动的两个分层图像以获得深度感。 想想一下&#xff0c;当您在道路上行驶时&#xff0c;您会看到附近的树木在快速移动&#xff0c;而距离较远的树木将沿同一方向移动但速度较慢&#xff0c;结果是您…

beoplay耳机序列号查询_BOSE耳机序列号如何查询?

展开全部 大多数序列号可在产品的背面或底部找到,一般位于条形码旁。e69da5e6ba903231313335323631343130323136353331333431363532序列号长度为 17 位(还有一些耳机是 4 位),可包含字母和数字。 另外,与 Bose Connect 应用程序兼容的产品将在应用程序的设置和gt; 产品信息下…

编译原理总概述笔记

编译原理编译原理程序设计语言分类翻译编译解释编译的转换过程两阶段的转换三阶段的转换编译程序的工作词法分析语法分析中间代码生成优化目标代码生成表格与表格管理出错处理语句翻译实例过程编写编译程序方式编译原理 是介绍高级程序设计语言变换成计算机硬件所能识别的机器…

RFC(一系列以编号排定的文件)

Request For Comments&#xff08;RFC&#xff09;&#xff0c;是一系列以编号排定的文件。文件收集了有关互联网相关信息&#xff0c;以及UNIX和互联网社区的软件文件。RFC文件是由Internet Society&#xff08;ISOC&#xff09;赞助发行。基本的互联网通信协议都有在RFC文件内…

deprecated_使用Java的@Deprecated前瞻

deprecated我偶尔会遇到一种情况&#xff0c;我需要引入新的API或构造以供其他人试用&#xff0c;但是我知道在使用某些API后&#xff0c;它可能会根据其他人的反馈而改变。 在这种情况下&#xff0c;我想以某种方式注释该构造&#xff0c;以警告其他开发人员此新添加的构造的暂…

fusionsphere的核心组件_FusionSphere架构详解

FusionSphere架构详解关键字&#xff1a;云计算XEN Hypervisor FusionSphere摘要&#xff1a;本技术案例主要针对Huawei FusionSphere云计算软件架构进行深入分析&#xff0c;总结概括出我们的FusionSphere云计算产品技术及课程内容中的关键点&#xff0c;为产品技术学习和云计…

将py文件打包成exe可执行文件

使用pyinstaller库即可将py文件打包成exe文件 安装pyinstaller库 pip install pyinstaller将py文件打包成exe文件 1.首先进入cmd&#xff0c;用cd命令定位到要打包的py文件所在的文件夹 2.使用以下命令打包py文件 pyintaller -F xxx.py #xxx.py就是要打包的文件之后会生成…

文件的 MD5 签名介绍

在 RFC1321 中有 MD5 的详细描述。简单的说&#xff0c;MD5 根据文件的内容用算法产生一个唯一的128位签名&#xff0c;用任何方法改变文件都会导致签名改变。尽管人们一直在讨论修改文件后能保持签名不变的理论可能性&#xff0c;但截止到目前还没有人能够做到。所以在文件使用…

apache.camel_Apache Camel 2.21发布–新增功能

apache.camel我们刚刚发布了Apache Camel 2.21&#xff0c;我将在此博客中重点介绍值得注意的更改。 此版本不支持Spring Boot2。对Spring Boot 2的支持将在Camel 2.22中提供&#xff0c; 我们计划在2018年夏季之前发布。 1&#xff09;处理大型JMS消息 我们在JMS组件中添加了…

人生永无止境的意思是什么_励志人生:生活不会给任何脆弱鼓掌。

每一日你所付出的代价都比前一日高&#xff0c;因为你的生命又消短了一天&#xff0c;所以每一日你都要更积极。今天太宝贵&#xff0c;不应该为酸苦的忧虑和辛涩的悔恨所销蚀&#xff0c;抬起下巴&#xff0c;抓住今天&#xff0c;它不再回来。一个人失败的最大原因&#xff0…

精通 RPM 之校验篇_检验篇_检测篇

文章目录一、校验介绍二、参考示例&#xff08;一&#xff09;校验某个已安装的软件包的所有文件&#xff08;一&#xff09;校验系统中所有已安装的软件包&#xff08;二&#xff09;校验含有指定文件的软件包&#xff08;三&#xff09;校验指定类别的软件包&#xff08;四&a…