Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/23: Рейтинг темы: голосов - 23, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57

Синхронизация responce в сервлете

13.06.2011, 18:08. Показов 4793. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Имею сервлет. Когда тестил на страницах, содержащих одно обращение
к сервлету - типа get или post в форме или через href -
все нормально. Сделал страницу, на которой есть пара images, данные для которых посылает тот же сервлет, так начались проблемы:
изображения путаются, приходят не в том порядке, или страница показывается пустой. Сделал сервлет implements SingleThreadModel -
не помогло. Подскажите, pls, какие в подобных случаях применяют решения ?

Заранее спасибо.

Константин.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.06.2011, 18:08
Ответы с готовыми решениями:

Ошибка при возврате List в responce SOAP
Ошибка при возврате List в responce SOAP В этом случае работает @Endpoint public class SearchDepositEndpoint { ...

Модуль EVO II синхронизация 50гц, На какой ножке контроллера синхронизация шим двигателя?
Частый дефект для модулей EVO II с коллекторным двигателем - нет управления двигателем при помехах в сети. Помехи создают диммеры, блоки...

Навигация в сервлете
Привет,вот решил создать новую тему(один вопрос -одна тема)).Никак не пойму в консоль томката результаты выводятся,а в сервлете нет,что...

36
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
15.06.2011, 14:27
Студворк — интернет-сервис помощи студентам
я явно не въезжаю в логику, но какой смысл формировать объект в функции и не возвращять его?
ну да ладно.

тут такое дело:

String fileName = (String) m_params.get('file');

у тебя RequestProcessor, из которого берутся параметры, является полем сервлета. т.е. его разделяют все потоки, создаваемые при запросах. поэтому каждый новый поток (запрос) сетит его по-своему.
из-за этого могут быть траблы
0
paradise
15.06.2011, 14:38
Souljah:
Java
1
2
3
4
5
6
public AbstractPage lookupPage(HttpServletRequest request,
HttpServletResponse response) {
AbstractPage ret = null;
HttpSession sess = null;
m_rp = new RequestProcessor(request, true);
...
m_rp - это RequestProcessor, из которого автор берет параметры. Почему ты считаешь, что он - поле сервлета?
paradise
15.06.2011, 14:40
Автор:
Покажи как ты запрашивашь картинку у этого сервлета. Только я тебя очень прошу - покажи только нужные места и используй [*code] [*/code]
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
15.06.2011, 14:40
private RequestProcessor m_rp = null;

он - поле сервлета, патамушто афтар объявил его как поле сервлета

в логике мне не откажешь, правда?
0
paradise
15.06.2011, 14:46
Да. Тут я протупил.
paradise
15.06.2011, 14:57
Souljah:
>у тебя RequestProcessor, из которого берутся параметры, является полем
>сервлета. т.е. его разделяют все потоки, создаваемые при запросах.
>поэтому каждый новый поток (запрос) сетит его по-своему.
>из-за этого могут быть траблы

Да, проблемы могут быть. Но афтар писал, что использовал SingleThreadModel и не полегчало. Хотя в этом случае, потоки не будут влиять на RequestProcessor других потоков.
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57
15.06.2011, 15:28  [ТС]
Во-первых, спасибо всем.

Запрашиваю картинку, к примеру, так:

Code
1
<IMG alt='Resin logo' src='http://$server$/usf_sm/pics?file=lib/pics/resin_logo.gif'>
другую вот так:
Code
1
<IMG alt='Our logo' src='http://$server$/usf_sm/pics?file=lib/pics/logo.gif'>
0
paradise
15.06.2011, 16:39
Попробуй сделать метод lookupPage синхронизированным. Это поможет понять : проблема в многопоточности или нет.
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57
15.06.2011, 16:56  [ТС]
Попробую. Интересное кино - сделал RequestProcessor m_rp переменной
в функции lookupPage, а не мембером класса: полегчало с картинками!!!
Осталась другая проблема: у меня есть html-таблица неких найденных
документов, которые я и показываю на странице. Перемещаюсь по табле,
{посылаю сервлету http://localhost:8080/usf_sm/nextSearchRes/, к примеру} и через раз вместо всей страницы с картинками, таблицей и т.п. вижу просто <html><body></body></html>, то есть пустоту.
Выводил в out в окне Resin'a генерируемую на этот запрос страницу в html-виде - все есть ! А в браузере - белый экран, как говорится...В чему тут может быть дело, а ?
0
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
15.06.2011, 17:45
Значит проблема была в многозадачности
от использования SingleThreadModel может и не полегчать - он deprecated и вообще хз как работает
0
paradise
15.06.2011, 18:12
>Значит проблема была в многозадачности от использования
>SingleThreadModel может и не полегчать - он deprecated и вообще хз как
>работает.

Никак он не работает Он говорит контейнеру, что этот сервлет следует инстанцировать для каждого запроса, а контейнер работает. Понятное дело, что никаких гарантий нет.
mishgun
17.06.2011, 20:00
по поводу второй проблемы.Скопируй свой вывод в ноутпад сохрани как хтмл и посари будет хтмл или нет.А вообще то генерить хтмл в сервлете не есть гуд идея.для етого падонки из Сан jsp забацали)))
mishgun
17.06.2011, 20:01
сорри не закончил мысль а ручонки шаловливые уже на отправить нажали))
Смысл насчет копирования в том что у тебя может хтмл генерится с неправильным кодом вот и не показывается
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57
19.06.2011, 18:28  [ТС]
Сохранил все генерируемые html'и в файл. Все правильно ! А в браузере -
<html><body></body></html>.... С чего это может быть ?
0
1 / 1 / 0
Регистрация: 12.06.2011
Сообщений: 68
19.06.2011, 23:06
>>как вы предлагаете 'выдать' картинку из базы, и в чем эта
>>песня 'другая'?
У меня, например, весь вывод обычно идет через xml + xsl. База обычно Oracle, который может хранить изображения как внутри себя, так и снаружи. А можно вообще хранить только имена файлов/картинок.

