什么Scala Web框架可用?

时间:2009-09-28 17:50:01

标签: scala frameworks web-frameworks lift

我刚开始学习Scala,我要实现的第一件事就是一个小小的Web应用程序。去年我一直在使用Erlang来实现服务器端软件,但我以前从未编写过Web应用程序。这将是一次很棒的经历。

除了Lift以外,是否有Scala的Web框架?

不要误会我的意思,Lift看起来很棒。我只想知道有多少框架,以便我可以在它们之间进行选择。选择总是一件好事,但我发现的唯一一件事是Lift。

18 个答案:

答案 0 :(得分:77)

我对Scala非常感兴趣,但我还没有使用它,所以有了这个警告,我所知道的HRJ's answer(Lift,Sweet,Slinky)中没有提及的框架是:< / p>

答案 1 :(得分:44)

我写了blog post关于此事。

总结一下,有些选项是:

  1. Lift
  2. Sweet
  3. Slinky
  4. 我终于发现没有一个适合我,并开发了我自己的小“框架”。 (它还不是开源的。)

答案 2 :(得分:35)

以下是框架的转储。这并不意味着我实际使用过它们:

  • Coeus。 Scala的传统MVC Web框架。

  • Unfiltered。用于在Scala中处理HTTP请求的工具包。

  • Uniscala Granite

  • Gardel

  • Mondo

  • Amore。 Ruby Web框架Sinatra的Scala端口

  • Scales XML。灵活的XML处理方法和与XML交互的简化方法。

  • Belt。用于基于Scalaz-HTTP

  • 构建的Web应用程序的类似Rack的界面
  • Frank。 Web应用程序DSL构建于Scalaz / Belt

  • 之上
  • MixedBits。 Scala编程语言的框架,用于帮助构建网站

  • Circumflex。使用Scala编程语言统一几个用于应用程序开发的自包含开源项目。

  • Scala Webmachine。 Scash的Basho网络机器,一个用于构建Web应用程序的基于REST的系统

  • Bowler。一个RESTful,多渠道准备好的Scala Web框架

答案 3 :(得分:35)

我喜欢Lift; - )

Play是我对Scala友好的Web框架的第二选择。

Wicket是我的第三选择。

答案 4 :(得分:23)

尝试Play Framework,它也支持Scala。

答案 5 :(得分:8)

我发现Unfiltered非常有趣https://github.com/unfiltered/unfiltered

在IttayD的列表中提到过。

以下是关于它的演示文稿http://unfiltered.lessis.me/#0 和视频http://code.technically.us/post/942531598/doug-tangren-presents-the-unfiltered-toolkit-for

此处还有一篇文章包含更多信息http://code.technically.us/post/998251172/holding-the-parameter

答案 6 :(得分:8)

一个非常有趣的商业部署Web框架是Scalatra,灵感来自Ruby的Sinatra。这是关于它的InfoQ article

答案 7 :(得分:8)

必须注意的是,WicketScala也引起了极大的兴趣。 Wicket非常适合Scala。如果您想利用非常成熟的Wicket项目及其生态系统(扩展)以及Scala的简洁语法和生产力优势,这可能适合您!

另见:

  1. Some prosa

  2. Presentation

  3. Some experience with Wicket and Scala

  4. Announcments with reference to the project for the glue code to bind Scala closures to models

答案 8 :(得分:7)

Play非常可爱。

现在已准备就绪。它包含:一个很酷的模板框架,安全的源文件自动重新加载,可组合的动作系统,akka awesomeness等。

它是Typesafe Stack

的一部分

将它用于两个项目后,我可以说它工作得很顺利,下次你想要学习新的web框架时应该考虑一下。

答案 9 :(得分:5)

我倾向于使用Jersey使用JAX-RS(您可以在Scala,Java或Groovy中编写好的资源bean)来编写RESTul Web应用程序。然后我使用Scalate使用各种模板语言之一(JADEScamlSsp(Scala Server Pages),Mustache来渲染视图,等)。

答案 10 :(得分:4)

有一个名为Scala Web Pages的新Web框架。来自网站:

目标受众

