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

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

13.06.2011, 18:08. Показов 4779. Ответов 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
paradise
13.06.2011, 19:07
Ты бы хоть код запостил.

Первое, что приходит в голову - дать понять сервлету - какой image тебе нужен.
paradise
13.06.2011, 19:12
SingleThreadModel деприкайтед если я ничего не путаю. Да и не из этой песни слова совсем.
1 / 1 / 0
Регистрация: 15.02.2010
Сообщений: 311
13.06.2011, 19:19
Во-первых, как сказано выше, нужны детали.

Во-вторых, заставлять сервлет выдавать картинки - не лучшая идея. Хотя при большой нужде можно...
0
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
13.06.2011, 19:29
>>Во-вторых, заставлять сервлет выдавать картинки - не лучшая идея.

почему? есть более другие варианты?
0
1 / 1 / 0
Регистрация: 12.06.2011
Сообщений: 68
13.06.2011, 20:55
>>Во-вторых, заставлять сервлет выдавать картинки - не лучшая идея.
Если картинка генерится в коде и после закрытия страницы должна быть выброшена, почему нет.

Если из базы, то это другая песня.
0
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
13.06.2011, 21:05
как вы предлагаете 'выдать' картинку из базы, и в чем эта песня 'другая'?
0
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
13.06.2011, 21:06
т.е. не используя сервлеты
0
paradise
14.06.2011, 12:46
Souljah, если ты хочешь провести сеанс массовой телепатии, то это в другой форум. Ты разрабатываешь секретный проект для спецслужб и не можешь запостить код? Тогда тебе придеться решать проблему самостоятельно.
paradise
14.06.2011, 12:54
Когда какую страницу на картинке грузить решает браузер. Используя свои телепатические способности, я вижу, что твой сервлет выдает по первому запросу первую картинку, по второму - вторую. Но первой может быть запрошена вторая картинка.

Для того чтобы тебе помочь нужно как минимум видеть то место кода, которое отвечает за вставку картинки (это у тебя странице должно быть).

Забегая вперед: можно передать параметр через URL.

Про передачу картинки из базы через сервлет могу сказать, что это уже другая проблема. Возможно ты не знаешь, что jsp компилируется в сервлет при первом обращении (или зарание) и работа получившегося сервлета ничем не отличается от сервлета созданного тобой. Стоит ли таскать картинки через два сервлета - решать тебе.
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
14.06.2011, 13:34
paradise, при внимательном взгляде станет понятно, что афтар топика и я - разные люди. В свете чего предполагать у меня наличие некой проблемы немного бестактно.
0
paradise
14.06.2011, 14:23
Souljah прими мои извинения за бестактное предположение. Все высказывания на счет телепатии адресуются афтару топега.
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57
14.06.2011, 17:46  [ТС]
и как быть ? ..........
0
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
14.06.2011, 18:17
Внести священный код в студию
0
1 / 1 / 1
Регистрация: 07.03.2011
Сообщений: 117
14.06.2011, 18:18
Может, попробовать передавать рисунки обычным потоковым вводом/выводом?
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
14.06.2011, 20:35
paradise > Souljah, если ты хочешь провести сеанс ...
Souljah > при внимательном взгляде станет понятно ...

я чуть не лопнул ))))))))))))
браво парни !!!
0
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57
15.06.2011, 13:24  [ТС]
Вот такой сервлет.
Телепатия ...
Что в нем не так ?

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
//-----------------------------------------------
 
package usf_sm;
 
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import usf_sm.page.*;
import usf_sm.storage.*;
import usf_sm.tools.Preferences;
import usf_sm.page.frames.*;
 
