Scalatra如何向路由发送参数?

Scalatra如何向路由发送参数?,scala,scalatra,Scala,Scalatra,我是作为一个对Scala比较陌生的人来问这个问题的。我已经看到了如何在Scala中创建“控件构造”的示例,但我对它的了解还不足以理解Scalatra本身的代码 有人能解释一下“params”是如何传递给已定义的路由处理程序的吗?我觉得这是一个有用的技术,我想知道它是如何做到的 谢谢大家! 编辑:添加Scalatra网站的示例代码,以说明我所说的内容: class HelloWorldApp extends ScalatraFilter { get("/") { <h1>H

我是作为一个对Scala比较陌生的人来问这个问题的。我已经看到了如何在Scala中创建“控件构造”的示例,但我对它的了解还不足以理解Scalatra本身的代码

有人能解释一下“params”是如何传递给已定义的路由处理程序的吗?我觉得这是一个有用的技术,我想知道它是如何做到的

谢谢大家!

编辑:添加Scalatra网站的示例代码,以说明我所说的内容:

class HelloWorldApp extends ScalatraFilter {
  get("/") {
    <h1>Hello, {params("name")}</h1>
  }
}
类HelloWorldApp扩展了ScalatraFilter{
获取(“/”){
你好,{params(“name”)}
}
}

这些是相关的特征:

trait ScalatraFilter extends Filter with ServletBase
trait ServletBase extends ScalatraBase with SessionSupport with Initializable
trait ScalatraBase extends ScalatraContext with CoreDsl with DynamicScope.....
当使用params时,您使用的是ScalatraBase中定义的少数重载方法之一

def params(key: String)(implicit request: HttpServletRequest): String = params(request)(key)
def params(key: Symbol)(implicit request: HttpServletRequest): String = params(request)(key)
def params(implicit request: HttpServletRequest): Params = new ScalatraParams(multiParams)
检查代码


这是通过使用Scala的
DynamicVariable
类完成的。这里有一篇很短的博客文章,很好地解释了这一点


啊哈,我还以为是传入了一个变量呢。将其作为一种方法是有意义的。谢谢你的信息和链接!