Страница ошибки web.xml не отображает изображение

У меня есть страница error.html, на которую я хочу перенаправить, например, когда пользователь сталкивается с Error404. Ниже работает:

<error-page>
    <error-code>404</error-code>
    <location>/error404.jsp</location>
</error-page>

Однако мой файл error404.jsp содержит изображение, которое не отображается при перенаправлении пользователя. Если я просто ввожу URL-адрес, отображается полная страница с изображением. Но если пользователь пытается сделать что-то, что сообщает об ошибке 404, файл error404.jsp отображается без изображения.

Я также пробовал с error404.html, но у меня та же проблема...

У вас есть идеи, почему это происходит?

Большое спасибо, Эна


person Ena    schedule 25.08.2012    source источник


Ответы (1)


Когда страница с ошибкой отображается, ее содержимое возвращается в ответе HTTP без перенаправления. Это означает, что браузер по-прежнему «видит» его в контексте URL-адреса запроса, в котором произошла ошибка. Таким образом, любые относительные ссылки на ресурсы (изображения, css и т. д.) будут относиться к URL-адресу текущей страницы.

Итак, если у вас есть следующие настройки:

  • image1.gif в папке изображений
  • error404.jsp, который ссылается на изображение как "../images/image1.gif"

Вы обнаружите, что ввод http://yourserver.com/YourContextRoot/error404.jsp работает нормально, но когда вы используете http://yourserver.com/YourContextRoot/path1/path2/missingPage он пытается найти изображение по неправильному пути (т.е. под /YourContextRoot/path1/images/image1.gif).

Решение состоит в том, чтобы использовать JSP EL или скриптлет для создания ссылки, относящейся к серверу (т.е. начинающейся с '/'), путем включения context-root:

<img src="${pageContext.request.contextPath}/images/image1.gif" />

Я надеюсь, что это работает!

person Michael Lucas    schedule 15.03.2013