进阶– Java EE 7前端5强

ee-7概述 系列继续。 在初步概述和Arjan关于最重要的后端功能的文章之后 ,我现在非常高兴让Ed Burns( @edburns )使用他最喜欢的Java EE 7前端功能完成本系列。

感谢Markus Eisele让我有机会在他非常受欢迎的博客上发表帖子。 我和Markus的关系可以追溯到2010年左右,但我还没有来宾发布的乐趣。 Markus要求我介绍Java EE 7 Web层。 由于EE 7是非常成熟的平台的成熟版本,因此已经发布了很多有关它的信息。 我不会重述以前发生的事情,而是要就我认为重要的方面和每个方面的高级概述给出自己的看法。

如果您想了解更多有关第一手的知识,请考虑参加我在JavaLand 2016上的全日培训。我正在与现代金融和HTML5专家Oliver Szymanski一起进行培训。 有关详细信息,
请访问javaland网站 。

首先,从历史角度看。 Markus要求我写有关Java EE 7 Web层的文章。 让我们看看这个术语,也称为“ Web层”或“表示层”。 如果要相信围绕微服务等新概念的炒作,该术语本身就听起来有点过时,因为它暗示了一个三层体系结构,另外两层是“业务逻辑”,

“持久性”。 当然,三层还不够微观,对吗? 嗯,随着企业随着职责分配以寻求通过其软件实现最大业务价值的修补,这些层之间的界限变得越来越模糊。 无论如何,Java EE一直是Java平台的高度集成的企业技术集合,它使用基于共识的开放式开发实践(Java Community Process或JCP)进行了演进,并得到了主要利益相关者的实质性参与。 该平台的“ Web层”实际上只是在开发整体解决方案的“ Web层”时可能会有用的一组技术。 这是一个很大的清单:

  • WebSocket 1.0 JSR-356
  • JavaServer Faces 2.2 JSR-344
  • Servlet 3.1 JSR-340
  • JSON处理1.0 JSR-353
  • REST(JAX-RS)2.0 JSR 339
  • Bean验证1.1 JSR-349
  • 上下文和依赖注入1.1 JSR-346
  • Java 1.0 JSR-330的依赖项注入
  • Java EE 1.0 JSR-236的并发实用程序
  • 表达式语言3.0 JSR-341

出于本博客条目的目的,让我们看一下前五个:WebSocket,JSF,Servlet,JSON和JAX-RS。 尽管后五种无疑是专业Web层的必备要素,但查看它们超出了本博客条目的范围。

WebSocket

JSF和WebSocket是仅有的两个与W3C HTML5规范直接相关的Java EE 7规范。 对于WebSocket,实际上有三个不同的标准主体在起作用。 网络套接字WebSocket由IETF的RFC-6455指定。 WebSocket

W3C将JavaScript API指定为HTML5的子规范。 WebSocket Java API由JCP在JSR-356下指定。 在WebSocket的所有方面,重点是提供基于消息的可靠的全双工客户端-服务器连接。

通过JSR-356,您可以在Java SE和EE应用程序的客户端和服务器功能中使用WebSocket。

在服务器端,它允许您公开WebSocket终结点,以便浏览器可以使用其对WebSocket JavaScript API和网络协议的现有支持来连接到该终结点。 您可以通过注释一些POJOS或强制性地从Java代码(例如从ServletContextListener)调用引导API来向系统声明端点。 建立连接后,服务器可以从/向发生的任何数量的客户端发送和接收消息

同时连接。 运行时将自动处理连接设置和拆除。

WebSocket Java客户端API通过提供与W3C JavaScript WebSocket API的Java类似物,允许Java SE应用程序与WebSocket端点(Java或其他)对话。

Java Server Faces(JSF)

在JSF 2.2中,我们添加了许多新功能,但是在这里我将仅介绍其中的三个。

HTML5友好标记使您能够以几乎纯净HTML(必须格式正确)编写JSF页面,而无需使用某些人认为笨拙且难以理解的XML名称空间。 这是可能的,因为基础HTML Basic JSF RenderKit(来自JSF 1.0)提供了所有必要的原语,以采用任意的映射约定。

相应的JSF UIComponent的一部分HTML标记。 例如,这是有效的JSF表单

<form jsf:id="form"><input jsf:id="name" type="tel" jsf:value="#{complex.name}" /><progress jsf:id="progress" max="3" value="#{complex.progress}" /></form>

唯一的问题是需要通过使用命名空间属性将元素标记为JSF组件。 这意味着您必须在<html>标记中至少声明一个名称空间:

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"xmlns:jsf="http://xmlns.jcp.org/jsf">

Faces Flows是ADF Task Flows和Spring Web Flow中页面流概念的标准化。 流使您能够将具有某种逻辑连接并且需要共享状态的页面组合在一起。 流定义了一个逻辑作用域,该逻辑作用域在进入流时变为活动状态,并在退出流时可用于垃圾回收。 有多种丰富的语法可用于描述流程,如何输入,退出,如何相互关联,相互传递参数,

和更多。 由于在上下文和依赖注入(CDI)之上实现了流功能,因此提供了许多便利。 流可以打包为jar文件,并包含在您的Web应用程序中,从而实现Web应用程序各部分的模块化。

正如流程启用行为模块化一样,资源库合同(RLC)启用外观模块化。 RLC提供了一个非常灵活的蒙皮系统,该系统基于Facelets构建,并允许您将皮肤包装在jar文件中,从而有效地使外观模块化。

Servlet

Servlet 3.1中最重要的新功能是对非阻塞IO的附加支持。 它基于Servlet 3.0(来自Java EE 6)的主要功能:async io。 反应式编程的Swift兴起表明Java应用程序再也无法承受阻止IO的麻烦了。 反应式编程的四个关注点是:响应性,弹性,弹性和事件基础是在此前提下建立的。 在Servlet 3.1中非阻塞IO之前,很难避免在Servlet应用程序中阻塞。

基本思想是允许Servlet运行时在可以安全完成IO而不会阻塞的情况下回调您的应用程序。 这可以通过新的侦听器接口ReadListener和WriteListener来实现,它们的实例可以在ServletInputStream和ServletOutputStream上的方法中注册。

当您将此功能添加到Servlet 3.0中添加的async-io功能时,可以编写基于Servlet的应用程序,这些应用程序可以自豪地显示“ We Are Reactive”的标志。

JSON格式

从外部角度来看,使用Java解析和生成JSON的能力当然并不是什么新鲜事物。 甚至在Java EE 7之前,都有许多解决方案可以满足这一基本需求。 遵循标准不是为了创新而是要在现有思想上赋予特殊地位的原则,Java EE 7中的JSON支持提供了使用简单的Java API解析和生成JSON的功能。 可以使用JsonParser以流方式进行读取,也可以使用JsonReader以批量方式进行读取。 可以使用JsonGenerator以流方式完成编写。 可以使用JsonBuilderFactory和JsonWriter以批量样式进行编写。

JAX-RS

很难夸大REST对面向非最终用户的软件的现代企业软件开发实践的重要性。 我要说的是,人们去javadoc(或JSDoc或appledoc等)学习如何使用API​​的日子已经一去不复返了。 如今,如果您

企业API没有公开为RESTful Web服务,您甚至可能不会考虑。 JAX-RS是在Java中完成REST的方式。 自Java EE 6起,JAX-RS就成为Java EE的一部分,但在Java EE 7中得到了2.0的待遇。2.0中的主要功能包括:

  • 客户支持:我认为,此功能最有用的应用是使用JUnit对RESTful服务进行自动化测试,而不必依靠持续集成带来的麻烦。 当然,您也可以将其用于服务到服务的交互。
  • 与JSON的无缝集成:在大多数情况下,HTTP方法端点上的简单@Produces(“ application / json”)注释足以输出JSON。 JSON格式的数据也将以Java易于使用的格式自动提供给您。
  • 异步支持(再次处于响应状态):此功能使您能够执行生成对另一个线程的响应所需的处理,从而允许原始线程立即返回,因此不会发生阻塞。 异步线程准备就绪后可以自由响应。

