Javalin 是一個非常輕量級的 Kotlin 和 Java Web 框架,支援 WebSockets、HTTP2 和非同步請求。 Javalin 的主要目標是簡單性、出色的開發人員體驗以及 Kotlin 和 Java 之間一流的互通性。
Javalin 與其說是一個框架,不如說是一個函式庫。一些關鍵點:
你不需要擴展任何東西
沒有@Annotations
沒有反射
沒有其他魔法;只是程式碼。
專案網頁是javalin.io(原始碼位於javalin/javalin.github.io)。
閱讀以下文件:javalin.io/documentation
許可證摘要可在 TLDR Legal 找到
有趣的問題
我們有一個非常活躍的 Discord 伺服器,您可以在其中快速獲得幫助。如果您願意的話,我們還有一個(不太活躍的)Slack。
非常歡迎貢獻,您可以在我們的指南中閱讀有關貢獻的更多資訊:貢獻
如果您想支持該項目,請考慮贊助或主演 Javalin。
<依賴關係>io.javalin javalin <版本>6.3.0版本> 依賴>
實作(“io.javalin:javalin:6.3.0”)
導入 io.javalin.Javalin;public class HelloWorld { public static void main(String[] args) { var app = Javalin.create(/*config*/) .get("/", ctx -> ctx.result("Hello World")) .開始(7070); } }
導入 io.javalin.Javalinfun main() { val app = Javalin.create(/*config*/) .get("/") { it.result("Hello World") } .開始(7070) }
本節包含一些範例,大部分只是從文件中提取的。所有範例均採用 Kotlin 語言,但您可以在文件中找到 Java 語言版本(只是語法變更)。
您可以在 javalin-samples 儲存庫中找到更多範例。
導入 io.javalin.Javalinimport io.javalin.apibuilder.ApiBuilder.*fun main() { val app = Javalin.create { 設定 -> config.useVirtualThreads = true config.http.asyncTimeout = 10_000L config.staticFiles.add("/public") config.staticFiles.enableWebjars() config.router.apiBuilder { 路徑(“/用戶”){ 取得(使用者控制器::getAll) 發布(用戶控制器::創建) 路徑(“/{userId}”){ 取得(使用者控制器::getOne) 補丁(使用者控制器::更新) 刪除(使用者控制器::刪除) } ws("/events", userController::webSocketEvents) } } }.開始(7070) }
app.ws("/websocket/{path}") { ws -> ws.onConnect { ctx -> println("已連接") } ws.onMessage { ctx -> val user = ctx.message() // 從 json 字串轉換為對象 ctx.send(user) // 轉換為json字串並發回 } ws.onClose { ctx -> println("已關閉") } ws.onError { ctx -> println("錯誤") } }
app.before("/some-path/*") { ctx -> ... } // 在對/some-path/*app 的請求之前執行app.before { ctx -> ... } // 在所有請求之前執行app .after { ctx -> ... } // 在所有請求之後執行app.exception(Exception.class) { e, ctx -> ... } // 如果未捕獲則執行Exceptionapp.error (404) { ctx -> .. . } // 如果狀態為404(在所有其他處理程序之後),則執行app.wsBefore("/some-path/*") { ws -> ... } / / 在/some-path/*app 上的ws 事件之前執行.wsBefore { ws -> ... } // 在所有ws 事件之前執行app.wsAfter { ws -> ... } // 在所有ws 事件之後執行app.wsException(Exception.class) { e, ctx -> ... } // 如果 ws 處理程序中未捕獲異常則執行
var todos = arrayOf(...) app.get("/todos") { ctx -> // 將 Todos 數組映射到 json 字串 ctx.json(待辦事項) } app.put("/todos") { ctx -> // 將 request-body (json) 對應到 Todos 數組 todos = ctx.body>() ctx.狀態(204) }
app.post("/上傳") { ctx -> ctx.uploadedFiles("files").forEach { uploadedFile -> FileUtil.streamToFile(uploadedFile.content(), "upload/${uploadedFile.filename()}") } }
Javalin 有一個外掛系統,可讓您為核心庫添加功能。您可以在此處找到插件列表。
安裝插件就像向專案添加依賴項並使用 Javalin 註冊一樣簡單:
Javalin.create { 設定 -> config.registerPlugin(MyPlugin()) }
一些最受歡迎的插件是:
Javalin OpenAPI 外掛程式可讓您在編譯時為您的 API 產生 OpenAPI 3.0 規格。
使用@OpenApi
註解您的路由以產生規範:
@OpenApi( 摘要 =“獲取所有用戶”, 操作Id = "取得所有使用者", 標籤= [“用戶”], 回應 = [OpenApiResponse("200", [OpenApiContent(Array::class)])], 路徑=“/用戶”, 方法 = [HttpMethod.GET] )fun getAll(ctx: 上下文) { ctx.json(UserService.getAll()) }
也可以使用 Swagger UI 和 ReDoc UI 實作來在瀏覽器中查看產生的規格。
有關更多信息,請參閱 Javalin OpenAPI Wiki。
Javalin SSL 外掛程式可讓您輕鬆為 Javalin 伺服器配置 SSL,支援多種格式,例如 PEM、PKCS12、DER、P7B 和 JKS。
在 443 連接埠上啟用 SSL 非常簡單:
val 插件 = SSLPlugin {conf -> conf.pemFromPath("/path/to/cert.pem", "/path/to/key.pem") }Javalin.create { javalinConfig -> javalinConfig.plugins.register(插件) }。
標識 | 贊助 |
---|---|
@barbarysoftware(50 美元/月) | |
KabCash (50 美元/月) |
米澤拉尼 (Blake Mizerany),創作辛納屈 (Sinatra)
Per Wendel,創建 Spark
克里斯蒂安·拉斯穆森(Christian Rasmussen),因為他是一個偉大的人
Per Kristian Kummermo,也是一個偉大的人