一个简单的Scala Web框架?

时间:2011-08-13 16:38:08

标签: scala servlets lift

是否存在一个简单的Scala Web框架?我基本上需要基本功能,例如:

  • 路由。
  • GET / POST / PUT参数处理。
  • 简单模板引擎(基于内容替换)。
  • 序列化(JSON,YAML)

我不喜欢Lift,因为它对我来说太过分了,因为我想完全控制生成的HTML,这意味着我希望能够编写100%的HTML / CSS / JS代码。

有这样的框架吗?或者是否可以在幕后生成 HTML的方式使用Lift?或者我会更好地编写一个普通的servlet?

7 个答案:

答案 0 :(得分:7)

也许您喜欢ScalatraUnfiltered之类的内容?另外,如果您不愿意,您无需在Lift应用程序中放弃对HTML / CSS / JS的任何控制。

答案 1 :(得分:2)

您可以使用Lift来生成服务,例如REST服务,或多或少是您正在寻找的服务? http://www.assembla.com/spaces/liftweb/wiki/REST_Web_Services

如果我们看看What Scala web-frameworks are available?他们中没有一个人有一个很棒的简单模板引擎,至少对我来说似乎就是这样。 SweetScala似乎最接近http://code.google.com/p/sweetscala/wiki/GettingStarted

答案 2 :(得分:2)

彼得给出了一个很好的答案......我会稍微扩展一下。

Lift为您提供了大量的控制和访问原始HTTP请求,并在HTTP级别上提供了大量的抽象。您可以选择希望Lift做多少或多少。

您可以使用Lift的RestHelper构建基于REST的应用程序。请参阅http://simply.liftweb.net/index-Chapter-5.html Lift的RestHelper为您提供的大多数基于MVC /路由的方法的优势在于应用程序边缘的类型安全和访问控制。但是,使用Scala的模式匹配提取器,您可以确保传递到应用程序的业务逻辑的参数已经实现并检查访问控制。此外,Lift的REST支持将比其他Web框架更简洁或更简洁。

就Lift的HTML处理而言,只要您想要将HTML生成为有效的DOM而不是一系列字符串,就可以对HTML的创建进行大量控制。

大多数Web框架都会强制您在编写HTML时发出字符串。这取决于开发人员正确的HTML-escape字符串。由开发人员确保关闭标记正确排列。有了Lift,你可以免费获得这种东西。

您可以使用MVC风格的Lift应用程序提供HTML。请参阅https://github.com/dpp/hoisted(这是支持http://liftweb.net的代码)

在Lift应用程序的“标准”配置中,如果且仅当您使用某些构造时,Lift会对HTML进行一些后处理。因此,如果您在正文(HTML页面)中添加<head>标记,则会获取该<head>标记的内容并将其移至页面的标题部分。如果您包含对Lift的Comet支持的调用,Lift将在页面上插入JavaScript以进行长轮询。但这些功能是可选的,只有在您使用Lift中的某些功能时才会出现这些功能。

我希望这可以帮助您了解使用Lift的好处。

答案 3 :(得分:1)

另外两个框架供您考虑:

  • Play是一个简单的REST框架,越来越受欢迎,并且有一个很好的Scala interface。它的模板相对简单地转换为Scala函数。截至几个月前,使用JSON包(如lift-json)将数据解压缩到case类中有困难,因为Play有一个用于快速开发的自定义类加载器。不确定此问题是否已解决。 Scala公司Typesafe使用Play their site。 Play与Akka集成,其中一位Akka首席开发人员Viktor Klang推荐播放一段时间。

  • 距离人迹罕远的地方还有Spray。我不能谈论细节,但Wiki看起来很有趣。在我的眼里,Spray看起来优雅地围绕Akka整合设计。我不认为它带有模板引擎,但可能与Scalate接口(参见mailing list discussion)。

答案 4 :(得分:0)

本身不是Scala框架,但我对Jetty + JAX-RS + Scala + Freemarker运气不错。这些都是经过严格考验的技术,Scala集成没有任何问题。需要一个小垫片来使Freemarker能够理解Scala集合和属性,但没什么挑战。

答案 5 :(得分:0)

斯卡拉特拉与斯卡拉的善良完全相同。易于配置,易于处理Bare HTTP的东西。它类似于斯卡拉的sinatra。 Scalatra也有很好的Maven支持,并且与传统的java servlet很好地共存。

答案 6 :(得分:0)

现代Scala Web框架包括:Play(在Akka HTTP上),Scalatra(Akka Actors)和Finatra。 https://www.reddit.com/r/scala/comments/743zjv/web_framework/