Удалить версию webjars из URL

Мы используем 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>
......... 

И, как вы можете догадаться, обновление веб-файлов до более новых версий — кропотливая работа. Итак, я ищу решение, которое позволит мне импортировать такие скрипты:

<%--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>
......... 

В основном я хочу удалить версию webjar из URL-адреса. Можете ли вы предложить красивое и простое решение этой проблемы?

До сих пор я придумал сервлет ресурсов, который может угадать, какой файл вернуть по URL-адресу. Но это решение предполагает полное сканирование ресурсов при запуске приложения.


person Yurii Bondarenko    schedule 21.02.2016    source источник
comment
Если вы используете минимизацию, вы можете создать эти файлы js в отдельной папке и с именем, которое не содержит версию...   -  person khmarbaise    schedule 21.02.2016


Ответы (1)


Взгляните на проект 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 документации (раздел Making dependencies version agnostic).

В этом случае вы можете запросить библиотеки js следующим образом:

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

Обратите внимание, что в этом URL нет версии.

Вы также можете попытаться оптимизировать эти запросы (и, следовательно, сканирование файловой системы) с помощью кеша, но я почти уверен, что какой-то кеш уже задействован в webjars-locator (я этого не проверял).

person Maciej Dobrowolski    schedule 21.02.2016
comment
можно пример поставить не использующий spring или любой другой фреймворк только maven??? - person abrahamhs; 09.05.2018