Как связать файл веб-ресурсов с /main/resources в JSP?

У меня есть следующая структура в моем java webapp

-- main
   -- java
   -- resources
      -- lib
         -- css
            -- style.css
   -- webapp
      -- WEB-INF
         -- web.xml
      --index.jsp

Как я могу связать style.css с моим индексом jsp?

<link rel="stylesheet" href="???">

Что должно быть здесь?

Заранее спасибо

Ответ 1

Папка Maven /main/resources предназначена для ресурсов класса, которые не представляют классы Java, такие как файлы свойств i18n и всевозможные файлы конфигурации (текст, xml, json и т.д.). Это именно те ресурсы, которые вы хотели бы получить через ClassLoader#getResourceAsStream().

Эта папка не предназначена для общедоступных веб-ресурсов (то есть файлов, которые доступны общедоступному URL http://xxx). Вы должны поместить эти файлы веб-ресурсов в папку Maven /main/webapp (за пределами /WEB-INF и /META-INF), например, как вы уже правильно сделали для JSP файла (который также является общедоступным веб-ресурсом).

Итак, просто переместите эту папку /lib вниз (я лично также переименую эту папку, например, "ресурсы", "активы" или "статические", что более соответствует стандартам де-факто, имя папки, а именно, говорит о том, что она заполнена файлами JAR).

main
 |-- java
 |-- resources
 `-- webapp
      |-- lib
      |    `-- css
      |         `-- style.css
      |-- WEB-INF
      |    `-- web.xml
      `--index.jsp

Учитывая эту структуру, примерный путь контекста развертывания /webapp и пример сервера, работающего на http://localhost:8080, файл CSS должен быть доступен на абсолютном URL ниже:

http://localhost:8080/webapp/lib/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.

См. также:

Ответ 2

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

Вы можете найти все детали nitty в главе 10 Java Servlet 3.1 Specification.