1. 程式人生 > >Java微服務框架之Undertow

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;
 3
import 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