java - JSTL URL 标签在 Heroku 上不起作用

标签 java url heroku jstl

我有一个简单的应用程序,已在本地(Tomcat 中)以及 Google App Engine 和 Heroku 上部署。

该应用程序使用 JSTL 标签,它们在所有部署中都可以正常工作,除了 URL 标签 ( <c:url value="/someUrl"/> ),该标签仅在 Heroku 上前置一个额外的正斜杠,这会搞砸一切。这就是我的意思:

<c:url value='/laundryLists/search.htm'/>

在我的本地 Tomcat 中,应用程序是使用“testApp”上下文部署的,上面的代码片段将在页面中生成以下字符串:

“/testApp/laundryLists/search.htm”

这是正确的。

在我的 GAE 部署的应用程序(位于地址 testApp.appspot.com)中,上面的代码片段生成:

“/laundryLists/search.htm”

这是正确的,因为这里的应用程序上下文是“/”(根)

在我的 Heroku 版本中,部署在“testApp.herokuapp.com”

完全相同的代码生成:

“//laundryLists/search.htm”(注意开头有两个正斜杠)

这是错误的,因为如果放在链接中,例如

<a href="<c:url value='/laundryLists/search.htm'/>">whatever</a>

链接 URL 为:

http://laundryLists/search.htm

这显然是错误的。

值得一提的是,其他 JSTL 标签(例如“forEach”)在 Heroku 中也能正常工作。

所以我的问题是,为什么 Heroku 上会发生这种情况,我该如何修复它(除了对 URL 进行硬编码之外)?

最佳答案

何时 deploying WAR files to Heroku ,WAR 文件以 Webapp Runner 启动,它只是 Tomcat 的一个薄包装,允许它从命令行轻松运行。在当前部署的 Webapp Runner 版本中,默认上下文路径是 /,这是额外斜杠的来源。要将路径设置为其他内容(包括空字符串),可以使用 --path 参数。要使用 WAR 部署为 Heroku 应用程序设置此项,您可以在 WEBAPP_RUNNER_OPTS 配置变量中进行设置,如下所示:

heroku config:add WEBAPP_RUNNER_OPTS="--path ''"

关于java - JSTL URL 标签在 Heroku 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13790720/

相关文章:

Django UrlResolver,在运行时添加 url 以进行测试

node.js - 我可以在 Heroku 托管的 node.js 应用程序中使用 New Relic 吗?如果没有,什么是监控的好选择?

java - modelmapper 跳过嵌套对象的属性

java - Swing 线程安全

java - 我需要在cmd中为基于文本的游戏播放声音

mysql - 远程连接到 clearDB heroku 数据库

python - 错误 R10(启动超时)Heroku 使用 python 脚本

java - 几乎同时进行两个循环

javascript - 添加指向数组中图像的链接

android - 从 url 打开特定 Activity