微架構spark--api開發利器
spark簡介
spark(注意不要同apache spark混淆)的設計初衷是,可以簡單容易地建立rest api或web應用程式。它是一個靈活、簡潔的架構,大小隻有1mb。spark允許使用者自己選擇設計應用程式的模闆引擎以及選擇最适合他們項目的庫,比如,html解析功能就有freemarker、mustaches、velocity、jade、handlebars、pebble或water等選項可供選擇,而且很少需要配置或樣闆檔案。不過,靈活簡單的代價是,使用者可選的功能減少。總之,spark剔除了許多java的臃腫之物,提供了一個最小化的、靈活的web架構。但由于精簡程度較高,它缺少了一些功能,不适合用于大型web應用程式的開發。
使用示例
1.在pom.xml檔案上加入依賴:
2. 編寫代碼
3.允許代碼且檢視結果
是不是很簡單?spark是最容易建立一個java web應用的開發架構,但它提供了對大多數類型的項目來說足夠的功能。
停止伺服器
通過調用stop()方法,服務将關閉且會清理掉所有的路由資訊。
路由
一個spark應用的主要子產品就是一組路由。路由有三部分組成:
一個方法。(get,post,put,delete,head,trace,connect,options).
一個路徑。(例如/hello, /users/:name)
一個回調。(request,response)->{}
路由的比對是按照路由的定義順序比對的。請求會觸發第一個比對的路由。
路由比對模式可以包含命名參數,根據請求對象的參數方法來通路:
路由比對模式也可以包含通配符參數。可以根據請求對象的通配符方法來通路:
請求
在處理方法中,請求參數提供了請求資訊和功能:
響應
在處理方法中,響應參數提供了響應參數和功能:
查詢參數map
查詢參數map支援根據字首将參數分組到map中。這可以對兩組參數進行分組,如user[name]和user[age]一樣。
cookie
session
每個請求可以通路在服務端建立的session,提供了下面的方法來通路:
停止
一個過濾器或者路由中快速停止一個請求的方法是:
你也可以在停止時,指定一個狀态。
後置過濾器在請求處理後進行,可以讀取請求,讀取/修改響應:
過濾器也可以比對請求(可選的),此時隻有當路徑比對時才進行處理:
直接跳轉
你可以使用redirect幫助方法将浏覽器頁面進行跳轉。
<code>response.redirect("/bar");</code>
你可以使用狀态碼3xx進行跳轉:
<code>response.redirect("/bar", 301); // moved permanentl</code>
異常映射
處理配置的所有的過濾器和路由的異常:
靜态檔案
使用staticfilelocation方法,你可以在classpath中指定一個檔案夾為靜态檔案提供服務。
注意,公共目錄不要包含在url中。一個檔案/public/css/style.css通路路徑為:http://{host}:{port}/css/style.css
還可以使用externalstaticfilelocationmethod在設定一個外部目錄(不在classpath)為靜态檔案提供服務:
響應轉換
映射路由将處理方法轉換成外部輸出。可以通過擴充responsetransformer,傳遞它到映射方法來完成。下面是一個使用gson将一個路由輸出轉換成json的示例:
使用上述類(mymessage是一個有‘message’成員變量的bean):
你也可以使用java8的方法引用,因為responsetransformer是有一個方法的接口:
視圖和模闆
templateviewroute由一個路徑(url比對的路徑)和一個實作了render方法的模闆引擎組成。
不用調用tostring()方法傳回的結果作為模闆的實體,templateviewroute傳回調用render方法作為結果。
這種類型route的主要目的是提供一個建立通用和可複用的使用模闆引擎渲染輸出的元件。
freemarker
使用freemarkder模闆引擎渲染對象到html。
maven依賴:
示例和源碼在 github上。
mustache
使用mustache模闆引擎渲染對象到html。
maven依賴如下:
示例和源碼在github上。
velocity
使用velocity模闆引擎渲染對象到html。
handlebars
使用handlebar模闆引擎渲染對象到html。
示例和源碼在github上
jada
使用jada模闆引擎渲染對象到html。
示例和源碼在 github上
pebble
使用pebble模闆引擎渲染對象到html。
water
使用water模闆引擎渲染對象到html。
内嵌的web伺服器
獨立的spark運作在一個嵌入的jetty web伺服器。
端口
預設情況下,spark運作在4567端口。如果你想使用别的端口,使用port方法。在使用過濾器和路由時已經完成:
安全
你可以通過secure方法來設定connection為安全的。這必須在所有路由映射之前完成:
線程池
可以非常容易的設定最大的線程數:
還可以配置最新線程數和空閑過期時間:
等待初始化
使用awaitinitialization() 方法來檢查伺服器是否準備好,可以處理請求了。
這通常在一個獨立的線程中來做,例如在伺服器啟動後運作一個健康監測子產品。
這個方法将使目前線程處于等待狀态直至jetty伺服器初始化完成。初始化等于的路由、過濾器。是以,若使用一個線程,請不要将該方法放到你定義的路由、過濾器之前。
其它的web伺服器
為運作叢集伺服器(不是獨立伺服器),需要實作spark.servlet.sparkapplication。必須在init方法中初始化路由,下面的過濾器也必須在web.xml中配置:
壓縮
若請求/響應封包頭中有此字段,壓縮将會自動完成。
生成javadoc
從github 上擷取到源碼後,運作下面的指令生成javadoc:
生成結果放入到/target/site/apidocs目錄下。
示例和教程
示例可以從工程目錄中擷取github
說明書可以從spark tutorial page擷取。