Можно ли вызвать сервлет из css? - PullRequest
4 голосов
/ 22 апреля 2010

Я пытаюсь переместить все изображения, хранящиеся в папке веб-приложения, в базу данных. И зовет их сервлетом. Можно ли вызвать сервлет из моего css ?? или есть ли способ вызвать удаленно сохраненный файл изображения из css ??

Я пытался вызвать метод сервлета из CSS. Но не удалось. Можно ли вызвать такой метод?

background-image: url (servlet / com.abc.servlet.GetImage? Name = home & GetImage ('abc', '123'));

Ответы [ 3 ]

5 голосов
/ 22 апреля 2010

Да. Правило CSS, которое указывает изображение, может содержать любой тип URL, который браузер может анализировать и получать:

body { 
 background-image:
 url(http://www.domain.com/servlets/my_servlet.jsp?argument=value)
}
5 голосов
/ 22 апреля 2010

Да. Пока изображения имеют URL-адреса, вы можете использовать их в своем CSS.

Например:

background-image:url('/getimage.ashx?id=3');

Вы даже можете пойти дальше и перенаправить их URL-адреса - вы даже можете использовать те же URL-адреса, которые вы используете сегодня, но ваш сервер обрабатывает запрос и загружает файлы из базы данных.

Еще один совет: убедитесь, что вы установили правильные заголовки. Вы хотите использовать правильный тип содержимого и, возможно, хотите, чтобы изображения правильно кэшировались на стороне клиента.

2 голосов
/ 22 апреля 2010

Это возможно. Просто создайте imageservlet как этот пример здесь. Кстати, просто получите изображение как InputStream из БД по ResultSet#getBinaryStream() и запишите его в OutputStream ответа, полученного как HttpServletResponse#getOutputStream() обычный способ Java IO . Не забудьте добавить тип содержимого HTTP и заголовки длины содержимого. Если вы опустите тип контента, браузер не будет знать, что делать с информацией. Если вы опустите длину содержимого, оно будет отправлено с частичной кодировкой передачи, что чуть менее эффективно.

Что касается ссылки на сервлет в файле CSS, просто укажите URL относительно файла CSS. Таким образом, вам не нужно беспокоиться о пути к контексту. Определить относительный URL не так сложно, он работает так же, как и при доступе к путям файловой системы на локальном диске в командной консоли. cd ../../foo/bar/file.ext и так далее. Вы когда-нибудь изучали это в школах, да?

ОК, предположим, что imageservlet расположен в http://example.com/context/image?id=x, а CSS-файл расположен в http://example.com/context/css/globalstyle.css (таким образом, текущая папка css), а затем правильный относительный URL для imageservlet изнутри CSS. файл будет:

background-image: url('../image?id=123');

../ делает шаг назад в структуре каталогов, поэтому вы переходите из папки http://example.com/context/css в http://example.com/context. Если вам все еще сложно определить правильный относительный путь, то сообщите нам абсолютный URL как сервлета, так и файла CSS, и мы извлечем правильный относительный путь для вас.

...