Java微服務框架之Undertow
Undertow 是紅帽公司(RedHat)的開源產品,是 WildFly8(JBoos) 預設的 Web 伺服器。
官網API給出一句話概述Undertow:
Undertow is a flexible performant web server written in java, providing both blocking and non-blocking API’s based on NIO.
譯文: Undertow是一個用java編寫的靈活的高效能Web伺服器,提供基於NIO的阻塞和非阻塞API。
官網API總結特點:
Lightweight(輕量級)
Undertow非常輕量級,Undertow核心jar包在1Mb以下。 它在執行時也是輕量級的,有一個簡單的嵌入式伺服器使用少於4Mb的堆空間
HTTP Upgrade Support(支援http升級)
支援HTTP升級,允許多個協議通過HTTP埠進行多路複用
Web Socket Support(支援WebScoket)
Undertow提供對Web Socket的全面支援,包括JSR-356支援
Servlet 3.1
Undertow提供對Servlet 3.1的支援,包括對嵌入式servlet的支援。 還可以在同一部署中混合Servlet和本機Undertow非阻塞處理程式
Embeddable(可嵌入的)
Undertow可以嵌入在應用程式中或獨立執行,只需幾行程式碼
6. Flexible(靈活性)
Undertow框架jar包: undertow-core.jar undertow-servlet.jar
二、Undertow示例:
1.官網給出一個Undertow Web 伺服器使用非同步IO的方式向介面輸出字串
1 import io.undertow.Undertow; 2 import io.undertow.server.HttpHandler; 3import io.undertow.server.HttpServerExchange; 4 import io.undertow.util.Headers; 5 6 public class HelloWorldServer { 7 public static void main(String[] args) { 8 Undertow server=Undertow.builder() 9 .addHttpListener(8080, "localhost").setHandler(new HttpHandler(){//設定HttpHandler的回撥方法 10 @Override 11 public void handleRequest(HttpServerExchange exchange) 12 throws Exception { 13 exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain"); 14 exchange.getResponseSender().send("This is my first insert server!"); 15 } 16 }).build(); 17 server.start(); 18 } 19 }
2.Undertow來部署Servlet
1 import io.undertow.Handlers; 2 import io.undertow.Undertow; 3 import io.undertow.server.HttpHandler; 4 import io.undertow.server.handlers.PathHandler; 5 import io.undertow.servlet.Servlets; 6 import io.undertow.servlet.api.DeploymentInfo; 7 import io.undertow.servlet.api.DeploymentManager; 8 import io.undertow.servlet.api.ServletContainer; 9 import io.undertow.servlet.api.ServletInfo; 10 11 import javax.servlet.ServletException; 12 13 import org.wildfly.undertow.quickstart.servlet.MyServlet; 14 15 public class ServletServer { 16 17 public static void main(String[] args) { 18 19 /* 20 * 建立ServletInfo,Servelt的最小單位。是對javax.servlet.Servlet具體實現的再次封裝。 21 * 注意:ServletInfo的name必須是唯一的 22 */ 23 ServletInfo servletInfo1 = Servlets.servlet("MyServlet", 24 MyServlet.class); 25 // 建立servletInfo的初始化引數 26 servletInfo1.addInitParam("message", "This is my first MyServlet!"); 27 // 繫結對映為/myServlet 28 servletInfo1.addMapping("/myServlet"); 29 /** 30 * 建立包部署物件,包含多個servletInfo。可以認為是servletInfo的集合 31 */ 32 DeploymentInfo deploymentInfo1 = Servlets.deployment(); 33 // 指定ClassLoader 34 deploymentInfo1.setClassLoader(ServletServer.class.getClassLoader()); 35 // 應用上下文(必須與對映路徑一致,否則sessionId會出現問題,每次都會新建) 36 deploymentInfo1.setContextPath("/myapp"); 37 // 設定部署包名 38 deploymentInfo1.setDeploymentName("myServlet.war"); 39 // 新增servletInfo到部署物件中 40 deploymentInfo1.addServlets(servletInfo1); 41 /** 42 * 使用預設的servlet容器,並將部署新增至容器 43 * 容器,用來管理DeploymentInfo,一個容器可以新增多個DeploymentInfo 44 */ 45 ServletContainer container = Servlets.defaultContainer(); 46 /** 47 * 將部署新增至容器並生成對應的容器管理物件 48 * 包部署管理。是對新增到ServletContaint中DeploymentInfo的一個引用,用於執行釋出和啟動容器 49 */ 50 DeploymentManager manager = container.addDeployment(deploymentInfo1); 51 // 實施部署 52 manager.deploy(); 53 /** 54 * 分發器:將使用者請求分發給對應的HttpHandler 55 */ 56 PathHandler pathHandler = Handlers.path(); 57 /** 58 * servlet path處理器,DeploymentManager啟動後返回的Servlet處理器。 59 */ 60 HttpHandler myApp=null; 61 try { 62 //啟動容器,生成請求處理器 63 myApp=manager.start(); 64 } catch (ServletException e) { 65 throw new RuntimeException("容器啟動失敗!"); 66 } 67 //繫結對映關係 68 pathHandler.addPrefixPath("/myapp", myApp); 69 70 Undertow server=Undertow.builder(). 71 //繫結埠號和主機 72 addHttpListener(8081, "localhost") 73 //設定分發處理器 74 .setHandler(pathHandler).build(); 75 //啟動server 76 server.start(); 77 } 78 }
自定義MyServlet
1 import java.io.IOException; 2 import java.io.PrintWriter; 3 4 import javax.servlet.ServletException; 5 import javax.servlet.http.HttpServlet; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 public class MyServlet extends HttpServlet { 10 11 private static final long serialVersionUID = 2378494112650465478L; 12 13 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 14 doPost(req, resp); 15 } 16 17 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 18 PrintWriter writer = resp.getWriter(); 19 writer.write("<p style='color:red;text-align:center;'>"+this.getInitParameter("message")+"</p>"); 20 writer.close(); 21 } 22 23 }
如下圖,是本人抽象出Undertow生成應用的架構:
示例執行:
在瀏覽器位址列裡輸入:http://localhost:8081/myapp/myServlet,介面上會顯示ServletInfo的初始化引數message資料
相關推薦
Java微服務框架之Undertow
Undertow 是紅帽公司(RedHat)的開源產品,是 WildFly8(JBoos) 預設的 Web 伺服器。 官網API給出一句話概述Undertow: Undertow is a flexible performant web ser
【外掛釋出】JAVA微服務框架,Jeecg-P3-Demo 1.0.0 外掛開源釋出
JAVA微服務框架,Jeecg-P3-Demo 1.0.0 外掛開源釋出 Jeecg-P3-Demo專案,採用JEECG-P3微服務框架技術,做了幾個常見Demo功能案例:普通列表、樹列表、一對多列表、產品管理(bootstrap-talbe列表)等功能,為大家快速瞭解使用P3微服務
Oracle釋出開源的輕量級 Java 微服務框架 Helidon
近日,Oracle推出了一個新的開源框架Helidon,該專案是一個用於建立基於微服務的應用程式的Java庫集合。和Payara Micro、Thorntail(之前的WildFly Swarm)、OpenLiberty、TomEE等專案一樣,該專案也加入了MicroProfile家族。 Helidon最初
【外掛釋出】JAVA微服務框架,Jeecg-P3-Base-System 1.0.0 外掛開源釋出
JAVA微服務框架,Jeecg-P3-Base-System 1.0.0 外掛開源釋出 系統管理外掛,採用JEECG-P3微服務框架技術,實現了P3外掛平臺支撐的基礎功能:使用者管理,角色管理、選單管理等功能。 實現許可權攔截器,在jeecg-p3-starter-web
Spring Cloud 微服務框架之服務註冊與發現
Spring Cloud介紹 Spring Cloud是一個相對比較新的微服務框架,2016才推出1.0的release版本. 雖然Spring Cloud時間最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分散式系統解決方案。 Spring Cloud 為
Java 微服務框架選型(Dubbo 和 Spring Cloud?)
微服務(Microservices)是一種架構風格,一個大型複雜軟體應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是鬆耦合的。每個微服務僅關注於完成一件任務並很好地完成該任務。在所有情況下,每個任務代表著一個小的業務能力。 以往我們開發應用程式都是單體型(可以看作是一個怪獸
最熱門的13個Java微服務框架(內附java學習教程分享)
文件中 實現 日誌 管理 最大 學習教程 之一 試圖 .com 曾經的服務器領域有許多不同的芯片架構和操作系統,經過長期發展,Java的“一次編譯,到處運行”使得它在服務器領域找到一席之地,成為程序員們的最愛 本文,我們將和大家分享13個可靠的Java微服務架構最後,如果大
(轉)微服務框架落地實踐之路
整合 改善 系統調用 系列 開源 服務 .com 跨語言 拆分 http://www.primeton.com/read.php?id=2276&his=1 一、微服務架構產生的背景 近十年中,互聯網給我們生活帶來了翻天覆地的變化,消費者的生活方式日益數字
(一)surging 微服務框架使用系列之surging 的準備工作rabbitmq安裝
-s nec word 完成 ngs spa size win64 安裝目錄 (1)下載erlang: http://www.erlang.org/download/otp_win64_17.3.exe 並安裝 (2)下載RabbitMQ: http://www.rabbi
(二)surging 微服務框架使用系列之surging 的準備工作consul安裝
-s 接口 web web管理 ice ips ace 個數 不能 suging 的註冊中心支持consul跟zookeeper。因為consul跟zookeeper的配置都差不多,所以只是consul的配置 consul下載地址:https://www.consul.io
(五)surging 微服務框架使用系列之緩存-reids
contain option tac 初始 目前 運行程序 執行 tin 直接 1.服務跟客戶端初始化的時候需要添加緩存配置 1 var host = new ServiceHostBuilder() 2 .Re
Java微服務之Spring Boot on Docker
一、準備工作 1.1 安裝Docker環境 這一部分請參考我的另一篇文章《ASP.NET Core on Docker》,本文不再贅述。需要注意的是,如果你是Windows想要安裝Docker,Docker for Windows需要64bit Windows 10 Pro,且需要開啟Hy
NutzWk 5.1.2 釋出,Java 微服務分散式開發框架
NutzWk 5.1.2 更新內容: 增加微服務異常時的友好錯誤提示; 增加Web服務的500錯誤頁面配置; 增加對不支援的IE版本友好提示; 修復Result類一個方法預設值為空的問題; 完善程式碼生成器,支援Vue版本程式碼生成 (IDEA官方外掛庫搜 w
Java微服務之專案部署
專案部署 步驟一 安裝Linux系統(如果是購買的伺服器就不用安裝系統) 步驟二 修改檔案源(修改加速器) 步驟三 安裝docker-compose和docker 一.開始使用的大致流程 1.docker-compose安裝,可以使用一下命令安裝也可以從官方下載
SpringBoot2.0.0高版本搭建SpringCloud微服務框架搭建採坑筆記之註冊中心(一)
自學springCloud框架,因為什麼都不懂 就自己摸索慢慢來 但是其中出現了很多問題 寫個部落格記錄一下 也提醒一下其他同仁別犯我一樣的錯誤之前我一直認為springboot的高版本對低版本有良好的相容性 其實並沒有 到了高版本會出現很多新的內容 甚至是以前的內容都
dubbo微服務框架—學習之路
流程需求介紹:在一個購物系統的模組中,之前的前後臺連線用的是httpClient跨域技術,web連向後臺管理、購物車或者訂單等後端。具體細分其中的層:收集好的使用者請求經web前端處理後,傳遞到後臺的controller—service—mybatis,從資料庫取到資料最後原路返回。 微
Spring Boot微服務框架整合之通用mapper外掛(tk.mybatis)
繼我上次的Springboot框架整合,整合了初步的微服務框架,還有mybatis整合實現資料庫查詢資料的demo現在給大家再整合一個本人覺得比較好用的通用mapper外掛(tk.mybatis),這個外掛裡面封裝好了我們需要用到的很多sql語句,不過這個外掛是通過我們去呼叫
Java一個全新的微服務框架(RedKale)
RedKale (中文名: 紅菜薹,湖北武漢的一種特產蔬菜) 是基於Java 8全新的微服務框架, 包含HTTP、WebSocket、TCP/UDP、資料序列化、資料快取、依賴注入等功能。 本框架致力於簡化集中式和微服務架構的開發,在增強開發敏捷性的同時保持高效
微服務框架surging學習之路——序列化
成員 cor 傳輸 pack bubuko href 框架 跨語言 html 原文:微服務框架surging學習之路——序列化1.對微服務的理解 之前看到在群裏的朋友門都在討論微服務,看到他們的討論,我也有了一些自己的理解,所謂微服務就是系統裏的每個服務都 可以自由組
golang微服務框架go-micro 入門筆記2.1 micro工具之micro api
micro api micro 功能非常強大,本文將詳細闡述micro api 命令列的功能 重要的事情說3次 本文全部程式碼h