src
элемента HTML <img>
должен просто указывать на URL. URL-адрес - это веб-адрес, аналогичный тому, который вы вводите в адресной строке браузера. Сервлеты могут отображаться на определенные шаблоны URL-адресов с помощью web.xml
, поэтому при вызове URL-адреса, соответствующего отображению сервлета, будет вызываться сервлет. Смотрите также наши сервлеты Wiki .
Вы сопоставили сервлет с шаблоном URL-адреса /Photos
. Ввод URL-адреса, например
http://localhost:8080/YourContextPath/Photos
в адресной строке браузера должно отображаться изображение. Таким образом, в основном, предполагая, что JSP работает в том же пути контекста, это должно сделать:
<img src="Photos" />
Или, если вы хотите сделать его относительно корня домена, вам нужно динамически включить путь контекста:
<img src="${pageContext.request.contextPath}/Photos" />
Сказал, что в вашем сервлете есть проблемы. Вы не установили заголовок типа контента. Таким образом, браузер не будет знать, что делать с ответом HTTP. Он отобразит всплывающее окно Сохранить как , когда вы введете его URL прямо в адресную строку, и отобразит ничто , когда вы вызовете его в <img>
. Если это изображение в формате JPG, добавьте следующую строку перед , которую вы называете response.getOutputStream()
.
response.setContentType("image/jpeg");
Таким образом, браузер понимает, что это изображение в формате JPG, и отображает его как таковой. См. Также блог, на который вы ссылались, для правильной настройки заголовков.
Другая проблема заключается в том, что вы звоните request.getSession(false)
, который потенциально может вернуть null
, когда нет возможности сеанса. Но вы не проверяете это на следующей строке! Так что либо используйте
HttpSession session = request.getSession();
так, чтобы оно никогда не было null
, или добавить
if (session == null) {
// Display some default image or return a 404 instead.
return;
}
Вы хотели бы сделать то же самое для userId
и photoStream
. Если оно отсутствует, отобразите изображение по умолчанию или верните 404.