Scala Pages Web框架可能会吸引来自Java背景并希望在Scala中编写Web应用程序的Web程序员。重点是OOP而不是函数式编程。

特征和特征

  • 遵守模型 - 视图 - 控制器范例
  • 基于文本的模板引擎
  • 语法简单:$variable<?scp-instruction?>
  • 编码/内容检测,能够处理国际文本编码
  • 代码片段代替自定义代码
  • 网址重写

答案 11 :(得分:4)

Prikrutil,我想我们在同一条船上。我也是从Erlang来到Scala。我非常喜欢Nitrogen所以我决定创建一个受其启发的Scala Web框架。

看看XitrumIts doc非常广泛。来自README:

Xitrum是一个异步和集群的Scala Web框架和Web服务器,位于Netty和Hazelcast之上:

  • 它填补了Scalatra和Lift之间的空白:比Scalatra更强大,比Lift更容易使用。您可以轻松创建RESTful API和回发。 Xitrum是控制器优先的,就像Scalatra一样,而不是像Lift这样的视图优先。
  • 注释用于URL路由,本着JAX-RS的精神。您不必在一个地方声明所有路线。
  • Typesafe,本着Scala的精神。
  • 异步,本着Netty的精神。
  • 会话可以存储在Cookie或群集Hazelcast中。
  • jQuery Validation集成了浏览器端和服务器端验证。 i18n使用GNU gettext,这意味着与大多数其他解决方案不同,支持单数和复数形式。
  • 使用ETag进行条件GET。

Hazelcast还给出了:

  • 进程内和群集缓存,您不需要单独的缓存服务器。
  • 进程内和集群Comet,您可以将Comet扩展到多个Web服务器。

按照tutorial快速启动。

答案 12 :(得分:3)

还有Pinky,曾经是bitbucket,但已被转移到github

顺便说一下,github是搜索Scala项目的好地方,因为那里有很多东西。

答案 13 :(得分:3)

我想将自己的努力添加到此列表中。您可以在此处找到更多信息:

brzy framework

它处于早期开发阶段,我仍在积极地开展这项工作。它包括以下功能:

  • 注重简洁性和可扩展性。
  • 集成构建工具。
  • 模块化设计;一些初始模块包括对scalate,email,jms,jpa,squeryl,cassandra,cron服务等的支持。
  • 简单的RESTful控制器和操作。

非常感谢任何反馈。

更新:2011-09-078,我刚刚发布了0.9.1版的主要更新。 http://brzy.org还有更多信息,其中包括截屏视频。

答案 14 :(得分:1)

Sweet和Slinky似乎都是大约一年没有造成的。 Sweet Maven repo sweetsoftwaredesign.com已经死了,所以甚至无法下载依赖项。

答案 15 :(得分:1)

注意:Spiffy已经过时了。

&LT; 插件&GT;

<强>漂亮

  • 是用Scala编写的
  • 使用梦幻般的Akka图书馆和演员来扩展
  • 使用servlet API 3.0进行异步请求处理
  • 是模块化的(替换组件是直接的)
  • 使用DSL来减少您不想要的代码
  • 支持Scalate和Freemarker进行模板化

Spiffy是一个使用Scala,Akka(Scala actor实现)和Java Servlet 3.0 API的Web框架。它利用异步接口,旨在为Web应用程序提供大规模并行和可扩展的环境。 Spiffy的各种组件都基于这样的想法,即它们需要是独立的简约模块,可以非常快速地完成少量工作,并将请求移交给管道中的下一个组件。完成最后一个组件处理请求后,它通过“完成”请求并将其发送回客户端来发信号通知servlet容器。

https://github.com/mardambey/spiffy

&LT; /插&GT;

答案 16 :(得分:0)

您也可以尝试Context。它被设计成一个Java框架,但我也成功地将它与Scala一起使用也毫无困难。它是一个基于组件的框架,具有与Lift或Tapestry类似的属性。

答案 17 :(得分:0)

几个星期前我偶然发现了你的问题,但此后也了解了Circumflex。这是一个很好的,最小的框架,因此易于学习,并且它也有很好的文档。

除了它的最小化之外,它还声称可以与其他库一起使用,并允许您在需要时使用自己的实现。