powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как организовать поток из сервлета
13 сообщений из 13, страница 1 из 1
как организовать поток из сервлета
    #32825782
slolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сервере лежит файл mp3.
Хочу в сервлете преобразовать его в поток и передать этот поток апплету,
чтоб тот уже открыл его на стороне клиента.
Как правильно это организовать?
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32826529
SOMNAMBULA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут выделяется две проблемы: организовать поток в сервлете и организовать проигрывание музыки из этого потока в аплете. Что конкретно интересует? Судя по твоим предыдущем топикам ты знаешь как сделать последнее (я не знаю). Т.е. в аплете у тебя будет что-то вроде:

Код: plaintext
1.
2.
3.
...
String musServletURL = "http://localhost:7777/musapp/playmusic?musID=3421";
play( new  URL(musServletURL));
...

А в сервлете типа такого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 public   void  doGet(...)...
{
...
String musId = request.getParameter("musId");
FileInputStream fis = createFileInputStream(findMusicFile(musId));); // тут ты получишь поток из своего файла
String mimeType = getServletContext().getMimeType(findMusicFile(musId));
response.setContentType(mimeType);
ServletOutputStream sos = response.getOutputStream();
sos.write(getFileBytes(fis));
sos.flush();
sos.close();
...
}

Я вот так вот примерно делаю (токо вот с аплетами так никогда не пробовал)
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32827492
slolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас попробую - спасибо.
так а кто у тебя играет музычку - просто на браузер этот поток себе отправляется, а тот как определяет, что это музычка?
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32827785
SOMNAMBULA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Проигрывает плейер по умолчанию (Windows Media Player)
2. Опеределяет по MIME TYPE:

Код: plaintext
response.setContentType(mimeType);

Серьёзного ничего такого на этой почве не делал, просто баловался, так что не большой специалист в данном вопросе.
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32828266
slolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не могу понять момент findMusicFile(musId) - он берет параметром
реальный файл на сервере и возвращает что?
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32828326
SOMNAMBULA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slolenЯ не могу понять момент findMusicFile(musId) - он берет параметром
реальный файл на сервере и возвращает что?

Параметром он берёт некий идентификатор файла, переданный запросом из браузера или другого клиента, как я уже приводил пример:

Код: plaintext
http://localhost: 7777 /musapp/playmusic?musID= 3421 


А метод
Код: plaintext
String findMusicFile(String musicFileId) 

должен вернуть имя файла по заданному идентификатору

Метод

Код: plaintext
FileInputStream createFileInputStream(String fileName)

Создаст поток для указанного файла

Про метод getServletContext и вообще про ServletContext почитай в спецификации Java Servlets.

Т.е. логика проста: клиент (браузер или ещё кто) делает запрос на веб сревер, обрабатываемый нашим сервлетом. В запросе (по методу GET в данном случае) передаётся некий идентификатор музакального файла.
Сервлет извлекает переданный идентификатор и по нему определяет соответствующий ему файл (метод findMusicFile(), логику метода придумай сам, дело хозяйское), т.е. вернёт его имя и путь. Сам файл лежит где-то на сервере. Затем создаём поток из файла. Определяем MIME тип файла методом интерфейса ServletContext.getMimeType() и устанавливаем тип ответа соответственно ему. Из потока файла читаем байты и ложим в ответ. Вот и всё. Да, поток файла закрыть не забудь.
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32829278
slolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я торможу, sorry.
Как сделать OutputStream из локального файла?
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32829288
slolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOMNAMBULA Из потока файла читаем байты и ложим в ответ
вот конкретно этот момент - то есть я делаю
FileInputStream fin = createFileInputStream(String fileName);
OutputStream out = res.getOutputStream();
а вот дальше - как их состыковать
out.write(fin)? :) (шутка)
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32829330
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
5 строчка снизу в примере самнамбулы :)
считай, да передай...
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32829333
slolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отлично - getFileBytes() - мне нравиться название.
Вот именно как его имплементировать я ж и спрашиваю :)
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32829342
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
FileInputStream input = ...
ServletOutputStream output = ...

 for  ( byte [] buffer =  new   byte [0x1000]; output.write(buffer,  0 , input.read(buffer)); input.available())

Но лучше тоже самое только в читабельном виде :)
...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32829344
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, плохо.
с опечатками и работает криво.

вот так работает и ещё больше геморроя:

Код: plaintext
1.
2.
3.
4.
        FileInputStream input=...;
        ServletOutputStream output=...;
         for  ( byte [] buffer =  new   byte [ 127 ]; (buffer[ 126 ] = ( byte ) input.read(buffer,  0 ,  125 )) != - 1 ; output.write(buffer,  0 , buffer[ 126 ])) ;

...
Рейтинг: 0 / 0
как организовать поток из сервлета
    #32830045
slolen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
Особенно интересно
NotGonnaGetUs

Код: plaintext
1.
2.
3.
     
         for  ( byte [] buffer =  new   byte [ 127 ]; (buffer[ 126 ] = ( byte ) input.read(buffer,  0 ,  125 )) != - 1 ; output.write(buffer,  0 , buffer[ 126 ])) ;

...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / как организовать поток из сервлета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]