Соответственно, в xml записываются только имена файлов/картинок, а сами изображения хранятся на диске, а не в 'базе', хотя это хранилище в общем случае можно считать частью БД.

Если нагрузка на сервер велика (5 - 20млн. страниц в день), выйгрышь за счет исключения операции по извлечению изображения из базы может быть достаточно существенным (материально это несколько недешевых серверов).
0
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57
20.06.2011, 10:46  [ТС]
Хтмл выводится с помощью такого класса в функции generate():

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public abstract class AbstractPage {
  protected static StringTemplateGroup templateLib;
  private HttpServletRequest m_request;
  private HttpServletResponse m_response;
  private PrintWriter m_out;
 
  public static void init() {
    try {
      String root = new usf_sm.tools.EnvVars().getEnv('USF_SM_ROOT');
      templateLib = new StringTemplateGroup('group',root + '/lib/templates');
      //templateLib.setRefreshInterval(0);
    } catch (Exception e) {
      System.err.println('AbstractPage.init: ' + e.toString());
    }
  }
 
   public AbstractPage(HttpServletRequest request,
                       HttpServletResponse response
                       )
   {
     try {
       m_request = request;
       m_response = response;
       m_out = response.getWriter();
     } catch (Exception e) {
       System.out.println('AbstractPage: ' + e.getMessage());
     }
   }
 
   public void generate() throws ServletException {
     try {
       StringTemplate pageST = templateLib.getInstanceOf('home_page');
       
       StringTemplate bodyST = body();
 
       if (bodyST != null) {
         pageST.setAttribute('html', bodyST);
         pageST.setAttribute('server',new Preferences().GetServer());
       }
       m_out.println(pageST);
       m_out.close();
         
       // debug
       File f = new File('c:/test0.html');
       f.createNewFile();
       FileOutputStream fos = new FileOutputStream(f);
       fos.write(pageST.toString().getBytes());
       fos.close();
 
     } catch (Exception e) {
       System.out.println('AbstractPage::generate: ' + e.getMessage());
       throw new ServletException(e.getMessage());
     }
   }
 
   /** Subclasses override this method to return the body of page to
    *  display
    */
   protected abstract StringTemplate body() throws Exception;
 
}
//------------------------------------------------
Пробую выводить pageST в файл - все OK, а в браузере периодически возникает пустая страница. Может что не так здесь ??? Может есть идеи ?
0
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57
20.06.2011, 10:49  [ТС]
блин, два раза запостил...
А не может Resin подглючивает (?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2011, 10:49
Помогаю со студенческими работами здесь

Ошибка в сервлете
Ввожу данные и нажимаю Отправить, но выдает ошибку на сервлете :HTTP Status 500 - Internal Server Error type Exception report ...

Ошибка в сервлете
создал сервлет и в етой строке javax.servlet.http.HttpServlet кода подчеркивает слово SERVLET пишет Cannot resolve symbol servlet. а...

Сессия в сервлете)
Есть servlet и два файла jsp - (например) UpdateServlet.java, index.jsp и update.jsp. index.jsp - содержит ссылку с значением 1,...

GUI в Сервлете
Всем привет. В книге немного написано о сервлетах.... Там через PrintWriter выводят HTML код. У меня такой вопрос. Можно ли...

Lazy loading в сервлете
Добрый день, у меня веб-приложение на spring + hibernate, есть связки one-to-many и many-to-one, ранее столкнулся с проблемой ленивой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru