gpt4 book ai didi

java - 在 Spring MVC 中获取对静态资源文件中项目的基本 url 的引用

转载 作者:搜寻专家 更新时间:2023-11-01 03:07:07 26 4
gpt4 key购买 nike

我有一堆处理 AJAX 函数的静态 javascript 文件来查询我的应用程序的各个部分,并且我部署了我的应用程序的多个版本,所以我可能有一些类似的东西:

https://www.myurl.com/projectName/ - production release
https://www.myurl.com/projectName_alpha/ - current alpha release
https://www.myurl.com/projectName_beta/ - current beta release
https://www.myurl.com/projectName_unstable/ - current development build

因此,如果我有一个 Controller “foo”,我想对其进行 AJAX 调用,我无法硬编码 /projectName/foo作为 URL(因为它总是指向生产版本)。目前,我将一个脚本注入(inject)到我的每个 View 中,将项目的基本 URL 作为全局变量获取:

<script type="text/javascript">
// declare a global variable to hold the project's base URL
var baseUrl = '<spring:url value="/" />';
</script>

然后在 javascript 文件中引用它:

var url = baseUrl + 'foo/';

它是有用的,但是是一个丑陋的解决方案,如果可以避免的话,我宁愿不污染全局命名空间。有人对我如何实现更好的解决方法有任何建议吗?

澄清一下:该解决方案应该适用于任何类型的请求,无论它是否基于 AJAX - 调用 window.open , 设置 src <img> 的属性标记,以及对 Controller 进行 AJAX 调用都应该适用于该解决方案。无论基本 URL 是什么或它有多少层,它也应该适用,例如:

https://www.myurl.com/
https://www.myurl.com/projectName/
https://www.myurl.com/projectName_alpha/1.2.3/

都应该被正确检测到。

最佳答案

我假设将所有 js 文件转换为 jsps 不是您想要的。

明显的解决方案是使用模块系统(例如 require.js)并将该值包装在模块中,

类似于 jsp 的东西:

define({
baseUrl: '<c:url value="/" />'
});

然后其他模块可能需要它。

然而,这可能需要对您的代码代码进行相当大的重组。

一个更简单的选择是创建一个包含在每个页面中的以下 jsp:

<script type="text/javascript">
$(document).ready(function () {
$(document).ajaxSend(function (ev, jqXHR, ajaxOptions) {
var context = '${pageContext.request.contextPath}';
ajaxOptions.url = context + '/' + ajaxOptions.url;
});
});
</script>

它将上下文路径添加到使用 jquery 发出的每个 ajax 请求的 url。

只要您在 ajax 请求中使用与上下文相关的 url(即:以 / 开头,没有上下文名称),这就应该有效。

关于java - 在 Spring MVC 中获取对静态资源文件中项目的基本 url 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18602950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com