Scalatra 概述
Scalatra 是一个基于 Scala 的 Web 框架,遵循了 Ruby 的 Sinatra 框架的设计原则。它最初被称为 Step,后来更名为 Scalatra。LinkedIn Signal 的 RESTful 后端就是基于 Scalatra 构建的。
核心特性
Scalatra 类似于其他 Sinatra 风格的 Web 框架,开发者通过定义路由和相应的处理代码来构建应用。以下是一些关键特性:
- 路由匹配:开发者可以通过简单的 DSL 定义路由和处理逻辑。
- 会话管理:支持设置和获取会话变量。
- 内容类型控制:可以轻松设置响应的内容类型,如 HTML、PDF 等。
- 重定向:支持请求重定向。
- 404 处理:可以自定义 404 错误响应。
代码示例
以下是一个典型的 Scalatra 应用示例:
package org.scalatra
class ScalatraExample extends ScalatraServlet {
before {
contentType = "text/html"
}
get("/date/:year/:month/:day") {
<ul>
<li>Year: {params("year")}</li>
<li>Month: {params("month")}</li>
<li>Day: {params("day")}</li>
</ul>
}
get("/form") {
<form action='/post' method='POST'>
Post something: <input name='submission' type='text'/>
<input type='submit'/>
</form>
}
post("/post") {
<h1>You posted: {params("submission")}</h1>
}
get("/") {
<h1>Hello world!</h1>
}
get("/see_ya") {
redirect("http://google.com")
}
get("/set/:session_val") {
session("val") = params("session_val")
<h1>Session var set</h1>
}
get("/see") {
session("val") match {
case Some(v:String) => v
case _ => "No session var set"
}
}
get("/report.pdf") {
contentType = "application/pdf"
val pdf = generatePdf()
pdf.toBytes
}
notFound {
response.setStatus(404)
"Not found"
}
}
开发者访谈
Scalatra 的联合创始人 Ross Baker 在接受 InfoQ 采访时,分享了他对 Scalatra 的看法:
- Sinatra 的吸引力:Sinatra 框架家族因其简洁性而受到欢迎,开发者可以快速上手。
- 选择 Scala 的原因:Scala 结合了函数式编程的优雅和 Java 的丰富库支持,是一个理想的选择。
- 与其他 Scala 框架的对比:Lift 框架虽然强大,但其对会话状态的依赖和 HTTP 的隐藏与 Scalatra 的设计理念不同。Scalatra 更适合构建 RESTful 应用。
- 应用架构:Scalatra 允许开发者在一个类中编写整个应用,适合快速原型开发,也支持逐步演进为更复杂的架构。
- 迁移策略:对于从 Java 框架迁移到 Scalatra 的团队,建议逐步迁移,利用 Scala 和 Java 的双向互操作性。
- 应用案例:除了 LinkedIn,ChaCha 等公司也在使用 Scalatra 构建内部 API 和管理应用。Scalatra 特别适合构建 RESTful API。
未来计划
Scalatra 的近期计划包括:
- 支持 Comet。
- 将 DSL 与 Servlet/Filter 分离,以便更容易使用 JRebel 进行热加载。
- 构建官方网站。
- 支持 OSGi、嵌套路由和增强的路由匹配选项。
获取与许可
Scalatra 是免费使用的,可以通过其官方网站下载。更多关于 Scala 和 Web 框架的信息可以在 InfoQ 上找到。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。