Браузер не может получать / находить относительные ресурсы, такие как CSS, изображения и ссылки при вызове сервлета, который пересылает JSP

У меня возникли проблемы с загрузкой CSS и изображений и созданием ссылок на другие страницы, когда у меня есть сервлет в JSP. В частности, когда я устанавливаю свой в index.jsp , CSS загружается и отображаются мои изображения. Однако, если я установил свой в HomeServlet который index.jsp управления в index.jsp , CSS не применяется и мои изображения не отображаются.

Мой CSS-файл находится в web/styles/default.css .
Мои изображения находятся в web/images/ .

Я связываюсь с моим CSS следующим образом:

  

Я показываю свои изображения следующим образом:

 Image1 

Как возникла эта проблема и как ее решить?


Обновление 1 : Я добавил структуру приложения, а также другую информацию, которая может помочь.

alt text

Файл header.jsp – это файл, содержащий тег ссылки для CSS. HomeServlet настроен как мой welcome-file в web.xml :

  HomeServlet  

Сервлет объявляется и отображается как следующий в web.xml :

  HomeServlet com.brianblog.frontend.HomeServlet   HomeServlet /  

Обновление 2 : я обнаружил проблему в конце – мой сервлет был неправильно отображен. По-видимому, при установке сервлета в качестве он не может иметь шаблон URL-адреса / , который я нахожу странным, потому что это не означает, что это корневой каталог сайта?

Новое отображение выглядит следующим образом:

  HomeServlet /HomeServlet  

8 Solutions collect form web for “Браузер не может получать / находить относительные ресурсы, такие как CSS, изображения и ссылки при вызове сервлета, который пересылает JSP”

Все относительные URL-адреса на странице HTML, сгенерированные JSP-файлом, относятся к текущему URL-адресу запроса (URL-адрес, который вы видите в адресной строке браузера), а не к местоположению JSP-файла на стороне сервера, как вы, кажется, ожидаете. Это именно веб-браузер, который должен загружать эти ресурсы по URL-адресу, а не веб-серверу, который должен каким-то образом включить их с диска.

Помимо изменения относительных URL-адресов, чтобы сделать их относительно URL-адреса сервлета вместо местоположения JSP-файла, еще один способ исправить эту проблему – сделать их относительно корня домена (т.е. начать с a / ). Таким образом, вам не нужно беспокоиться об изменении относительных путей еще раз при изменении URL-адреса сервлета.

       link 

Однако вам, вероятно, не хотелось бы жестко указывать путь контекста. Очень разумно. Вы можете получить контекстный путь в EL с помощью ${pageContext.request.contextPath} .

       link 

(который может быть легко сокращен с помощью и используется как ${root} другом месте)

Или, если вы не боитесь нечитаемого XML и разбитого синтаксиса XML, используйте JSTL :

  " /> ">   " /> ">link 
">

В любом случае, это в свою очередь довольно громоздко, если у вас много относительных URL-адресов. Для этого вы можете использовать . Все относительные URL-адреса мгновенно станут относительными к нему. Однако он должен начинаться со схемы ( http:// , https:// и т. Д.). Нет простого способа получить базовый контекстный путь в обычном EL, поэтому нам нужна небольшая помощь JSTL .

 < %@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> < %@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>   ${req.requestURL} ...        link 

Это в свою очередь (опять же) некоторые предостережения. Якоря (URL-адрес #identifier ) будут также #identifier к базовому пути! Вы хотели бы сделать это относительно URL-адреса запроса (URI). Итак, измените, как

 jump 

в

 jump 

Каждый путь имеет свои плюсы и минусы. Вам решать, что выбрать. По крайней мере, теперь вы должны понять, как эта проблема вызвана и как ее решить 🙂

Смотрите также:

  • Рекомендуется ли использовать html?

Я столкнулся с аналогичной проблемой с приложением Spring MVC. Я использовал < mvc:resources > чтобы решить эту проблему.

Пожалуйста, найдите следующую ссылку, содержащую более подробную информацию.

http://www.mkyong.com/spring-mvc/spring-mvc-how-to-include-js-or-css-files-in-a-jsp-page/

Вы должны проанализировать фактический вывод HTML для подсказки.

С другой стороны, указывая путь, как это означает «из текущего местоположения», если вы начинаете с того, что будет означать «из контекста».

Ваша страница приветствия установлена ​​в качестве этого сервлета. Таким образом, все css, путь изображения следует указывать относительно DIR сервлета. это плохая идея! зачем вам сервлет в качестве домашней страницы? установить .jsp в качестве индексной страницы и перенаправить на любую страницу оттуда?

вы пытаетесь заполнить любые поля из db, поэтому вы используете сервлет?

Если вы используете Spring MVC, вам необходимо объявить сервлет действия по умолчанию для статического содержимого. Добавьте следующие данные в spring-action-servlet.xml. Это сработало для меня.

ПРИМЕЧАНИЕ. Храните все статическое содержимое вне WEB-INF.

         

Что касается вашего обновления, я был в замешательстве за рассуждения. Глубоко углубился и нашел этот камень:

  • Yoursite.com становится yoursite.com/
  • yoursite.com/ – это каталог, поэтому список приветственных файлов проверяется
  • yoursite.com/CMS – это первый приветственный файл («CMS» в списке приветственных файлов), и есть сопоставление / CMS с сервлетом MyCMS, так что к сервлету обращаются.

Источник: http://wiki.metawerx.net/wiki/HowToUseAServletAsYourMainWebPage

Таким образом, отображение тогда имеет смысл.

И теперь можно свободно использовать $ {pageContext.request.contextPath} / path / as src / href для относительных ссылок!

короткий ответ – добавьте следующую строку в jsp, которая определит базовую
base href = “/ {корень вашего приложения} /”

Ниже код работал для меня.

вместо использования < % @ include file = "styles / default.css"%>

Interesting Posts

Пакетный файл – запуск программы с правами администратора

Где можно загрузить Windows 7 (юридически из Microsoft)?

268 портов, связанных с Chrome

Linux Arch на ARM – Случайный USB-накопитель "заморозить"

Обновление загрузочного окна Windows Update, не может удалить обновление с помощью DISM

Переход на последнюю вкладку в Firefox

Загрузка подключения к Интернету

Копирование файлов с помощью PuTTy (не PSCP или чего-нибудь еще, только PuTTy)

Что означает текстовое поле «Параметры запуска» в окне свойств служб?

Преобразование HTML в изображение

Как сделать программу (файл .exe) видимой при поиске из меню «Пуск»

Использование диска переустановки Dell для Windows Vista на ноутбуке Sony

Почему я спрашиваю «Вы уверены, что хотите скопировать этот файл без его свойств?» При копировании файлов с NTFS на диск FAT?

Отключить окно сборки при создании в Sublime Text 2

Как я могу гарантировать, что история Firefox полностью удалена после выхода?

Давайте будем гением компьютера.