這篇文章給大家分享的是有關(guān)如何使用Spring Boot內(nèi)嵌容器Undertow創(chuàng)建服務(wù)器的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
十余年的忻城網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整忻城建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“忻城網(wǎng)站設(shè)計(jì)”,“忻城網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
Undertow是一個(gè)Web服務(wù)器,那么它就需要具備的現(xiàn)代Web服務(wù)器的基本特性,比如Servlet,JSP,文件服務(wù)器,代理服務(wù)器,安全認(rèn)證等。undertow目前已經(jīng)實(shí)現(xiàn)了絕大多數(shù)功能,并且因?yàn)閣ildfly通過(guò)了JavaEE7 TCK認(rèn)證,所以可以說(shuō)Undertow是一個(gè)通過(guò)Servlet 3.1認(rèn)證的Web服務(wù)器和容器。這篇文章只分析Undertow的主干流程上的主要功能,即undertow-core和undertow-servlet。
1、簡(jiǎn)介
Undertow是一個(gè)非常輕量并高性能的web server,它來(lái)自 JBoss。支持blocking和non-blocking兩種NIO API。
由于它是用Java寫(xiě)的,所以它可以被那些JVM-based 的應(yīng)用通過(guò)內(nèi)嵌的方式來(lái)使用。甚至JBoss的WilfFly服務(wù)器在內(nèi)部使用Undertow來(lái)提高服務(wù)器的性能。
在本文中,我們將介紹Undertow的主要功能并給出使用代碼。
2. 為什么要選擇Undertow?
輕量級(jí) :Undertow 是非常小的,只有不到1MB。在內(nèi)嵌模式下,運(yùn)行時(shí)只占heap空間的4MB左右。
Servlet 3.1:完美支持 Servlet 3.1
Web Socket :支持 Web Socket (包括JSR-356)
長(zhǎng)連接 :默認(rèn)情況下 ,Undertow 通過(guò)添加keep-alive 的response header來(lái)支持長(zhǎng)連接。它通過(guò)重用連接信息(connection details)來(lái)改善長(zhǎng)連接的性能。
3. 使用Undertow
不多說(shuō),讓我們使用Undertow來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的web server吧!
3.1. Maven 依賴(lài)
加入如下依賴(lài):
要構(gòu)建一個(gè)可運(yùn)行的jar,我們還需要添加一個(gè)maven-shade-plugin。像下面這樣:
最新版的Undertow已經(jīng)放到了maven 中央倉(cāng)庫(kù),隨便玩耍吧。
3.2. 簡(jiǎn)單的Server
僅僅需要下面的幾行代碼,就可以創(chuàng)建一個(gè)簡(jiǎn)單的web server,Undertow的入口使用的是Builder API。
這里我們使用Builder API把server綁定到8080端口上。同時(shí)我們使用了lambda表達(dá)式配置了一個(gè)handler。你也可以不用lambda表達(dá)式做同樣的事情:
最主要的事情就是這里對(duì)HttpHandler API的使用。這個(gè)是根據(jù)我們的需要定制Undertow應(yīng)用程序的最重要的武器。
在這里,我們添加了一個(gè)自定義的handler,邏輯就是讓每個(gè)request都有一個(gè)Content-Type: text/plain response header。
同樣的,如果你想讓每個(gè)response都返回默認(rèn)的text文本,你可以像下面這樣來(lái)定義:
3.3.安全訪問(wèn)
在大多數(shù)情況下,我們不希望所有的用戶(hù)都可以訪問(wèn)我們的server。通常,只有那些攜帶了合法“護(hù)照”的才可以訪問(wèn)。在Undertow上,我們同樣可以實(shí)現(xiàn)這樣的機(jī)制。
要想實(shí)現(xiàn)這個(gè),我們只需要?jiǎng)?chuàng)建一個(gè)認(rèn)證管理器,這個(gè)管理器會(huì)檢查每個(gè)請(qǐng)求的用戶(hù)信息。
下面我們就來(lái)實(shí)現(xiàn)一個(gè)自定義的IdentityManager:
一旦認(rèn)證mananger被創(chuàng)建,我們需要?jiǎng)?chuàng)建一個(gè)“領(lǐng)地”來(lái)保存用戶(hù)的信息。
這里我們使用了 AuthenticationMode.PRO_ACTIVE,表示每個(gè)來(lái)到這個(gè)server的請(qǐng)求都將會(huì)經(jīng)過(guò)我們指定的認(rèn)證機(jī)制來(lái)踴躍的進(jìn)行認(rèn)證。
如果我們使用了AuthenticationMode.CONSTRAINT_DRIVEN模式,那么只有那些被明確要求過(guò)濾的請(qǐng)求才會(huì)經(jīng)過(guò)認(rèn)證機(jī)制。
現(xiàn)在,我們只需要把保存用戶(hù)信息的“領(lǐng)地”和認(rèn)證管理器關(guān)聯(lián)起來(lái)就可以了。
截止目前,我們已經(jīng)創(chuàng)建了兩個(gè)用戶(hù)實(shí)例。一旦server啟動(dòng)了以后,要想訪問(wèn),我們就需要使用這個(gè)兩個(gè)證書(shū)才行。
3.4. Web Socket
使用Undertow的WebSocketHttpExchange API創(chuàng)建web socket exchange channel 同樣非常簡(jiǎn)單。
下面,我們就打開(kāi)一個(gè)socket通信channel,在/importsourceApp path上:
然后我們就可以創(chuàng)建一個(gè)HTML頁(yè)面 index.html,然后使用js的WebSocket API來(lái)連接到這個(gè)channel上了。
3.5. File Server
使用Undertow,我們也可以創(chuàng)建一個(gè)文件服務(wù)器(file server),它可以顯示目錄內(nèi)容,并直接從目錄中提供文件:
你甚至都不需要穿件任何UI來(lái)顯示目錄。Undertow 為你提供了一個(gè)開(kāi)箱即用的頁(yè)面。
4. Spring Boot Plugin
Spring Boot把Undertow也內(nèi)嵌進(jìn)去了,作為繼Tomcat和Jetty之后第三個(gè)內(nèi)嵌的servlet 容器。要想在Spring Boot中使用Undertow只需要加下面的依賴(lài)就是了:
感謝各位的閱讀!關(guān)于“如何使用Spring Boot內(nèi)嵌容器Undertow創(chuàng)建服務(wù)器”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!