java - 使用带有 Java 的 Google Appengine 删除 .html 扩展名

标签 java html google-app-engine

我在这里非常困惑。我一直在为我们的网络服务器使用 Google Appengine,到目前为止它一直运行良好,但我请求加载没有 .html 扩展名的网页。我一直在做一些阅读,发现我需要创建一个 app.yaml 文件来将 url 映射到其他东西?到目前为止,这是我的文件中的内容:

application: company-website
version: 1
runtime: java
threadsafe: true

handlers:
  - url: /about
  script: about.html

我一直在他们的文档站点上尝试阅读如何执行此操作,但我似乎找不到任何关于如何删除扩展名并仍然指向正确的 html 文件的内容。谁能帮我吗?我也可以在 appengine-web.xml 文件中执行此操作吗?似乎我可以直接在其中执行此操作而无需创建 app.yaml 文件。

如有任何帮助,我们将不胜感激。谢谢!

编辑: 尝试了更多操作。尝试将我试图删除扩展名的文件移动到它自己的文件夹中,如下所示:

/root
  -index.html
  -/about
     -index.html

没关系,当我输入 domain.com/about/ 时,它似乎可以正常工作,但当我输入 domain.com/about 时,它却没有。非常令人沮丧。

最佳答案

在理想情况下,我们可以选择在底层 Web 服务器中配置重写,例如 apache 的 mod_rewrite。遗憾的是,不可能在这样的级别上配置重写。

我搜索了一下,发现最常见的重写答案是给用户 UrlRewriteFilter或到 wire up the servlets yourself .这两个选项在

中都有解释

两者的工作方式相同,并且都需要应用通过应用引擎提供静态内容。这将导致应用引擎实例时间和响应变慢,因为所有静态文件都从 Google 的内容分发网络 (cdn) 移动到瓶颈应用程序。这些方法可能还需要您将静态文件部署为资源(How-To configure static-files and resources),至少我之前是这样做的。

这些是您拥有的“纯 Java”选项。 app.yaml接近 Josep Valls描述的将在 App Engine 上与 Java 一起工作。这里的主要问题是 app.yaml 配置是否低到足以成为谷歌在其 cdn 中识别的重写,或者您是否仍会消耗实例时间,因为所有内容都是通过实例提供的。

documentation告诉我们:

For efficiency, App Engine stores and serves static files separately from application files. Static files are not available in the application's file system. If you have data files that need to be read by the application code, the data files must be application files, and must not be matched by a static file pattern.

由于这恰好在解释如何配置静态文件模式处理程序的部分之前,所以应该假设此类处理程序的配置不会破坏上述逻辑 - 即

stores and serves static files separately from application files

这个假设是否正确是一个简单的实验,我将在给定的时间进行实验并在此报告我的发现。

这些是我能找到和知道的所有现有选项。如果有人对此主题有更多了解,请发表评论/回复。

编辑(2015 年 12 月 7 日) 我的 Maven 目标 appengine:devserver 完全没有注意到 app.yaml 中的设置。我将不得不在下一个部署阶段对此进行试验,或者使用 mvn gcloud:run

... 那天晚些时候:

通过 Servlet 重写 URL(与 Paul Tuckey's UrlRewriteFilter 一样)不适用于静态文件。您必须将这些文件部署为资源文件。静态文件驻留在其他地方,如果被 servlet 转发,将找不到。至少我是这么理解的。

关于java - 使用带有 Java 的 Google Appengine 删除 .html 扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32575807/

相关文章:

java - 如何将 Map 封装到自定义对象中

java - 将未知的 Java 类型转换为 Rust 类型

html - 未从 QWebFrame 的 findAllElements() 获得所需的输出;

python - 如何在 appengine 中模拟追随者流?

google-app-engine - 交易和实体组

google-app-engine - 只能从 Google App Engine golang 应用程序访问请求日志

java - OneToMany 关系中的 Hibernate/反射问题 : IllegalArgumentException

java - 从 JTree 中的文本文件动态填充树模型

javascript - 格式错误的 HTML : How to NOT show a bullet on an empty li element

html - 在较小的设备中按所需顺序放置 float div?