自然,这只会刮擦Java EE 7 Web层的表面。 有关更多详细信息,一个不错的起点是正式的Java EE 7 启动网络研讨会 。

希望在JavaLand见到您!

谢谢Ed抽出宝贵时间写这篇文章。 如果现在还不是时候使用Java EE 7,那么下面是一些帮助您开始使用JBoss EAP 7和WildFly的资源:

  • EAP 7 Alpha和Java EE 7入门
  • 带有JBoss工具的OpenShift 3上的Java EE 7应用程序
  • GitHub上的Java EE 7示例
  • JBoss EAP 7快速入门

翻译自: https://www.javacodegeeks.com/2016/01/refresher-top-5-java-ee-7-frontend.html

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

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

相关文章

一杯水怎么测试_一杯水就能鉴别翡翠真假的高招

大家好&#xff0c;小生有礼&#xff01;鄙人是秋玉蝉珠宝的杨杨&#xff0c;很高兴能在茫茫互联网中相识就是有缘。先简单介绍一下秋玉蝉珠宝&#xff0c;我们是年轻的品牌&#xff0c;我们的理念一直秉承坚持做真翡翠&#xff0c;好翡翠&#xff0c;把握翡翠的精髓&#xff0…

214

python 进程&#xff1a;process 线程&#xff1a;thread转载于:https://www.cnblogs.com/jtlin/p/6397533.html

SpringBoot:与MyBatis合作

MyBatis是一个SQL映射框架&#xff0c;支持自定义SQL&#xff0c;存储过程和高级映射。 SpringBoot不为MyBatis集成提供官方支持&#xff0c;但MyBatis社区为MyBatis构建了SpringBoot入门程序。 您可以在http://blog.mybatis.org/2015/11/mybatis-spring-boot-released.html上…

wordpress房产信息网_Realia v3.1.2 wordpress房地产模板 租房网站模板

Product DescriptionRealia租赁门户模板。创造你自己的简单的方法房地产门户。教具支持dsidxpress WordPress插件和新的WP主题定制的API&#xff0c;它允许你做出实时的设计变化&#xff01;你也可以选择20种颜色的变化&#xff0c;10的背景图案&#xff0c;3头的设置和盒装或全…

r语言dataellipse_r – 在ggplot2中微调stat_ellipse()

我想创建一个具有95&#xff05;“精确”置信椭圆的二元正态分布的散点图.library(mvtnorm)library(ggplot2)set.seed(1)n c95 rho Sigma 我从双变量法线生成了1000个观测值,平均值为零,方差西格玛x z for(i in 1:n){z[i] p95[i] }我们可以使用stat_ellipse轻松地在生成数据的散…

openjpa_以编程方式向OpenJPA注册实体类型

openjpa我刚刚开始为Isis开发 OpenJPA对象库 。 在一般情况下&#xff0c;可以在persistence.xml文件中注册实体类型。 但是&#xff0c;Isis是一个框架&#xff0c;可以构建自己的元模型&#xff0c;并且可以自行确定哪些类构成实体。 因此&#xff0c;我不想强​​迫开发人员…

记录踩过的坑——代理IP

网络错误&#xff0c;查看是否有代理IP。转载于:https://www.cnblogs.com/dayang12525/p/6402068.html

php连接mysql_PHP连接MySQL数据库的三种方式

本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)&#xff0c;结合实例形式分析了PHP基于mysql、mysqli、pdo三种方式连接MySQL数据库的相关操作技巧与注意事项。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助…

使用Vert.x进行响应式开发

最近&#xff0c;似乎我们正在听到有关Java的最新和最好的框架的消息。 忍者 &#xff0c; SparkJava和Play等工具; 但是每个人都固执己见&#xff0c;使您感到您需要重新设计整个应用程序以利用它们的出色功能。 这就是为什么当我发现Vert.x时令我感到宽慰的原因。 Vert.x不是…

使用xtrabackup(innobackupex)实现MySQL的热备

