【问题标题】:Different URL for development and production. (Reloading static content)用于开发和生产的不同 URL。 (重新加载静态内容)
【发布时间】:2014-08-28 17:08:26
【问题描述】:

这就是我的故事。

我正在开发一个 Spring Web 应用程序。静态内容(js、css、jsp)的重载被破解,在以下线程中找到了解决办法:

Getting resources in VFrabric Server to deploy without causing container to reload

为了使重新加载工作,我不能拥有根 URL '/'。因此,我将其更改为“/project”,并且我的重新加载工作正常。太好了!

但是接下来的问题来了。例如,我对“/typeahead/searchUniversities/%QUERY”有很多 ajax 请求,这需要更改为“project/typeahead/searchUniversities/%QUERY”。当我将它上传到生产服务器时,我需要将它改回 '/typeahead/searchUniversities/%QUERY'

因为 '/project' 只是为了开发

所以我阅读了有关配置文件的信息,但我不确定这是否是要走的路。我可能做得过火了?

我还想有类似“${baseurl}/typeahead/searchUniversities/%QUERY”的东西,然后在生产前在一个地方进行更改。但不确定如何执行此操作。

如果有人可以通过示例来指导我如何做到这一点,那就太好了。

谢谢!

【问题讨论】:

  • 你在使用maven作为构建工具吗?
  • 有了 maven,你就有了过滤选项。您可以在 js 代码 ${holder} 中添加占位符,如果您设置了 maven 过滤,maven 在构建期间将用 maven 属性值替换占位符。然后通过为本地和生产运行不同的配置文件,您可以动态更改这些值。过滤概念在这里描述:maven.apache.org/plugins/maven-resources-plugin/examples/…
  • 这很有趣!感谢您的输入

标签: java spring url production-environment reloading


【解决方案1】:

编辑:添加另一种更直接的方式来获取 JSP 中的上下文路径

webapp 中的 url 永远不应该是静态的:上下文路径是在部署时确定的,而不是在编译时确定的。如果你使用的是spring标签库,你可以使用<spring:url>标签,如果不是JSTL <c:url>标签。两者都会自动为你添加上下文路径。

顺便说一句:在 JSP 中 <%= application.getContextPath() %> 给出了上下文路径,没有任何额外的标记库。

但请只使用有意义的相对路径,切勿使用“顶级”网址。

【讨论】:

  • 我认为这是我的问题的解决方案。我不只是确定如何在我的单独 JS 文件中访问 this 标记。修改我的 ajax 调用 url。
  • @nilsi 我不太擅长 JavaScript。但是恕我直言,您需要至少有一个 JS 在 /js 下不是静态的,而是由 JSP 动态生成的 - 简单地说,不要忘记将类型设置为 text/javascript ... 这个将包含您实际的上下文路径,它要么简单地定义一个变量,供其他 JS 文件使用,要么直接供所有 ajax 调用使用。
  • 您可以在 HTML 文件的内联脚本中设置一个变量,然后从您的 AJAX 脚本中引用它。
  • 好吧,是的,这就是我要采用的方法。非常感谢您的帮助。
【解决方案2】:

您的应用程序不应依赖于部署它的上下文路径。解决此特定问题的一种方法是在您的 ajax 请求中使用相对路径,

例如

'typeahead/searchUniversities/%QUERY'而不是'/typeahead/searchUniversities/%QUERY'

【讨论】:

  • 使用相对查询时要注意,一定要确定当前url的深度。恕我直言,它仅在所有 URL 都处于级别 1 的普通应用程序中是安全的。
  • 这就是我不使用这种方法的原因。因为我在不同深度有相同的链接。
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多