Scalatra: Sinatra风格的Scala Web框架

Scalatra是Scala Web框架,遵循了Ruby Web框架Sinatra的原则。Scalatra的原名是Step,而且LinkedIn Signal使用的Restful后台就是基于此框架开发

\

在Scalatra中,如同其他Sinatra风格的web框架,开发人员定义匹配路由和处理这些路由的代码:

\
\
package org.scalatra

class ScalatraExample extends ScalatraServlet {

// send a text/html content type back each time


before {
contentType = \"text/html\"
}

// parse matching requests, saving things prefixed with ':' as params


get(\"/date/:year/:month/:day\") {
\u0026lt;ul\u0026gt;
\u0026lt;li\u0026gt;Year: {params(\"year\")}\u0026lt;/li\u0026gt;
\u0026lt;li\u0026gt;Month: {params(\"month\")}\u0026lt;/li\u0026gt;
\u0026lt;li\u0026gt;Day: {params(\"day\")}\u0026lt;/li\u0026gt;
\u0026lt;/ul\u0026gt;
}

// produce a simple HTML form


get(\"/form\") {
\u0026lt;form action='/post' method='POST'\u0026gt;
Post something: \u0026lt;input name='submission' type='text'/\u0026gt;
\u0026lt;input type='submit'/\u0026gt;
\u0026lt;/form\u0026gt;
}

// handle POSTs from the form generated above


post(\"/post\") {
\u0026lt;h1\u0026gt;You posted: {params(\"submission\")}\u0026lt;/h1\u0026gt;
}

// respond to '/' with a greeting


get(\"/\") {
\u0026lt;h1\u0026gt;Hello world!\u0026lt;/h1\u0026gt;
}

// send redirect headers


get(\"/see_ya\") {
redirect(\"http://google.com\")
}

// set a session var


get(\"/set/:session_val\") {
session(\"val\") = params(\"session_val\")
\u0026lt;h1\u0026gt;Session var set\u0026lt;/h1\u0026gt;
}

// see session var


get(\"/see\") {
session(\"val\") match {
case Some(v:String) =\u0026gt; v
case _ =\u0026gt; \"No session var set\"
}
}

// Actions that return byte arrays render a binary response


get(\"/report.pdf\") {
contentType = \"application/pdf\"
val pdf = generatePdf()
pdf.toBytes
}

notFound {


response.setStatus(404)
\"Not found\"
}
}\
\

InfoQ就Scalatra项目,采访了其合作者Ross Baker

\

InfoQ:Sinatra是一种流行的Ruby框架,正在被移植到多种语言上面。你认为它的最佳特性是什么,又是什么吸引了你?

\
Ross:Sinatra框架族是因为它们极其的轻量而引人注目:如果你已经熟悉了目标语言以及HTTP基本知识,那么,这些框架几乎可以立即让你富于生产率。
\

InfoQ:你选择Scala开发web框架的原因是什么?

\
Ross:我在学校里面花了四年时间来学习函数式编程的优雅。随后,我又在Java上浸淫了十年——即便不欣赏语言其本身,我也欣赏其庞大的类库。Scala把这两个世界巧妙地结合了起来。对于Scala,我根本毋需多想。
\

InfoQ:什么特性是其他Scala框架(例如Lift)所缺失的?

\
Ross:无论是作为一个框架,抑或是一个社区,Lift都很令人称赞,但我对它部分的核心假设很纠结。具体来说,Lift拥抱了会话状态,隐藏了HTTP,而我倾向于拥抱HTTP,并且避免会话状态。现在,这不再是非黑即白:你可以使用Lift构建一个RESTful应用程序,你也可以使用Scalatra构建一个Stateful应用程序,但每种框架都是针对不同类型的应用程序而调整。我很高兴我们同时拥有这两者。
\

InfoQ:你能针对Scalatra应用的不同组成部分给我们做一个概要介绍吗?

\
Ross:Scalatra是简单的DSL。你可以把整个应用程序写在一个类里面。(无论这是否缘于节俭,抑或是取决于应用程序的大小。)然后,再在web.xml里面加上几行,这就是一个有效的Scalatra应用。
\

InfoQ:对于正在考虑从Java Web框架切换到Scalatra的团队,你有什么建议?他们应该注意哪些常见的陷阱,有哪些好的迁移策略?

\
Ross:要迁移Java应用程序,我建议在同一个web-app元素里面定义一个ScalatraFilter。然后,你就可以一次一个页面地进行迁移。如果Scalatra找到了一个匹配的路由,那它就会进行处理。否则,该请求就会被传给之前的servlet。

\另外,请记住,Java与Scala中的互操作性是双向的。这意味着,不需要严格地逐层由Java迁移到Scala。仅仅移植那些需要修改的代码,而且在需求再次发生变化之前,不必担心保留了可工作的、经过时间检验的Java代码。

\

InfoQ:最近LinkedIn宣布,他们已经在LinkedIn Signal上使用了Scalatra。你有没有其他的实际例子?你看到人们在什么类型的应用程序中使用了Scalatra?

\
Ross:除了LinkedIn,ChaCha现在也是成功使用了Scalatra开发内部API和管理的应用程序。他们特别喜欢Scalate的模板整合。我至少知道两个来自于创业公司的正在进行中的Scalatra项目——将来我们就可以很激动地宣布了。作为Scalatra应用程序,RESTful API已经非常普遍。

\正如Scala是一个可扩展的语言,Scalatra也是一个可扩展的框架。您可以把HTML代码和业务逻辑写到一起,从而快速地开发应用程序的原型。随着项目的成熟,在把应用系统重构为n-层企业级别的应用系统时,你可以依赖或者不依赖编译器和测试框架。我们把架构的决定权留给你。

\

InfoQ:八月份发布了M1版本,你们对最终版本的规划是什么时候?项目的路线图是什么样子的,你希望未来的版本会包括什么功能?

\
Ross:一些短期的目标包括了Comet支持、将DSL从Servlet/Filter里面分离出来以更易于重新装载(使用JRebel),以及创建真正的网站:我们将吃我们自己的狗粮。我们也有兴趣增加OSGi的支持、嵌套路由以及增强的路由匹配选项。我们期待另一个里程碑——Scalate 1.3的发布,并且在2.0.0-final之前,我们希望对API进行全面的审查以找出任何不一致的地方。
\

Scalatra允许用户免费使用,而且提供了多种下载方式。

\

更多关于ScalaWeb框架的信息,就在InfoQ!

\

查看英文原文:Scalatra: A Sinatra-like Web Framework for Scala

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值