Javalin は、WebSocket、HTTP2、および非同期リクエストをサポートする、Kotlin および Java 用の非常に軽量な Web フレームワークです。 Javalin の主な目標は、シンプルさ、優れた開発者エクスペリエンス、Kotlin と Java 間の最高級の相互運用性です。
Javalin はフレームワークというよりはライブラリです。いくつかの重要なポイント:
何も延長する必要はありません
@アノテーションはありません
反射はありません
他に魔法はありません。コードだけ。
プロジェクトの Web ページは 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")
import io.javalin.Javalin;public class HelloWorld { public static void main(String[] args) { var app = Javalin.create(/*config*/) .get("/", ctx -> ctx.result("Hello World")) .start(7070); } }
import io.javalin.Javalinfun main() { val app = Javalin.create(/*config*/) .get("/") { it.result("Hello World") } .start(7070) }
このセクションにはいくつかの例が含まれていますが、そのほとんどはドキュメントから抜粋したものです。すべての例は Kotlin で記述されていますが、ドキュメントでは Java で記述されています (構文が変更されているだけです)。
javalin-samples リポジトリには、さらに多くの例があります。
import io.javalin.Javalinimport io.javalin.apibuilder.ApiBuilder.*fun main() { val app = Javalin.create { config -> config.useVirtualThreads = true config.http.asyncTimeout = 10_000L config.staticFiles.add("/public") config.staticFiles.enableWebjars() config.router.apiBuilder { パス("/ユーザー") { get(ユーザーコントローラー::getAll) post(ユーザーコントローラー::作成) パス("/{userId}") { get(ユーザーコントローラー::getOne) パッチ(ユーザーコントローラー::更新) 削除(ユーザーコントローラー::削除) } ws("/events", userController::webSocketEvents) } } }.start(7070) }
app.ws("/websocket/{パス}") { ws -> ws.onConnect { ctx -> println("接続済み") } ws.onMessage { ctx -> val user = ctx.message() // json 文字列からオブジェクトに変換 ctx.send(user) // json文字列に変換して送り返す } ws.onClose { ctx -> println("Closed") } ws.onError { ctx -> println("エラー") } }
app.before("/some-path/*") { ctx -> ... } // /some-path/*app.before { ctx -> ... } // すべてのリクエストの前に実行app .after { ctx -> ... } // すべてのリクエストの後に実行app.Exception(Exception.class) { e, ctx -> ... } // キャッチされなかった場合に実行app.error(404) { ctx -> .. 。 } // ステータスが 404 の場合に実行されます (他のすべてのハンドラーの後)app.wsBefore("/some-path/*") { ws -> ... } // /some-path/*app の ws イベントの前に実行されます。 wsBefore { ws -> ... } // すべての ws events の前に実行app.wsAfter { ws -> ... } // すべての ws eventsapp.wsException(Exception.class) { e, ctx -> の後に実行... } // ws ハンドラーで例外がキャッチされなかった場合に実行されます。
var todos = arrayOf(...) app.get("/todos") { ctx -> // Todos の配列を json-string にマップします ctx.json(todos) } app.put("/todos") { ctx -> // request-body (json) を Todos の配列にマップします todos = ctx.body>() ctx.ステータス(204) }
app.post("/upload") { ctx -> ctx.uploadedFiles("ファイル").forEach {uploadedFile -> FileUtil.streamToFile(uploadedFile.content(), "upload/${uploadedFile.filename()}") } }
Javalin には、コア ライブラリに機能を追加できるプラグイン システムがあります。プラグインのリストはここで見つけることができます。
プラグインのインストールは、プロジェクトに依存関係を追加して Javalin に登録するのと同じくらい簡単です。
Javalin.create { config -> config.registerPlugin(MyPlugin()) }
最も人気のあるプラグインには次のようなものがあります。
Javalin OpenAPI プラグインを使用すると、コンパイル時に API の OpenAPI 3.0 仕様を生成できます。
ルートに@OpenApi
アノテーションを付けて仕様を生成します。
@OpenApi( summary = "すべてのユーザーを取得", OperationId = "getAllUsers", タグ = ["ユーザー"]、 応答 = [OpenApiResponse("200", [OpenApiContent(Array::class)])], パス = "/users", メソッド = [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 USD/m) | |
KabCash (50 USD/月) |
ブレイク・ミゼラニー、シナトラの創設者
Wendel による、Spark の作成について
クリスチャン・ラスムッセン、素晴らしい男だった
クリスチャン・クンメルモ氏によると、素晴らしい男でもある