Google App Engine 中的漂亮网址

Posted

技术标签:

【中文标题】Google App Engine 中的漂亮网址【英文标题】:Pretty URLs in Google App Engine 【发布时间】:2011-01-18 19:36:33 【问题描述】:

我想将参数“A1B2C3”传递给基于 Google App Engine 的 GWT 应用程序。我喜欢 www.example.com/index.html?key=A1B2C3。虽然它可以工作,但我想使用漂亮的 URL。是否可以在 Google App Engine 上进行 URL 重写?我不知道怎么做。

www.example.com/A1B2C3

而不是

www.example.com/index.html?key=A1B2C3

我正在使用 Google App Engine 和 GWT。全部在 Java 中。

【问题讨论】:

有可能,我做到了,但是使用 Python 而不是 Java 和 Flask 作为框架。 【参考方案1】:

试试 UrlRewriteFilter:http://tuckey.org/urlrewrite/(或 github repo)它是一个普通的 Java EE 过滤器,所以它应该可以工作。

【讨论】:

【参考方案2】:

我可能会使用 PrettyFaces,http://ocpsoft.com/prettyfaces/,它允许您直接在现有应用程序之上进行 URL 映射。

您只需在 pretty-config.xml 文件中配置类似的内容:

<url-mapping>
   <pattern value="/my/pretty/url" />
   <view-id value="/my/existing/url" />
</url-mapping>

或者如果你想重写参数,你可以这样做:

<url-mapping>
   <pattern value="/my/pretty/url/#param" />
   <view-id value="/my/existing/url" />
</url-mapping>

这意味着任何 url(入站)现在变成:

/my/pretty/url/value -> /my/existing/url?param=value

在 HTML 页面和重定向中,您的出站 URL 将如下所示:

/my/existing/url?param=value -> /my/pretty/url/value

因此很容易添加到您当前的应用中。

【讨论】:

PrettyFaces 不适用于应用引擎 + GWT。也许有办法,但对我不起作用。得到“上下文启动失败”“javax.servlet.UnavailableException:配置问题” 请发布例外情况 - 您可以在 OCPsoft 支持论坛上发帖:ocpsoft.org/support 我要试试这个。谢谢。【参考方案3】:

这是我目前找到的用于实现 URL 重写 GAE Python 的 best approach

【讨论】:

【参考方案4】:

这是另一个我认为可能对你有帮助的项目:

它叫做restful-gwt...它也很漂亮: http://code.google.com/p/restful-gwt/

祝你好运!

【讨论】:

【参考方案5】:

节省一些时间并使用 Restlet。你完全可以做到这一点,我已经在两个不同的项目中做到了这一点。这很简单。如果您需要帮助,请告诉我。

【讨论】:

【参考方案6】:

这是一个很酷的问题。我也想出了如何为 python 做这件事。

app.yaml:

- url: /test/(.*)
  script: test.py \1

test.py:

#!/usr/bin/env python

import sys

def main():           
  for arg in sys.argv:
     print arg

if __name__ == '__main__':                               
  main()

【讨论】:

他在问java。也许这个答案在基于 python 的问题上会更好?但是我确实同意这将在 python 中工作。 是的。我确实意识到这是一个与 java 相关的问题,但我在互联网上搜索时正在寻找类似的东西。我找到了这篇文章,但我想知道如何用 python 来做。当我弄清楚时,我想我应该把它放在这里,这样其他人就不必像我一样搜索了。 我会第二个 - 谢谢 Kousha!【参考方案7】:

您需要配置应用程序(请参阅here)。换句话说,你需要“连接”你想要的模式。

来自手册,一个例子:

<servlet-mapping>
    <servlet-name>redteam</servlet-name>
    <url-pattern>/red/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>blueteam</servlet-name>
    <url-pattern>/blue/*</url-pattern>
</servlet-mapping>

【讨论】:

感谢您的回答。我以前试过这个,但我只看到它是如何与 Java servlet 一起工作的。但是,我在 GWT 中对应用程序进行了编程,并且没有 servlet 的抽象。知道这如何与 GWT 一起工作吗? 查看您的 HTTP 服务器中的 URL 重写 - 比如在 Apache (httpd.apache.org/docs/2.0/misc/rewriteguide.html) 或 nginx (wiki.nginx.org/NginxConfiguration#Rewrite_examples) 中。 谢谢。但这似乎不适用于 Google App Engine。 使用 GWT,您通常通过“#page” URL 模式从“一个页面”转到另一个页面 - 这就是 GWT 应用程序不会在每次页面更改时重新加载的方式。如果您真的想离开一个页面,那么您最终将不得不在每个新页面上重新加载 GWT 应用程序......这不是使用 GWT 的一种非常有效的方式。 嗯,这不是我在应用程序中导航的方式。但是,用户需要能够获得他们创建的表单的链接,并且他们需要能够分发这些 URL(例如 www.questionform.com/form.html?key=123 - 但是,我想要通过为他们提供诸如 www.questionform.com/123 之类的 URL 来使其变得更好

以上是关于Google App Engine 中的漂亮网址的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google App Engine 签名的 Google Cloud Storage 网址

我在哪里可以看到Google App Engine中的日志?

Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?

google-app-engine:google api python客户端hello world中的ImportError httplib2

在 Google App Engine 上按计划运行 python 脚本

NodeJS 中的 Google App Engine 日志记录