【问题标题】:how to associate a filter to a servlet in app.yaml for Google App Engine?如何将过滤器与 Google App Engine 的 app.yaml 中的 servlet 相关联?
【发布时间】: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,但不能同时包含两者。”

那么...我该怎么做呢?

【问题讨论】:

    标签: google-app-engine servlets servlet-filters objectify app.yaml


    【解决方案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/*”)
    猜你喜欢
    • 2020-12-28
    • 2023-03-11
    • 2013-11-22
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2015-02-24
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多