将 Javalin 嵌入到 Servlet 容器中
将 Javalin 嵌入到 Servlet 容器中
原文:https://javalin.io/2018/11/15/javalin-embedded-example.html
您将创建什么
一个包含 Javalin(不包含 Jetty)的 WAR 应用程序。您可以将此 WAR 文件放入任何 Servlet 3.0 容器中。
入门
最简单的入门方法是克隆 javalin-tomcat-embed-example 示例 应用程序:
git clone https://github.com/tipsy/javalin-tomcat-embed-example
cd javalin-tomcat-embed-example
./gradlew clean appRun
这将运行 Gradle Gretty 插件,该插件随后会在 Tomcat 中启动这个 WAR 应用。服务器启动后,您只需在终端中输入以下命令或打开 http://localhost:8080/rest 即可访问 REST 端点:
curl localhost:8080/rest/
查看来源
该项目使用 Gradle 来执行标准操作:将项目声明为 WAR,并使用Gradle Gretty 插件 在 Tomcat 中轻松启动 WAR 应用程序(使用appRun任务)。
有趣的是,该节dependencies包含 Javalin,但省略了 Jetty 依赖项:
dependencies {
compile(kotlin("stdlib-jdk8"))
compile("io.javalin:javalin:3.13.13") {
exclude(mapOf("group" to "org.eclipse.jetty"))
exclude(mapOf("group" to "org.eclipse.jetty.websocket"))
}
compile("org.slf4j:slf4j-simple:1.7.30")
}
servlet 本身非常简单:
@WebServlet(urlPatterns = ["/rest/*"], name = "MyRestServlet", asyncSupported = false)
class MyRestServlet : HttpServlet() {
val javalin: JavalinServlet = Javalin.createStandalone()
.get("/rest") { ctx -> ctx.result("Hello!") }
.servlet()
override fun service(req: HttpServletRequest, resp: HttpServletResponse) {
javalin.service(req, resp)
}
}
注意:请务必记住使用createStandalone()函数,该函数经过精心设计,使 Javalin 不依赖于 Jetty。使用Javalin.create() 会导致 WAR 应用无法启动java.lang.ClassNotFoundException: org.eclipse.jetty.server.Server。
Servlet 容器会自动发现该 Servlet(因为它带有 注释@WebServlet);任何针对该 Servlet 的请求都会直接转发到 Javalin,Javalin 会负责妥善处理该请求。请使用 @MultipartConfig 注释您的类,以便填充 UploadedFile 或 UploadedFiles Servlet 请求的 getter 方法。
最后编辑:Jeebiz 更新时间:2025-05-04 00:55