从 url 中删除 webjars 版本
Remove webjars version from url
我们在我们的项目中使用带有 maven 的 webjars。
所以我们有数百个 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 猜测 return 哪个文件。但此解决方案涉及在应用程序启动时进行完整的资源扫描。
看看 webjars-locator 项目,您可以使用它来创建适当的请求控制器。
如果使用 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(第 Making dependencies version agnostic
节)的代码。
在这种情况下,您可以通过以下方式请求js库:
<link rel='stylesheet' href='/webjarslocator/bootstrap/css/bootstrap.min.css'>
请注意,此 url 中没有版本。
您也可以尝试通过使用缓存来优化此请求(以及因此 - 文件系统扫描),但我几乎可以肯定 webjars-locator
中已经涉及某种缓存(我没有检查过).
我们在我们的项目中使用带有 maven 的 webjars。 所以我们有数百个 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 猜测 return 哪个文件。但此解决方案涉及在应用程序启动时进行完整的资源扫描。
看看 webjars-locator 项目,您可以使用它来创建适当的请求控制器。
如果使用 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(第 Making dependencies version agnostic
节)的代码。
在这种情况下,您可以通过以下方式请求js库:
<link rel='stylesheet' href='/webjarslocator/bootstrap/css/bootstrap.min.css'>
请注意,此 url 中没有版本。
您也可以尝试通过使用缓存来优化此请求(以及因此 - 文件系统扫描),但我几乎可以肯定 webjars-locator
中已经涉及某种缓存(我没有检查过).