javascript - 从 url 中删除 webjars 版本

标签 javascript java maven jsp webjars

我们在我们的项目中使用 webjars 和 maven。 所以我们有数百个 JSP,代码如下:

<%--JSP CODE--%>
<script src="<c:url value="/webjars/jquery/2.2.0/jquery.min.js" />" type="text/javascript"></script>
<script src="<c:url value="/webjars/bootstrap/3.3.6/js/bootstrap.min.js" />" type="text/javascript"></script>
......... 

正如您所猜测的那样,更新到较新版本的 webjars 是一项繁琐的工作。所以我正在寻找允许我导入这样的脚本的解决方案:

<%--JSP CODE--%>
<script src="<c:url value="/webjars/jquery/jquery.min.js" />" type="text/javascript"></script>
<script src="<c:url value="/webjars/bootstrap/js/bootstrap.min.js" />" type="text/javascript"></script>
......... 

基本上我想从 url 中删除一个 webjar 版本。 你能为这个问题提出一个好的和简单的解决方案吗?

到目前为止,我提出了资源 servlet,它可以猜测通过 url 返回哪个文件。但此解决方案涉及在应用程序启动时进行完整的资源扫描。

最佳答案

看看webjars-locator项目,您可以使用它来创建适当的请求 Controller 。

在使用 Spring MVC 的情况下,这将是:

@ResponseBody
@RequestMapping("/webjarslocator/{webjar}/**")
public ResponseEntity locateWebjarAsset(@PathVariable String webjar, HttpServletRequest request) {
    try {
        String mvcPrefix = "/webjarslocator/" + webjar + "/"; // This prefix must match the mapping path!
        String mvcPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
        String fullPath = assetLocator.getFullPath(webjar, mvcPath.substring(mvcPrefix.length()));
        return new ResponseEntity(new ClassPathResource(fullPath), HttpStatus.OK);
    } catch (Exception e) {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}

免责声明:这是来自 WebJars 的代码 documentation (部分 使依赖项版本不可知)。

在这种情况下,您可以通过以下方式请求 js 库:

<link rel='stylesheet' href='/webjarslocator/bootstrap/css/bootstrap.min.css'>

请注意,此网址中没有版本。

您也可以尝试通过使用缓存来优化此请求(以及因此 - 文件系统扫描),但我几乎可以肯定 webjars-locator 中已经包含了某种缓存(我还没有我检查了一下)。

关于javascript - 从 url 中删除 webjars 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35536836/

相关文章:

macos - 如何在终端中使用 IntelliJ 捆绑的 maven?

javascript - 通过 Telegram Bot 进行 Mangoosastic 全文搜索

javascript - 当我使用 jQuery 激活这个 url 时激活子菜单

javascript - 要将原型(prototype)分配给 Number,我应该使用 Function.prototype 还是 Object.prototype?

java - Android recyclerview 像画廊 View 吗?

java - 如何在运行时编辑方法注释属性?

javascript - 在列表项中响应 native 条件 onPress

java - 线程 "main"java.lang.IllegalAccessError : 中出现异常

java - 如何在 Java 上使用 Maven 按顺序运行具有多个 testng 测试的多个类

java - pom 文件中的 Maven 依赖规范