2016-02-18 3 views
1

Я пытаюсь использовать функции JavaScript из библиотеки JavaScript в моем JSP-файле, чтобы отобразить результат на странице веб-браузера, но похоже, что включение не работает.Включите библиотеку JavaScript в JSP-файл

Я на самом деле поставил .js файл, соответствующий библиотеке в папке WEB-INF и добавил следующую строку в файл JSP, чтобы включить его в нем:

<script type="text/javascript" src="./jsgl.min.js"></script>

I успешно удалось использовать библиотеку в простом HTML-файле, поэтому я не понимаю, почему это не работает.

EDIT:

enter image description here

+0

Это путь в 'src' правильно? Это где находится фактический файл javascript? Возможно, проверьте правильность имени файла как проверку работоспособности. – mohammedkhan

+0

Вы пробовали src = "/ WebContent/js // jsgl.min.js" – Rupesh

+0

@Rupesh Да и он не работает ни – Neo

ответ

1

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

+0

Я пробовал то, что вы предлагали, но он все еще не работает:/@daiscog – Neo

+0

Я работаю в localhost, может быть, это и есть причина проблемы? – Neo

+0

Это не должно быть проблемой. Ваш браузер по-прежнему будет разрешать относительные URL как обычно.Просто чтобы подтвердить: ваш файл сценария находится в папке 'WebContent/js /', а URL-адрес в вашем браузере начинается с 'http: // localhost/YourWebApp/...'? – megaflop

0

Статические ресурсы должны поставить вне папки WEB-INF (как вы, как правило, не позволяют веб-доступ к его содержимому).

Вы можете поместить файл под веб-приложение/JS /, а затем изменить свой импорт сценария для:

<script type="text/javascript" src="/js/jsgl.min.js"></script> 

В дополнение к тому, хорошая практика, это хорошо, поскольку это не относится к месту нахождения JSP файл.

+0

У меня нет папки webapp, я использую Eclipse, я пробовал аналогично что вы сказали, добавив папку «js» в WebContent, тогда я заменил свой сценарий импорта вашим, но он все еще не работает. – Neo

+0

«webapp» относится к корневой папке вашего веб-приложения. Как правило, имя по умолчанию в динамических веб-проектах eclipse является «WebContent». Поэтому файл должен находиться под «WebContent/js /» и тегом сценария в jsp, как было предложено выше. –

+0

Это то, что я делаю, проверяю последнее редактирование – Neo

0
Files in WEB-INF are inaccessible. 

Вы можете разместить их под webapp и попытаться получить доступ, как указано выше.

Смежные вопросы