TLDR
Поместите файл JS в папке под веб-контента (но не WEB-INF), как [WebContent] /js/jsgl.min.js, и использовать следующие в JSP :
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jsgl.min.js"></script>
Объяснение
JSP файлы скомпилируются сервером, затем обрабатываются для отправки данных (обычно HTML) обратно в веб-браузер. A <script>
тег - это тег HTML, который интерпретируется браузером, а не контейнером сервлета. Поэтому браузер видит, что в HTML затем делает новый запрос на сервер для файла JavaScript в атрибуте src
.
Атрибут src относится к URL-адресу, который запрашивал браузер, а не к пути JSP на сервере.
Так как пример, скажем:
- Браузер запрашивает страницу на
http://example.com/SomeWebApp/some-resource
- Контейнер сервлетов внутренне направляет запрос на JSP в
/WEB-INF/jsp/somepage.jsp
- Отклик посланный к браузер содержит тег сценария
<script type="text/javascript" src="./jsgl.min.js"></script>
(как в вашем вопросе)
- Браузер видит URL
./jsgl.min.js
и решает его относительно URL-адреса ha s запросил сервер для (который в этом случае был http://example.com/SomeWebApp/some-resource
- обратите внимание, что нет трейлинга '/'), поэтому браузер запрашивает JS-файл с http://example.com/SomeWebApp/jsgl.min.js
*. Это связано с тем, что относительный URL-адрес атрибута src тега скрипта начинается с «.».
Другой ответ предложил разместить JS-файл в папке «js» и сменить тег сценария на <script type="text/javascript" src="/js/jsgl.min.js"></script>
. Используя тот же исходный URL-адрес страницы, что и в примере выше, браузер переведет этот URL-адрес src на http://example.com/js/jsgl.min.js
. Обратите внимание: в этом отсутствует путь контекста «/ SomeWebApp».
поэтому лучшее решение действительно поместить файл JS в статической папке как /js/jsgl.min.js, но использовать следующую команду в тег сценария JSP:
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jsgl.min.js"></script>
СПЯ воли переведите бит ${pageContext.request.contextPath}
в текущий путь контекста, сделав код переносимым (если вы повторно развернете webapp с другим контуром контекста, он все равно будет работать). Таким образом, ответ HTML, полученные в браузере будет (опять же, придерживаясь нашего примера выше):
<script type="text/javascript" src="/SomeWebApp/js/jsgl.min.js"></script>
Браузер теперь будет решать, что относительный URL для правильной цели.
__
* Если исходный URL имел слэш = т.е. был http://example.com/SomeWebApp/some-resource/
, то URL JS будет http://example.com/SomeWebApp/some-resource/jsgl.min.js
Это путь в 'src' правильно? Это где находится фактический файл javascript? Возможно, проверьте правильность имени файла как проверку работоспособности. – mohammedkhan
Вы пробовали src = "/ WebContent/js // jsgl.min.js" – Rupesh
@Rupesh Да и он не работает ни – Neo