进阶– Java EE 7前端5强
系列繼續(xù)。 在初步概述和Arjan關(guān)于最重要的后端功能的文章之后 ,我現(xiàn)在非常高興讓Ed Burns( @edburns )使用他最喜歡的Java EE 7前端功能完成本系列。
感謝Markus Eisele讓我有機(jī)會在他非常受歡迎的博客上發(fā)表帖子。 我和Markus的關(guān)系可以追溯到2010年左右,但我還沒有來賓發(fā)布的樂趣。 Markus要求我介紹Java EE 7 Web層。 由于EE 7是非常成熟的平臺的成熟版本,因此已經(jīng)發(fā)布了很多有關(guān)它的信息。 我不會重述以前發(fā)生的事情,而是要就我認(rèn)為重要的方面和每個(gè)方面的高級概述給出自己的看法。
如果您想了解更多有關(guān)第一手的知識,請考慮參加我在JavaLand 2016上的全日培訓(xùn)。我正在與現(xiàn)代金融和HTML5專家Oliver Szymanski一起進(jìn)行培訓(xùn)。 有關(guān)詳細(xì)信息,
請?jiān)L問javaland網(wǎng)站 。
首先,從歷史角度看。 Markus要求我寫有關(guān)Java EE 7 Web層的文章。 讓我們看看這個(gè)術(shù)語,也稱為“ Web層”或“表示層”。 如果要相信圍繞微服務(wù)等新概念的炒作,該術(shù)語本身就聽起來有點(diǎn)過時(shí),因?yàn)樗凳玖艘粋€(gè)三層體系結(jié)構(gòu),另外兩層是“業(yè)務(wù)邏輯”,
“持久性”。 當(dāng)然,三層還不夠微觀,對嗎? 嗯,隨著企業(yè)隨著職責(zé)分配以尋求通過其軟件實(shí)現(xiàn)最大業(yè)務(wù)價(jià)值的修補(bǔ),這些層之間的界限變得越來越模糊。 無論如何,Java EE一直是Java平臺的高度集成的企業(yè)技術(shù)集合,它使用基于共識的開放式開發(fā)實(shí)踐(Java Community Process或JCP)進(jìn)行了演進(jìn),并得到了主要利益相關(guān)者的實(shí)質(zhì)性參與。 該平臺的“ Web層”實(shí)際上只是在開發(fā)整體解決方案的“ Web層”時(shí)可能會有用的一組技術(shù)。 這是一個(gè)很大的清單:
- 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驗(yàn)證1.1 JSR-349
- 上下文和依賴注入1.1 JSR-346
- Java 1.0 JSR-330的依賴項(xiàng)注入
- Java EE 1.0 JSR-236的并發(fā)實(shí)用程序
- 表達(dá)式語言3.0 JSR-341
出于本博客條目的目的,讓我們看一下前五個(gè):WebSocket,JSF,Servlet,JSON和JAX-RS。 盡管后五種無疑是專業(yè)Web層的必備要素,但查看它們超出了本博客條目的范圍。
WebSocket
JSF和WebSocket是僅有的兩個(gè)與W3C HTML5規(guī)范直接相關(guān)的Java EE 7規(guī)范。 對于WebSocket,實(shí)際上有三個(gè)不同的標(biāo)準(zhǔn)主體在起作用。 網(wǎng)絡(luò)套接字WebSocket由IETF的RFC-6455指定。 WebSocket
W3C將JavaScript API指定為HTML5的子規(guī)范。 WebSocket Java API由JCP在JSR-356下指定。 在WebSocket的所有方面,重點(diǎn)是提供基于消息的可靠的全雙工客戶端-服務(wù)器連接。
通過JSR-356,您可以在Java SE和EE應(yīng)用程序的客戶端和服務(wù)器功能中使用WebSocket。
在服務(wù)器端,它允許您公開WebSocket終結(jié)點(diǎn),以便瀏覽器可以使用其對WebSocket JavaScript API和網(wǎng)絡(luò)協(xié)議的現(xiàn)有支持來連接到該終結(jié)點(diǎn)。 您可以通過注釋一些POJOS或強(qiáng)制性地從Java代碼(例如從ServletContextListener)調(diào)用引導(dǎo)API來向系統(tǒng)聲明端點(diǎn)。 建立連接后,服務(wù)器可以從/向發(fā)生的任何數(shù)量的客戶端發(fā)送和接收消息
同時(shí)連接。 運(yùn)行時(shí)將自動處理連接設(shè)置和拆除。
WebSocket Java客戶端API通過提供與W3C JavaScript WebSocket API的Java類似物,允許Java SE應(yīng)用程序與WebSocket端點(diǎn)(Java或其他)對話。
Java Server Faces(JSF)
在JSF 2.2中,我們添加了許多新功能,但是在這里我將僅介紹其中的三個(gè)。
HTML5友好標(biāo)記使您能夠以幾乎純凈HTML(必須格式正確)編寫JSF頁面,而無需使用某些人認(rèn)為笨拙且難以理解的XML名稱空間。 這是可能的,因?yàn)榛A(chǔ)HTML Basic JSF RenderKit(來自JSF 1.0)提供了所有必要的原語,以采用任意的映射約定。
相應(yīng)的JSF UIComponent的一部分HTML標(biāo)記。 例如,這是有效的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>唯一的問題是需要通過使用命名空間屬性將元素標(biāo)記為JSF組件。 這意味著您必須在<html>標(biāo)記中至少聲明一個(gè)名稱空間:
<!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中頁面流概念的標(biāo)準(zhǔn)化。 流使您能夠?qū)⒕哂心撤N邏輯連接并且需要共享狀態(tài)的頁面組合在一起。 流定義了一個(gè)邏輯作用域,該邏輯作用域在進(jìn)入流時(shí)變?yōu)榛顒訝顟B(tài),并在退出流時(shí)可用于垃圾回收。 有多種豐富的語法可用于描述流程,如何輸入,退出,如何相互關(guān)聯(lián),相互傳遞參數(shù),
和更多。 由于在上下文和依賴注入(CDI)之上實(shí)現(xiàn)了流功能,因此提供了許多便利。 流可以打包為jar文件,并包含在您的Web應(yīng)用程序中,從而實(shí)現(xiàn)Web應(yīng)用程序各部分的模塊化。
正如流程啟用行為模塊化一樣,資源庫合同(RLC)啟用外觀模塊化。 RLC提供了一個(gè)非常靈活的蒙皮系統(tǒng),該系統(tǒng)基于Facelets構(gòu)建,并允許您將皮膚包裝在jar文件中,從而有效地使外觀模塊化。
Servlet
Servlet 3.1中最重要的新功能是對非阻塞IO的附加支持。 它基于Servlet 3.0(來自Java EE 6)的主要功能:async io。 反應(yīng)式編程的Swift興起表明Java應(yīng)用程序再也無法承受阻止IO的麻煩了。 反應(yīng)式編程的四個(gè)關(guān)注點(diǎn)是:響應(yīng)性,彈性,彈性和事件基礎(chǔ)是在此前提下建立的。 在Servlet 3.1中非阻塞IO之前,很難避免在Servlet應(yīng)用程序中阻塞。
基本思想是允許Servlet運(yùn)行時(shí)在可以安全完成IO而不會阻塞的情況下回調(diào)您的應(yīng)用程序。 這可以通過新的偵聽器接口ReadListener和WriteListener來實(shí)現(xiàn),它們的實(shí)例可以在ServletInputStream和ServletOutputStream上的方法中注冊。
當(dāng)您將此功能添加到Servlet 3.0中添加的async-io功能時(shí),可以編寫基于Servlet的應(yīng)用程序,這些應(yīng)用程序可以自豪地顯示“ We Are Reactive”的標(biāo)志。
JSON格式
從外部角度來看,使用Java解析和生成JSON的能力當(dāng)然并不是什么新鮮事物。 甚至在Java EE 7之前,都有許多解決方案可以滿足這一基本需求。 遵循標(biāo)準(zhǔn)不是為了創(chuàng)新而是要在現(xiàn)有思想上賦予特殊地位的原則,Java EE 7中的JSON支持提供了使用簡單的Java API解析和生成JSON的功能。 可以使用JsonParser以流方式進(jìn)行讀取,也可以使用JsonReader以批量方式進(jìn)行讀取。 可以使用JsonGenerator以流方式完成編寫。 可以使用JsonBuilderFactory和JsonWriter以批量樣式進(jìn)行編寫。
JAX-RS
很難夸大REST對面向非最終用戶的軟件的現(xiàn)代企業(yè)軟件開發(fā)實(shí)踐的重要性。 我要說的是,人們?nèi)avadoc(或JSDoc或appledoc等)學(xué)習(xí)如何使用API??的日子已經(jīng)一去不復(fù)返了。 如今,如果您
企業(yè)API沒有公開為RESTful Web服務(wù),您甚至可能不會考慮。 JAX-RS是在Java中完成REST的方式。 自Java EE 6起,JAX-RS就成為Java EE的一部分,但在Java EE 7中得到了2.0的待遇。2.0中的主要功能包括:
- 客戶支持:我認(rèn)為,此功能最有用的應(yīng)用是使用JUnit對RESTful服務(wù)進(jìn)行自動化測試,而不必依靠持續(xù)集成帶來的麻煩。 當(dāng)然,您也可以將其用于服務(wù)到服務(wù)的交互。
- 與JSON的無縫集成:在大多數(shù)情況下,HTTP方法端點(diǎn)上的簡單@Produces(“ application / json”)注釋足以輸出JSON。 JSON格式的數(shù)據(jù)也將以Java易于使用的格式自動提供給您。
- 異步支持(再次處于響應(yīng)狀態(tài)):此功能使您能夠執(zhí)行生成對另一個(gè)線程的響應(yīng)所需的處理,從而允許原始線程立即返回,因此不會發(fā)生阻塞。 異步線程準(zhǔn)備就緒后可以自由響應(yīng)。
自然,這只會刮擦Java EE 7 Web層的表面。 有關(guān)更多詳細(xì)信息,一個(gè)不錯(cuò)的起點(diǎn)是正式的Java EE 7 啟動網(wǎng)絡(luò)研討會 。
希望在JavaLand見到您!
謝謝Ed抽出寶貴時(shí)間寫這篇文章。 如果現(xiàn)在還不是時(shí)候使用Java EE 7,那么下面是一些幫助您開始使用JBoss EAP 7和WildFly的資源:
- EAP 7 Alpha和Java EE 7入門
- 帶有JBoss工具的OpenShift 3上的Java EE 7應(yīng)用程序
- GitHub上的Java EE 7示例
- JBoss EAP 7快速入門
翻譯自: https://www.javacodegeeks.com/2016/01/refresher-top-5-java-ee-7-frontend.html
總結(jié)
以上是生活随笔為你收集整理的进阶– Java EE 7前端5强的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机版ddos攻击器(ddos攻击器手机
- 下一篇: linux颜色代表什么(linux $(