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

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

13.06.2011, 18:08. Показов 4920. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru