2012-06-27 4 views
0

Я пытаюсь отобразить аватар пользователя, хранящийся в БД на странице User Personal (JSP), вот что я делаюКак показать изображение в JSP?

1 У меня есть запрос на регистрацию сервлета и создание объекта User Bean. (Аватар пользователя в виде байтового массива, он может появляться несколько раз на разных страницах и местах, поэтому я предпочитаю атрибут сеанса, а не каждый раз читать их из БД)

2 Пользовательский компонент хранится в сеансе как атрибут.

3- Я хочу иметь еще один JSP или Servlet для отображения этого байтового массива аватара в качестве изображения в любое время.

4 Я также хочу, чтобы этот сервлет мог быть повторно использован для других изображений значков, поэтому я думаю, что он не может полагаться на атрибуты сеанса для передачи байтового массива? (Я не совсем уверен в этом)

так что есть какой-либо дизайн для достижения того, что я хочу? или я должен просто использовать атрибуты сеанса для передачи данных?

Благодаря

ответ

2

Как можно отобразить изображение в JSP?

Использование элемента HTML <img>.


Есть ли дизайн достичь того, чего я хочу?

Вы можете просто создать для этого автономный сервлет. Это всего 2 или 3 строки кода в методе doGet(). Правда, этот сервлет действительно не будет повторно использоваться для потоковой передачи изображений прямо из БД, но вы можете просто создать еще один. Это не главная проблема ИМХО.


или я должен просто использовать атрибуты сеанса для передачи данных вокруг?

Только если он действительно представляет sessionwide данные, и вы на основе измерения производительности подтвердили, что сохранение пользователя аватара в сессии быстрее, чем потоковое его из БД каждый раз. Имейте в виду, что любые данные в области сеанса накапливают память сервера, поэтому убедитесь, что эти изображения не превышают определенный размер файла.

0

Если аватар не является чем-то очень секретным, я бы создал сервлет, который принимает параметр userid и получает данные изображения из БД. Вложение будет выглядеть так:

<img src="/avatarservlet?userid=XXX"/>

Это позволит решить почти все, за исключением проблемы с производительностью. Вместо того чтобы передавать данные изображения вокруг в сессии (baaaaaad идея), у вас есть два варианта:

  1. Добавить истекает заголовки/кэша в сервлет, поэтому браузеры будут делать кэширование.
  2. Поскольку ваш сервлет будет без гражданства, это идеальный кандидат для кэширования методов. см. http://ehcache.org/documentation/recipes/spring-annotations
Смежные вопросы