public class MainHandler
    extends HttpServlet /*implements SingleThreadModel*/ {
  private static final String CONTENT_TYPE = 'text/html; charset=windows-1251';
  private static final String CHARACTER_ENCODING = 'Cp1251';
  private RequestProcessor m_rp = null;
  private Vector m_legalUsers = new Vector();
  private String m_logonAddr = 'http://' + new Preferences().GetServer() + '/usf_sm/logon';
 
  //Initialize global variables
  public void init() throws ServletException {
    AbstractPage.init();
 
    // Init users !
    SysUser u = new SysUser('admin:admin', true, true);
    m_legalUsers.add(u);
    u = new SysUser('user:', true, false);
    m_legalUsers.add(u);
    u = new SysUser('guest:', true, false);
    m_legalUsers.add(u);
    //
  }
 
  //Process the HTTP Get request
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException {
    go(request, response);
  }
 
  //Process the HTTP Post request
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException {
    go(request, response);
  }
 
  public void go(HttpServletRequest request,
                 HttpServletResponse response) throws ServletException,
      IOException {
    response.setContentType(CONTENT_TYPE);
    request.setCharacterEncoding(CHARACTER_ENCODING);
    AbstractPage p = lookupPage(request, response);
//     if (p instanceof DummyPage) return;
    if (p != null) {
      p.generate();
    }
    else {
      response.getWriter().println('No reply on request ' +
                                   request.getRequestURL());
    }
  }
 
  private boolean isUserAdmin(String auth) {
    boolean ret = false;
    if (auth != null) {
      for (int i = 0; i < m_legalUsers.size(); i++) {
        SysUser u = (SysUser) m_legalUsers.get(i);
        String _userPassEncoded = auth.substring(6);
        if (u.isMe2(_userPassEncoded) == true) {
          ret = u.isAdmin();
        }
      }
    }
    return ret;
  }
 
  private boolean userAllowed(String auth) { //throws Exception {
    if (auth == null) {
      return false; // no auth
    }
 
    if (!auth.toUpperCase().startsWith('BASIC ')) {
      return false; // we only do BASIC
    }
 
    // Get encoded user and password, comes after 'BASIC '
    String userpassEncoded = auth.substring(6);
 
    // Decode it, using any base 64 decoder
    sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder();
    String userpassDecoded = '';
    try {
      userpassDecoded = new String(dec.decodeBuffer(userpassEncoded));
      System.out.println('userpassDecoded=' + userpassDecoded);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
 
    // Check our user list to see if that user and password are 'allowed'
    for (int i = 0; i < m_legalUsers.size(); i++) {
      SysUser u = (SysUser) m_legalUsers.get(i);
      if (u.isMe(userpassDecoded) == true) {
        return u.allowed();
      }
    }
    return false;
  }
 
  private boolean   e();
        break;
      case RequestProcessor.UPLOAD_PAGE:
        ret = new MainInvoker(request,response,m_rp.getParams(),false).GetUploadPage();
        break;
      case RequestProcessor.DO_UPLOAD:
        ret = new MainInvoker(request,response,m_rp.getParams(),false).DoUpload();
        break;
      case RequestProcessor.UPLOADED_DATA_PAGE:
        try {
          boolean adm = false;
          if (request.getHeader('Authorization') != null) {
            adm = isUserAdmin(request.getHeader('Authorization'));
          }
          if (!adm) {
            response.sendRedirect(m_logonAddr);
          }
          else {
            ret = new MainInvoker(request, response,m_rp.getParams(),adm).GetUploadedDataPage();
          }
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        break;
      case RequestProcessor.PREV_TEMP_DATA:
        ret = new MainInvoker(request, response,m_rp.getParams(),false).GetPrevTempData();
        break;
      case RequestProcessor.NEXT_TEMP_DATA:
        ret = new MainInvoker(request, response,m_rp.getParams(),false).GetNextTempData();
        break;
      case RequestProcessor.DELETE_TEMP_DATA:
        ret = new MainInvoker(request, response,m_rp.getParams(),false).DeleteTempData();
        break;
      case RequestProcessor.GET_PIC:
        new MainInvoker(request, response,m_rp.getParams(),false).GetPic();
        break;
      case RequestProcessor.VIEW_DWNL_DOC_PAGE:
        ret = new MainInvoker(request, response,m_rp.getParams(),false).GetViewOrDownloadDocPage();
        break;
      case RequestProcessor.APPROVE_TEMP_DATA:
        ret = new MainInvoker(request, response,m_rp.getParams(),false).ApproveTempData();
        break;
      case RequestProcessor.ADMIN_PAGE:
        try {
          boolean adm = false;
          if (request.getHeader('Authorization') != null) {
            adm = isUserAdmin(request.getHeader('Authorization'));
          }
          if (!adm) {
            response.sendRedirect(m_logonAddr);
          }
          else {
            ret = new AdminPage(request, response);
          }
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        break;
      case RequestProcessor.LOAD_OLD_DATA_PAGE:
        try {
          boolean adm = false;
          if (request.getHeader('Authorization') != null) {
            adm = isUserAdmin(request.getHeader('Authorization'));
          }
          if (!adm) {
            response.sendRedirect(m_logonAddr);
          }
          else {
            ret = new LoadOldDataPage(request, response);
          }
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        break;
      case RequestProcessor.LOAD_OLD_DATA:
        ret = new MainInvoker(request,response,m_rp.getParams(),false).LoadOldData();
        break;
      case RequestProcessor.DELETE_STORAGES_PAGE:
        try {
          boolean adm = false;
          if (request.getHeader('Authorization') != null) {
            adm = isUserAdmin(request.getHeader('Authorization'));
          }
          if (!adm) {
            response.sendRedirect(m_logonAddr);
          }
          else {
            ret = new DeleteStoragesPage(request, response);
          }
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        break;
      case RequestProcessor.DELETE_STORAGE:
        ret = new MainInvoker(request, response,m_rp.getParams(),false).DeleteStorage();
        break;
      case RequestProcessor.DELETE_WORK_DATA:
        ret = new MainInvoker(request, response,m_rp.getParams(),
0
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 124
15.06.2011, 13:58
Скажу навскидку:
в веселой функции lookupPage есть феня:
case RequestProcessor.GET_PIC:
после которой объект создается в пустоту

а вообще - шутку понял, смешно
0
0 / 0 / 0
Регистрация: 30.09.2009
Сообщений: 57
15.06.2011, 14:11  [ТС]
На первый взгляд да, в пустоту. Но дело в том, что images показываются, но периодически путается их порядок ! Вместо одного показывается другой и наоборот. А вот как выглядет GET_PIC:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  public void GetPic() {
    try {
      String fileName = (String) m_params.get('file');
      fileName = new usf_sm.tools.EnvVars().getEnv('USF_SM_ROOT') + '/' +
          fileName;
      byte[] btData = Tools.GetByteFile(fileName);
      if (btData != null) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        baos.write(btData);
        baos.writeTo(m_response.getOutputStream());
      }
    } catch (Exception e) {
      System.out.println('MainInvoker::GetPic: ' + e.getMessage());
    }
  }
//--------------------
Почему может происходить путаница ?
0
paradise
15.06.2011, 14:24
Автор, к тебе взываю...

1. Используй теги
Code
1
 и
.
2. Форматируй свой код. Люди не будут читать его в таком виде.
3. Когда тебе сказали 'запости код' это не значило 'запости весь код'. Хорошо хоть не весь проект запостил, а только один сервлет.

Теперь посмотрю твой код. Если не укачает во время чтения - попробую оказать помощь.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.06.2011, 14:24
Помогаю со студенческими работами здесь

Ошибка в сервлете
Ввожу данные и нажимаю Отправить, но выдает ошибку на сервлете :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, ранее столкнулся с проблемой ленивой...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru