Ответ 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 ниже:
Итак, любая из приведенных ниже ссылок 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.