Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JSP页面中直接编写scala脚本?_Jsp_Scala - Fatal编程技术网

如何在JSP页面中直接编写scala脚本?

如何在JSP页面中直接编写scala脚本?,jsp,scala,Jsp,Scala,有没有scala JSP引擎,或者将来会有吗? 我知道scala web框架提升,但它看起来更像标签。 我正在寻找一种像PHP一样编写脚本的方法 谢谢。编辑:检查:Scala模板引擎:像JSP一样,没有垃圾,但增加了Scala的酷度。我只是在查看#scala twitter提要时偶然发现了这一点 你可以看看。它看起来像是一个活动项目,只需编写Scala代码与xhtml代码混合即可。我不知道你是否能像PHP那样编写脚本。其中一个不同之处是,使用JSP/PHP时,在HTML页面中包含一个程序,其中

有没有scala JSP引擎,或者将来会有吗? 我知道scala web框架提升,但它看起来更像标签。 我正在寻找一种像PHP一样编写脚本的方法


谢谢。

编辑:检查:Scala模板引擎:像JSP一样,没有垃圾,但增加了Scala的酷度。我只是在查看#scala twitter提要时偶然发现了这一点


你可以看看。它看起来像是一个活动项目,只需编写Scala代码与xhtml代码混合即可。我不知道你是否能像PHP那样编写脚本。其中一个不同之处是,使用JSP/PHP时,在HTML页面中包含一个程序,其中与使用
step
时一样,在Scala文件中包含一些
xml

Scala将会有一些学习曲线,但我认为利用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
  }

}                       
/**
*概念证明,您可以在JSP标记中运行Scala代码。
*与码头和sbt合作。
*/
类ScalaScriptTag扩展了bodyTag支持{
重写def doAfterBody():Int={
试试{
val设置=新设置(str=>println(str))
//解释器类加载器似乎无法从父类中提取类
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=新解释器(设置){
重写def parentClassLoader():ClassLoader={
返回Thread.currentThread().getContextClassLoader();
}
}
i、 绑定(“pageContext”、“javax.servlet.jsp.pageContext”、pageContext)
val source=source.fromString(getBodyContent.getString)
为了(线路)
抛出新的JspException(ioe.getMessage())
}
Tag.SKIP_BODY
}
}                       
具有scala模式。Play非常适合rails。可能适合您的需要。

是一个基于scala的模板引擎,它允许您使用功能强大的scala表达式,而不是有限的JSP/JSF/JSTL EL表达式语言,同时完全静态键入,以便在编辑/编译时检查模板是否存在错误

Scalate中的模板可以让您编写真正干净利落的模板,这些模板特别适合XML/HTML(Rails的粉丝倾向于喜欢Haml,Scaml是Haml的Scala端口)


虽然如果您喜欢JSP样式的模板,那么最好从Scalate中类似JSP的模板开始。

Play也通过Scalate模块支持Scalate模板: