Как связать файл веб-ресурса из /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.

Другие вопросы по тегам