使用 Spring Boot 内嵌容器 Undertow建立伺服器的方法
Undertow是一個Web伺服器,那麼它就需要具備的現代Web伺服器的基本特性,比如Servlet,JSP,檔案伺服器,代理伺服器,安全認證等。undertow目前已經實作了絕大多數功能,并且因為wildfly通過了JavaEE7 TCK認證,是以可以說Undertow是一個通過Servlet 3.1認證的Web伺服器和容器。這篇文章隻分析Undertow的主幹流程上的主要功能,即undertow-core和undertow-servlet。
1、簡介
Undertow是一個非常輕量并高性能的web server,它來自 JBoss。支援blocking和non-blocking兩種NIO API。
由于它是用Java寫的,是以它可以被那些JVM-based 的應用通過内嵌的方式來使用。甚至JBoss的WilfFly伺服器在内部使用Undertow來提高伺服器的性能。
在本文中,我們将介紹Undertow的主要功能并給出使用代碼。
2. 為什麼要選擇Undertow?
輕量級 :Undertow 是非常小的,隻有不到1MB。在内嵌模式下,運作時隻占heap空間的4MB左右。
Servlet 3.1:完美支援 Servlet 3.1
Web Socket :支援 Web Socket (包括JSR-356)
長連接配接 :預設情況下 ,Undertow 通過添加keep-alive 的response header來支援長連接配接。它通過重用連接配接資訊(connection details)來改善長連接配接的性能。
3. 使用Undertow
不多說,讓我們使用Undertow來建立一個簡單的web server吧!
3.1. Maven 依賴
加入如下依賴:
要建構一個可運作的jar,我們還需要添加一個maven-shade-plugin。像下面這樣:
最新版的Undertow已經放到了maven 中央倉庫,随便玩耍吧。
3.2. 簡單的Server
僅僅需要下面的幾行代碼,就可以建立一個簡單的web server,Undertow的入口使用的是Builder API。
這裡我們使用Builder API把server綁定到8080端口上。同時我們使用了lambda表達式配置了一個handler。你也可以不用lambda表達式做同樣的事情:
最主要的事情就是這裡對HttpHandler API的使用。這個是根據我們的需要定制Undertow應用程式的最重要的武器。
在這裡,我們添加了一個自定義的handler,邏輯就是讓每個request都有一個Content-Type: text/plain response header。
同樣的,如果你想讓每個response都傳回預設的text文本,你可以像下面這樣來定義:
3.3.安全通路
在大多數情況下,我們不希望所有的使用者都可以通路我們的server。通常,隻有那些攜帶了合法“護照”的才可以通路。在Undertow上,我們同樣可以實作這樣的機制。
要想實作這個,我們隻需要建立一個認證管理器,這個管理器會檢查每個請求的使用者資訊。
下面我們就來實作一個自定義的IdentityManager:
一旦認證mananger被建立,我們需要建立一個“領地”來儲存使用者的資訊。
這裡我們使用了 AuthenticationMode.PRO_ACTIVE,表示每個來到這個server的請求都将會經過我們指定的認證機制來踴躍的進行認證。
如果我們使用了AuthenticationMode.CONSTRAINT_DRIVEN模式,那麼隻有那些被明确要求過濾的請求才會經過認證機制。
現在,我們隻需要把儲存使用者資訊的“領地”和認證管理器關聯起來就可以了。
截止目前,我們已經建立了兩個使用者執行個體。一旦server啟動了以後,要想通路,我們就需要使用這個兩個證書才行。
3.4. Web Socket
使用Undertow的WebSocketHttpExchange API建立web socket exchange channel 同樣非常簡單。
下面,我們就打開一個socket通信channel,在/importsourceApp path上:
然後我們就可以建立一個HTML頁面 index.html,然後使用js的WebSocket API來連接配接到這個channel上了。
3.5. File Server
使用Undertow,我們也可以建立一個檔案伺服器(file server),它可以顯示目錄内容,并直接從目錄中提供檔案:
你甚至都不需要穿件任何UI來顯示目錄。Undertow 為你提供了一個開箱即用的頁面。
4. Spring Boot Plugin
Spring Boot把Undertow也内嵌進去了,作為繼Tomcat和Jetty之後第三個内嵌的servlet 容器。要想在Spring Boot中使用Undertow隻需要加下面的依賴就是了:
5. 總結
在本文中,我們了解了Undertow以及如何使用它建立不同類型的伺服器。
以上所述是小編給大家介紹的Spring Boot 内嵌容器 Undertow,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對碼農之家網站的支援!
以上就是本次給大家分享的關于java的全部知識點内容總結,大家還可以在下方相關文章裡找到相關文章進一步學習,感謝大家的閱讀和支援。