scalatra过滤器行为的变化

scalatra过滤器行为的变化,scala,scalatra,Scala,Scalatra,我的应用程序中有多个过滤器,其中一个在根目录下 <filter> <filter-name>root</filter-name> <filter-class> my.own.classpath.RootFilter </filter-class> </filter> <filter> <filter-name>root</filter-name&

我的应用程序中有多个过滤器,其中一个在根目录下

<filter>
    <filter-name>root</filter-name>
    <filter-class>
        my.own.classpath.RootFilter
    </filter-class>
</filter>

<filter>
    <filter-name>root</filter-name>
    <filter-class>
        my.own.classpath.SubFilter
    </filter-class>
</filter>

<filter-mapping>
    <filter-name>root</filter-name>
    <url-pattern>/</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>sub</filter-name>
    <url-pattern>/sub/*</url-pattern>
</filter-mapping>

根
my.own.classpath.RootFilter
根
my.own.classpath.SubFilter
根
/
附属的
/潜艇/*
在Scalatra 2.0.0中,这很好。如果
RootFilter
(扩展了
ScalatraFilter
)具有url的绑定,它将处理该url,否则它将传递给其他筛选器。但是,在Scalatra的更高版本中,它的工作原理不同。当我提供由
子筛选器处理的url时,仍然会调用正确的筛选器,但不会显示结果文本。相反,将返回一个空白页面(没有HTML)


这是Scalatra中的一个bug,还是我做错了什么?

我不确定,Scalatra没有以Java的速度移动,所以情况会发生变化

下面是Scalatra书籍v2.0中关于ScalatraServlet与ScalatraFilter的一个片段;这里可能有一些关于问题所在的线索,特别是关于找不到和ScalatrFilter委托给链中的下一个筛选器(在您的情况下,sub之后没有下一个筛选器)

主要区别在于找不到路由时的默认行为。 ScalatrFilter将委托给中的下一个筛选器或servlet 链(由web.xml配置),而ScalatrServlet将 返回404响应

另一个区别是ScalatrFilter匹配相对于的路由 战争的背景路径。ScalatrServlet匹配相对于 servlet路径。这允许您在中装载多个servlet 同一场战争中的不同名称空间

在以下情况下使用ScalatraFilter:

You are migrating a legacy application inside the same URL space
You want to serve static content from the WAR rather than a dedicated web server    
在以下情况下使用ScalatraServlet:

You want to match routes with a prefix deeper than the context path.

我不确定,Scalatra不会以Java的速度移动,所以情况会发生变化

下面是Scalatra书籍v2.0中关于ScalatraServlet与ScalatraFilter的一个片段;这里可能有一些关于问题所在的线索,特别是关于找不到和ScalatrFilter委托给链中的下一个筛选器(在您的情况下,sub之后没有下一个筛选器)

主要区别在于找不到路由时的默认行为。 ScalatrFilter将委托给中的下一个筛选器或servlet 链(由web.xml配置),而ScalatrServlet将 返回404响应

另一个区别是ScalatrFilter匹配相对于的路由 战争的背景路径。ScalatrServlet匹配相对于 servlet路径。这允许您在中装载多个servlet 同一场战争中的不同名称空间

在以下情况下使用ScalatraFilter:

You are migrating a legacy application inside the same URL space
You want to serve static content from the WAR rather than a dedicated web server    
在以下情况下使用ScalatraServlet:

You want to match routes with a prefix deeper than the context path.

您使用的是什么版本的Scalatra?2.10开发、2.0.4稳定还是其他?(读起来像一条录音信息;-)我的网站在Scalatra 2.0.0上“运行”。我的站点在Scalatra 2.0.1和2.0.4上“不工作”。我把这些短语放在引号里,因为我不确定我是在利用一个bug还是一个特性——尽管我认为是后者。你使用的是什么版本的Scalatra?2.10开发、2.0.4稳定还是其他?(读起来像一条录音信息;-)我的网站在Scalatra 2.0.0上“运行”。我的站点在Scalatra 2.0.1和2.0.4上“不工作”。我把这些短语放在引号里,因为我不确定我是在利用一个bug还是一个特性——尽管我认为是后者。是的,所以第一部分建议我所做的应该工作(委托给下一个过滤器),第二部分建议它不应该工作(匹配更深的前缀)。;-)我喜欢Scalatra,但需要一些挖掘,没有一个维护人员(直接)得到报酬。文档很好,但不是很好。依我看,它是运行Scala micro framework的最易访问/最直接的平台(Spray&Unfiltered充分覆盖了无状态REST生态位,但Scalatra通常不会妨碍您,如果您需要,它会为您提供状态,并且非常容易变形为MVC堆栈)。无论如何,很高兴能帮上忙!是的,所以第一部分建议我所做的应该工作(委托给下一个过滤器),第二部分建议它不应该工作(匹配更深的前缀)。;-)我喜欢Scalatra,但需要一些挖掘,没有一个维护人员(直接)得到报酬。文档很好,但不是很好。依我看,它是运行Scala micro framework的最易访问/最直接的平台(Spray&Unfiltered充分覆盖了无状态REST生态位,但Scalatra通常不会妨碍您,如果您需要,它会为您提供状态,并且非常容易变形为MVC堆栈)。无论如何,很高兴能帮上忙!