如何将过滤器与 Google App Engine 的 app.yaml 中的 servlet 相关联?
Posted
技术标签:
【中文标题】如何将过滤器与 Google App Engine 的 app.yaml 中的 servlet 相关联?【英文标题】:how to associate a filter to a servlet in app.yaml for Google App Engine? 【发布时间】:2013-11-02 11:35:03 【问题描述】:对于我的应用引擎应用程序,我想将一个 servlet 分配给一个 url 模式,但还要设置 Objectify 过滤器,如下所述:https://code.google.com/p/objectify-appengine/wiki/Setup。
在我的 app.yaml 我有
handlers:
- url: /v1/*
name: v1
servlet: org.restlet.ext.servlet.ServerServlet
...etc...
这很好地将请求路由到我的 servlet,但我不知道如何安排 Objectify 过滤器在 servlet 正在处理的相同请求上运行。
GAE docs 表示“过滤器是一个像 servlet 一样作用于请求的类,但可能允许使用其他过滤器或 servlet 继续处理请求。”
好的,好的,这就是我想要的。但文档也说“单个 URL 映射可以包含过滤器或 servlet,但不能同时包含两者。”
那么...我该怎么做呢?
【问题讨论】:
【参考方案1】:过滤器在 servlet 之前运行,它们不是独占的。通常,对于一个请求,所有过滤器都会运行,然后会选择并执行给定 Url 的一个 servlet。
在您的 yaml 中创建一个新的过滤器部分:
handlers:
- url: /v1/*
name: v1
servlet: org.restlet.ext.servlet.ServerServlet
- url: /*
name: ObjectifyFilter
filter: com.googlecode.objectify.ObjectifyFilter
注意:最好在所有请求上运行 ObjectifyFilter(url:/*
),以确保始终初始化 objectify。
【讨论】:
所以基本上如果我使用 app.yaml,我需要建立一个人工层次结构,将 servlet 映射的 URL 置于过滤器映射的 URL 之下?在我的例子中,将使用 Objectify 的唯一请求是映射到 Restlet servlet 的请求。或者我想我可以回退到使用 web.xml,它支持将过滤器映射到 servlet。 (编辑了示例 yaml)不,这是平的。只需创建一个带有映射到过滤器的新 url 部分。 知道了,谢谢。对于那些想知道的人,可以为 servlet 和过滤器指定相同的 url 模式(例如,将 Peter 的答案中的第二个 url 模式更改为“- url /v1/*”)以上是关于如何将过滤器与 Google App Engine 的 app.yaml 中的 servlet 相关联?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google App Engine 的 app.yaml 文件中配置 servlet 过滤器?
如何使用 Google Cloud SQL 第二代按主机过滤 App Engine 连接? (第 2 次)
如何将 AJAX 与 Google App Engine (Python) 结合使用
Google App Engine Search API 自定义评分