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堆栈)。无论如何,很高兴能帮上忙!