Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Исключение в клиент-сервере


Автор: lihusha 1.7.2009, 01:35
Здравствуйте , уважаемые!

Помогите , пожалуйста , решить проблемку.

Есть клиент-серверное приложение. Клиент -- апплет, сервер -- сервлет под томкатом.

На некотором этапе работы приложения клиент отправляет запрос с параметрами

Код

//serverUrl -- String
URL server = new URL(serverUrl)
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
String data = URLEncoder.encode("mode", "UTF-8") + "=" + URLEncoder.encode("read", "UTF-8");
//time -- String(один из параметров запроса)
data += "&" + URLEncoder.encode("time", "UTF-8") + "=" + URLEncoder.encode(time, "UTF-8");
writer.write(data);
writer.flush();
writer.close();


сервер получает параметры. В зависимости от первого параметра -- mode он выполняет те или иные действия с вторым параметром -- time.
Затем -- отправляет ответ.

Код

String mode = URLDecoder.decode(request.getParameter("mode"), "UTF-8");
String time =  URLDecoder.decode(request.getParameter("time"), "UTF-8");
if(mode.equals("read"))
{
   .....
   SomeClass someObject = new SomeClass();
   String someData = someObject.getData(time);
   String encodeData = URLEncoder.encode(someData, "UTF-8");
   OutputStreamWriter = new OutputStreamWriter(response.getOutputStream());
   writer.write(encodeData);
   writer.flush();
   writer.close();

}
else if(mode.equals"write")
{
   .....
   SomeClass someObject = new SomeClass();
   someObject.setData(time);
   
   OutputStreamWriter = new OutputStreamWriter(response.getOutputStream());
   writer.write("OK");
   writer.flush();
   writer.close();
   
}



теперь принимает клиент

Код

URL server = new URL(serverUrl);
HttpURLConnection = (HttpURLConnection)server.openConnection();
InputStreamReader reader = new InputStreamReader(connection.getInputStream());
int read = 0;
String encodeMessages = "";
for (; (read = reader.read()) != -1;)
    {
         encodeMessages += (char) read;
    }
reader.close();
String decodeMessages = URLDecoder.decode(encodeMessages, "UTF-8");



суть вопроса : при загрузке в Mozilla и IE апплет работает нормально , в Opera же в коде выше (самый нижний блок) , возникает исключение IOException

Что не так ?

Автор: Samotnik 1.7.2009, 09:59
текст исключения какой ?
я всего лишь могу предположить, что объект reader либо пустой, либо неправильно сформирован. 
Выложите код ошибки и результаты дебага, пажалста, тогда можно будет вам помочь

Автор: lihusha 1.7.2009, 11:14
Все , что я мог сделать , извлекая исключение , это  вставить  текст исключения в текстовое поле апплета
Код

//IOException e ;
text.setText(e.getMessage);



на выходе получился адрес сервера

правильно ли я мониторю исключение ?
если нет , подскажите , пжлст, как это сделать ?

Автор: Samotnik 1.7.2009, 12:30
Цитата(lihusha @  1.7.2009,  11:14 Найти цитируемый пост)
Все , что я мог сделать , извлекая исключение , это  вставить  текст исключения в текстовое поле апплета

а в консоли какой текст исключений ?

Автор: lihusha 1.7.2009, 13:06
В консоли ничего -- приложение находится на хостинге, аплет запускается в браузере, если я не ошибаюсь , консоль тут не при чем.
Если ошибаюсь -- буду рад , если научите использовать консоль в данной ситуации

Автор: lihusha 1.7.2009, 15:26
Исключение возникает именно в этой строчке

Код

InputStreamReader reader = new InputStreamReader(connection.getInputStream());

Автор: Samotnik 2.7.2009, 09:28
Цитата(lihusha @  1.7.2009,  15:26 Найти цитируемый пост)
Исключение возникает именно в этой строчке

