java - 在 Spring MVC 中更正 JavaScript 文件中的 URL

标签 java javascript spring spring-mvc servlets

我对 Spring MVC 并不陌生,但总是想知道如何在 JavaScript 中使用正确的 URL(上下文名称感知)。类似于 c:urlspring:url,但对于 JS:

例如如果我有一个在 Tomcat 中部署为 context 的 webapp。它有一个页面:http://localhost:8080/context/some/directory/search 和位于 http://localhost:8080/context/api 的 API。如果页面调用 API,我会遇到问题:

// This works wrong:
$http.get('/api/users', function(data){}) // will call http://localhost:8080/api/users - the context is lost!
$http.get('api/users', function(data){}) // will call http://localhost:8080/context/some/directory/api/users - wrong URL!

我希望存在某种过滤方式:

$http.get('${url:api/users}', function(data){}) // will call http://localhost:8080/context/api/users

我在 C# 和 Ruby 以及 Python 中看到了类似的东西。是否有任何现成的 Java/Spring 解决方案?

最佳答案

正如@Vikdor 的评论所暗示的,您必须让您的服务器以某种方式处理 JS 文件。我过去曾使用过这些方法中的每一种:

  • 使用解释页面来提供您的资源。 JSP 非常乐意提供 JS、JSON、CSS、HTML、PDF 或任何其他 Content-Type,只要您使用适当的 @page 指令来执行此操作。然后,您可以像编写 HTML 页面一样使用 JSTL 库。如果资源名称对您很重要,您将不得不编写一个 Controller 来解释由 View foo.css.jsp 传递的对 foo.css 的请求,或者类似的翻译。此外,IDE 会感到困惑,保佑他们,因此您可能必须覆盖语法着色和自动完成才能充分利用这些功能。

  • 编写一个静态内容过滤器来解析资源以获得有趣的标记(如 ${url}),并在交付前用适当的值替换它们。它为资源交付增加了一些开销,但对于我们的特定用例来说性能足够了。

在任何一种情况下,请务必牢记您的应用通过适当的缓存 header 交付这些资源的能力,这样您的服务器就不会执行额外的工作来交付重复的资源。

  • 在将修改后的静态资源部署到最终位置之前,插入一个启动/部署步骤以转换 URL 路径,通常使用简单的搜索/替换,使用适合您的部署环境的值。这样做的好处是允许您按原样制作资源以在本地提供服务,而无需部署,然后仅当您将它们推送到非本地环境时才更改 URL。

关于java - 在 Spring MVC 中更正 JavaScript 文件中的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788987/

相关文章:

java - 哪些异常会杀死 Java 中的 Web 应用程序

java - 是否可以在布局中混合使用 `SurfaceView` 和另一个 `View` ?

javascript - (嵌入和)通过 D3 和/或 javascript 引用外部 SVG

javascript - 如何在 RazorViewEngine 中的文本框上添加 onmouseleave 属性

javascript - DOM 动态时如何使用 JQuery.find()

java - Spring Boot 应用程序中的 Spring Data Elasticsearch

java - 更新表 - 当表数据数组已被清除时

java - hadoop输入路径指定文件夹范围

java - Spring事务隔离不起作用

spring - 如何知道在 Spring Batch Step 开始时要处理的 block /项目总数?