scala - cloudbees+lift 应用程序 = 损坏的导航

标签 scala tomcat web-applications lift

我一直在使用 Lift 作为个人网站的框架,为了将服务器从我的计算机上移开,我求助于 Cloudbees。我将我的应用程序作为 .war 文件部署到云端并开始浏览。

编辑 - 显然这与 Cloudbees 无关。这是一个 Tomcat 问题。

在本地,我的应用程序将作为 demos.html 页面提供 localhost:8008/demos。但是在 Cloudbees 上,[URL]/demos 会自动重定向到 [URL]/demos/ 并给出 404。如果我访问 [URL]/demos.html 直接使用,似乎工作正常。

我想避免在我的页面上使用明确的“.html”后缀。我怎样才能让它发挥作用,使事情按照我在本地运行时的方式运行?

最佳答案

好的,我已经弄清楚了,所以我将发布自己的答案以供其他人将来引用。

问题

Cloudbees 使用 Tomcat(不是 Jetty,它通过 container:start 与 sbt web 插件一起使用)。正如 Where does Tomcat append / to directory paths? 所暗示的那样Tomcat 会将 / 附加到它认为是目录的路径。

应用结构如

src/main/webapp
 - demos.html
 - demos
   - some-demo.html

以及包含的提升站点地图定义

Menu.i("Demos") / "demos" submenus (
  Menu.i("Some Demo") / "demos" / "some-demo"
)

Tomcat 看到了 url“/demos”和我的“demos”文件夹,并假设我的 url 是错误的,添加了尾部斜杠。

解决方案

通过一些重新安排来解决这个问题。首先,将 demos.html 移至 demos 文件夹并将其重命名为 index.html

src/main/webapp
 - demos
   - index.html (formerly demos.html)
   - some-demo.html

调整站点地图以反射(reflect)此更改

Menu.i("Demos") / "demos" / "index" submenus (...)
                            ^ added an extra path step

现在我自动生成的站点地图将直接指向 /demos/ 并且 Tomcat 很乐意在那个地方提供我的 demos/index.html 文件。

关于scala - cloudbees+lift 应用程序 = 损坏的导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290466/

相关文章:

function - 将列表的元素作为参数传递给具有可变参数的函数

javascript - Chrome 正在破坏我在触摸屏上的网络应用程序设计

java - 在 Web 服务器上将 Java 应用程序作为 Web 应用程序运行?

java - Scala 中的@throws 不允许调用 Java 来捕获正确的异常类型

scala - 是否有任何基本限制阻止Scala对功能实现模式匹配?

java - Tomcat 找不到包含过滤器的自定义库

java - 使用 Eclipse IDE 部署网站有哪些缺点?

spring - 使用 Spring MVC 的 Tomcat Eclipse 中的 Catalina 错误

javascript - 如何打开 chrome ://apps 中列出的浏览器应用程序

scala - 我可以使用 SELECT from dataframe 而不是创建此临时表吗?