mysql 的热备http://www.178linux.com/10139http://www.linuxidc.com/Linux/2014-04/99671.htmhttp://634871.blog.51cto.com/624871/1351049http://www.cnblogs.com/galengao/p/5755835.htmlhttp://heylinux.com/archives/3777.html 遇到问题&#xff0c;解决链接 http://blog…

mysql查看执行计划_MySql中如何使用 explain 查询 SQL 的执行计划

explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有局限性&#xff0c;并不总会说出真相&#xff0c;但它的输出是可以获取的最好信息&#xff0c;值得花时间去了解&#xff0c;因为可以学习到查询是如何执行的。1、什么是MySQL执行计划要对执行计划有个比较好…

vim的tab键设定

多在windows上编程的童鞋可能习惯于感受tab键为4个空格的长度&#xff0c;不过在linux系统中一般默认设定tab键为8个空格长度来显示。事实上tab也确实是8个空格的长度。不过由于习惯问题&#xff0c;某些童鞋还是希望在linux上也感受tab键为4个空格长度的显示&#xff0c;因为v…

依赖注入

依赖注入指的就是类A依赖于类B&#xff0c;通过外部注入的方式来实现&#xff0c;而不是通过自身去实现。 这样做的好处就是可以使得代码之间更加的解耦。 举个例子&#xff0c;船&#xff08;ship&#xff09;包含有船桨&#xff08;oar&#xff09;&#xff0c;以下为高耦合的…

idea内置junit5_JUnit的内置Hamcrest Core Matcher支持

idea内置junit5在通过JUnit和Hamcrest改善对assertEquals的文章中&#xff0c;我简要讨论了Hamcrest “ 核心 ”匹配器与JUnit的现代版本“结合”在一起的情况。 在那篇文章中&#xff0c;我特别关注了JUnit的assertThat&#xff08;T&#xff0c;Matcher&#xff09;静态方法与…

jenkins 发送邮件模板

jenkins 发送邮件模板 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>${ENV, var"JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head><body leftmargin"8" marginwidth"…

centos lnmp源码安装mysql_CentOS 6.6 下源码编译安装MySQL 5.7.5

说明&#xff1a;CentOS 6.6 下源码编译安装MySQL 5.7.51. 安装相关工具# yum -y install gcc-c ncurses-devel cmake make perl \gcc autoconf automake zlib libxml libgcrypt libtool bison2. 清理环境检查boost版本&#xff1a;# rpm -qa boost*卸载boost-*等库&#xff1a…

Oracle Spring Clean JavaFX应该吗?

我们确实在Codename One上依赖JavaFX&#xff0c;我们的模拟器需要它。 我们的桌面版本使用它&#xff0c;而我们的设计器工具基于Swing。 我们希望它成功&#xff0c;这对我们的业务至关重要&#xff01; 即使您是Java EE开发人员并且不关心桌面编程&#xff0c;我们也不是一个…

laravel mysql 锁表_Laravel中MySQL的乐观锁与悲观锁

MySQL/InnoDB的加锁&#xff0c;是一个老生常谈的话题。在数据库高并发请求下&#xff0c;如何兼顾数据完整性与用户体验的敏捷性是一代又一代程序员一直在思考的问题。乐观锁乐观锁之所以叫乐观&#xff0c;是因为这个模式不会对数据加锁。而是对数据操作保持一种乐观的心态&a…

python初心记录二

切片 L [1,2,3,4,5,6,7,8,9,0] L[0:3] L[-3] 迭代 如果给定一个list或tuple&#xff0c;我们可以通过for循环来遍历这个list或tuple&#xff0c;这种遍历我们称为迭代&#xff08;Iteration&#xff09;。 因为dict的存储不是按照list的方式顺序排列&#xff0c;所以&#xff0…

Spring对事物的实现

Spring对待事物的实现有一个标签可以使用Transactional标签来实现事务的管理&#xff0c;但是在使用的时候很多人不清楚实现的原理而使用了错误的使用方式&#xff0c;导致日志里的确是打印了&#xff0c;但是方法的确没有回滚。 我在遇到问题的时候发生了这样的问题&#xff0…