значит тут и ошибка  smile 
Ну как вы планируете найти ошибку, если не можете даже полный стэктрэйс ексепшена увидеть ? 
Я так пологая и продеббажить вы тоже не можете ? 
Тогда хотя бы выведите на экран значение connection.getInputStream() и посмотрите что в нем происходит. 
Проблема в том, что не может создаться InputStreamReader reader , т.е. в конструктор к нему попадают не нужные данные, а левые. 

Автор: lihusha 2.7.2009, 18:39
Samotnik, а можно вопрос совсем уж начинающего ?
Как можно мониторить апплет , когда он уже запущен в веб-приложении , а  не в отладчике , где есть консоль , и где можно сделать хотя бы так 
Код

System.out.println(requiredData);



Мне приходит на ум только один способ -- вставить данные , которые необходимо промониторить , в текстовое поле апплета.

Автор: Samotnik 2.7.2009, 19:15
lihusha,  а как ты вообще запускаешь свое приложение ?   С консоли ? или с  ИДЕ ?

Автор: lihusha 2.7.2009, 19:38
С IDE

Автор: Samotnik 2.7.2009, 19:44
lihusha,  smile 
какой иде ???
я из тебя по слову вытягивать буду ? smile   
Опиши проблему максимально, на сколько только можно ее описать
На счет консоли, она есть во всех ИДЕ, которыми я пользовался  
IDEA, NetBeans, Eclipse, JCreator
в них есть консоли, куда пишутся все ексепшены и логирование (если оно есть в твоем приложении) посмотря в консоль - ты сможешь увидеть точную ошибку и точное место, где она присходит - а дальше дело техники
Цитата(lihusha @  2.7.2009,  18:39 Найти цитируемый пост)
можно сделать хотя бы так 
Выделить всёкод Java
1:
    
System.out.println(requiredData);

Так нужно сделать  smile   Вот напиши это и в консольку загляни, там увидиш свое значение   smile 

Автор: COVD 2.7.2009, 19:55
Цитата

Как можно мониторить апплет , когда он уже запущен в веб-приложении , а  не в отладчике , где есть консоль , и где можно сделать хотя бы так 

У апплета, работающего в браузере, есть своя консоль (консоль java-plugin'а). Чтобы она всегда открывалась при старте апплета надо убедиться, что она включена в настройках java-plugin. В виндоуз:  Start -> ControlPanel -> Java -> Advanced -> JavaConsole -> Show console.

Автор: lihusha 2.7.2009, 19:59
IDE - NetBeans. 
Когда я тестирую апплет в вивере, где могу просмотреть консоль, все нормально , никаких исключений не возникает .
Когда апплет загружен Mozilla или IE , тоже все нормально , а вот в Opera возникает исключение. 






Автор: Samotnik 2.7.2009, 20:06
http://publib.boulder.ibm.com/infocenter/wasinfo/v4r0/index.jsp?topic=/com.ibm.websphere.v4.doc/olt_content/debugger/tasks/tbwdaplt.htm
нужно смотреть: что туда приходит - иначе гадать нету смысла

Автор: lihusha 2.7.2009, 20:09
Цитата

У апплета, работающего в браузере, есть своя консоль (консоль java-plugin'а). Чтобы она всегда открывалась при старте апплета надо убедиться, что она включена в настройках java-plugin. В виндоуз:  Start -> ControlPanel -> Java -> Advanced -> JavaConsole -> Show console.


этого я не знал , спасибо

Добавлено через 1 минуту и 58 секунд
Цитата

нужно смотреть: что туда приходит - иначе гадать нету смысла


может ли быть это исключение проблемой оперы ?

Автор: Samotnik 2.7.2009, 20:37
Цитата(lihusha @  2.7.2009,  20:09 Найти цитируемый пост)
может ли быть это исключение проблемой оперы ?

Безусловно.   Это вполне возможно.  Нужно продебажить, чтобы быть уверенным  smile 

Автор: lihusha 2.7.2009, 21:24
Это уже хоть что-то.
Не может найти файл , похоже.

Код

java.io.FileNotFoundException: http://localhost:8084/Chat/Server


Но это только в опере.
Как такое может быть ?..
При запуске апплета в других браузерах все нормально.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)