是否有任何scala JSP引擎,或者是否会有任何? 我知道scala web框架提升,但它似乎更像标签。 我正在寻找像PHP这样的脚本的方法。
感谢。
答案 0 :(得分:5)
编辑:检查http://scalate.fusesource.org/index.html: Scala模板引擎:就像没有废话但没有添加Scala酷炫的的JSP。我在查看#scala twitter feed时偶然发现了这一点。
您可以查看http://github.com/alandipert/step。它看起来像一个活跃的项目,足以让你编写与xhtml代码混合的Scala代码。你是否可以脚本像PHP ,我不知道。其中一个不同之处在于,使用JSP / PHP,您在HTML页面中包含一个程序,与step
一样,您在Scala文件中包含一些xml
。
Scala和sbt
会有一点学习曲线,但我认为利用Scala是值得的。
您可以做的另一件事是编写一个自定义JSP标记,它允许您通过解释器运行一些Scala代码。我做了一个概念证明,这似乎有效:
/**
* Proof of concept, you can run Scala code in a JSP tag.
* Works with jetty and sbt.
*/
class ScalaScriptTag extends BodyTagSupport {
override def doAfterBody():Int = {
try {
val settings = new Settings(str => println(str))
// interpreter classloader does not seem to pick up classes from the parent
settings.classpath.value =
"lib_managed/compile/jsp-api-2.1-6.1.14.jar;" +
"lib_managed/compile/servlet-api-2.5-6.1.14.jar"
var i = new Interpreter(settings) {
override def parentClassLoader():ClassLoader = {
return Thread.currentThread().getContextClassLoader();
}
}
i.bind("pageContext", "javax.servlet.jsp.PageContext", pageContext)
val source = Source.fromString(getBodyContent.getString)
for (line <- source.getLines) { i.interpret(line) }
} catch {
case ioe: IOException =>
throw new JspException(ioe.getMessage())
}
Tag.SKIP_BODY
}
}
答案 1 :(得分:3)
Scalate是一个基于Scala的模板引擎,它允许您使用强大的Scala表达式而不是有限的JSP / JSF / JSTL EL表达式语言 - 同时完全静态类型化,以便在编辑/编译时检查模板为了错误。
Scalate中的Scaml模板允许您编写特别适合XML / HTML的DRY emplates(Rails粉丝喜欢Haml,而Scaml是Haml的Scala端口)。
虽然如果您喜欢JSP样式的模板,那么您可能最好从Scalate中的Ssp模板开始,这些模板类似于JSP。
答案 2 :(得分:1)
http://www.playframework.org/有一个scala模式。玩是非常有轨。可能适合您的需求。