Как связать файл веб-ресурса из /main/resources в JSP?
У меня есть следующая структура в моем веб-приложении Java
-- main
-- java
-- resources
-- lib
-- css
-- style.css
-- webapp
-- WEB-INF
-- web.xml
--index.jsp
Как я могу связать style.css с моим индексом jsp?
<link rel="stylesheet" href="???">
Что здесь должно быть?
заранее спасибо
2 ответа
Мавен /main/resources
папка предназначена для ресурсов classpath, которые не представляют классы Java, таких как файлы свойств i18n и всевозможные файлы конфигурации (text, xml, json и т. д.). Это именно те ресурсы, которые вы хотели бы получить через ClassLoader#getResourceAsStream()
,
Эта папка не предназначена для общедоступных веб-ресурсов (т. Е. Файлов, доступных общедоступным http://xxx
URL). Вы должны поместить эти файлы веб-ресурсов в Maven /main/webapp
папка (снаружи /WEB-INF
а также /META-INF
), как вы уже правильно сделали для файла JSP (который также является общедоступным веб-ресурсом).
Итак, просто переместите это /lib
папка вниз (лично я бы также переименовал эту папку, например, в "resources", "assets" или "static", что в большей степени соответствует стандартам де-факто; имя папки "lib" предполагает, что она полна JAR-файлов),
main
|-- java
|-- resources
`-- webapp
|-- lib
| `-- css
| `-- style.css
|-- WEB-INF
| `-- web.xml
`--index.jsp
Учитывая эту структуру, пример пути развертывания контекста /webapp
и пример сервера, работающего на http://localhost:8080
, CSS-файл должен быть доступен по нижеуказанному абсолютному URL:
HTTP: // локальный: 8080 / WebApp / Библиотека / CSS / style.css
Итак, любая из приведенных ниже ссылок CSS в HTML-представлении страницы JSP должна делать:
<link rel="stylesheet" href="http://localhost:8080/webapp/lib/css/style.css" />
<link rel="stylesheet" href="//localhost:8080/webapp/lib/css/style.css" />
<link rel="stylesheet" href="/webapp/lib/css/style.css" />
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/css/style.css" />
Сделайте ваш выбор. Последний рекомендуется, учитывая динамичность других частей целевого URL.
Смотрите также:
Вы должны поместить активы, которые должны быть доставлены клиенту, под ваши webapp
каталог. В противном случае вам нужно будет написать сервлет для их доставки.
Вы можете найти все подробности в Главе 10 Спецификации Java Servlet 3.1.