2010-04-22 2 views
4

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

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

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

ответ

2

Это возможно. Просто создайте обрамление, например this example. В точку просто получите изображение как InputStream из БД на ResultSet#getBinaryStream() и напишите его на OutputStream ответа, полученного по HttpServletResponse#getOutputStream(), номер usual Java IO way. Не забудьте добавить заголовки содержимого 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'); 

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

+0

привет .. Вот URL-адрес CSS и сервлета. HTTP: // локальный: 8080/ /myStyle.css HTTP: // локальный: 8080/ /servlet/com.abc.def.servlet.FileServlet?pictureType=common&pictureName=home.gif мая я знаю, как я могу получить путь. – coder247

+0

Он находится в одной родительской папке. Вы можете просто использовать 'background-image: url ('servlet')'. – BalusC

+0

Спасибо .. сейчас остальная часть работы проста .. :) – coder247

5

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

Например:

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

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

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

+0

Хороший вопрос об заголовках. –

+0

Есть ли какой-либо возможный способ получить контекстный путь из CSS? например request.getContextPath() в jsp. – coder247

+0

Возможно, но это означает, что CSS является динамическим и определяется на стороне сервера. Вам нужно будет настроить свой сервер соответствующим образом. Конечно, файл * CSS * может быть динамическим, как и изображения.Он не должен быть физическим файлом '.css'. – Kobi

5

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

body { 
background-image: 
url(http://www.domain.com/servlets/my_servlet.jsp?argument=value) 
} 
Смежные вопросы