jsp - 如何直接在 JSP 页面中编写 Scala 脚本?

标签 jsp scala

是否有任何 Scala JSP 引擎,或者将有任何引擎?
我知道 Scala Web 框架提升,但它似乎更像是标签。
我正在寻找一种编写像 PHP 这样的脚本的方法。

谢谢。

最佳答案

编辑:检查 http://scalate.fusesource.org/index.html :Scala 模板引擎:像 JSP 一样没有废话​​,但增加了 Scala 的酷炫。我只是在查看#scala 推特提要时偶然发现了这一点。

你可以看看http://github.com/alandipert/step .它看起来像是一个活跃的项目,足以让您编写与 xhtml 代码混合的 Scala 代码。你是否可以像 PHP 一样编写脚本,我不知道。不同之处之一是,对于 JSP/PHP,您在 HTML 页面中包含一个程序,与 step 一样。你包括一些 xml放入 Scala 文件。

使用 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
  }

}                       

关于jsp - 如何直接在 JSP 页面中编写 Scala 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160106/

相关文章:

jsp - Nginx 上的 Apache tomcat 服务器一直在下载 .jsp 文件

java - 使用 Struts 显示带有外语字母的日期

css - 是否可以在 IE 标准 View 中显示 jsp 页面,但不能在兼容 View 中显示

json - 使用转换函数后处理 AST 以重命名 json 字段名称的奇怪行为

scala - 如何使用转换器在 Scala Play Framework 2.1 中修剪 JsArray

java - JSP循环遍历jsp上的mysql表并显示它

java - 如何将连接驱动程序添加到我的项目中

scala - 如何使类平面可映射?

scala - Scala 类型系统的哪些属性使其具有图灵完备性?

scala - Eclipse/Scala 插件中出现 `illegal cyclic reference` 错误