Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> многопоточность сервлетов, непонятное выполнение сервлетов 
:(
    Опции темы
d1nam1k
Дата 3.7.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Доброе время суток, уважаемые форумцы!

Изучаю на даный момент технологию сервлетов по книге Буди Курнявана " создание веб-приложений на языке Java с помощью сервлетов, JSP и EJB" . 
В книге демонстрируется пример многопоточности выполенения сервлета. 
Это демонстрация сервлета , не поддерживающего многопоточность.

Код сервлета : 

Код


import javax.servlet.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.PrintWriter;


public class SingleThreadServlet extends GenericServlet {
    
    public void service(javax.servlet.ServletRequest servletRequest, javax.servlet.ServletResponse servletResponse) throws javax.servlet.ServletException, java.io.IOException {
    
        int counter;
        counter = 0;
        
        try {
            BufferedReader reader = new BufferedReader (new FileReader("counter.txt"));    
            counter = Integer.parseInt(reader.readLine());
            reader.close();
        }
        catch(Exception e) {
            
        }
        
        
        counter++;
        try {
            Thread thread = new Thread();
            thread.sleep(6000);
        }
        catch (InterruptedException e){
            
        }
        
        
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter("counter.txt"));
            writer.write(Integer.toString(counter));
            writer.close();
        }
        catch(Exception e) {
            
        }

        try {
            PrintWriter print = servletResponse.getWriter();
            print.println("You are visitor number : "+counter);
            
        }
        catch(Exception e){
            
        }
        
    }
    
    
}
 

и говорится "откройте два браузера и запросите быстро один и тот же сервлет. Вы получите одинаковые значения в браузерах." 

Ок. я так и сделал . Но в итоге когда загружаю два браузера 
 - Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0
то получается два результата с разницей в единицу.
А если запускаю на Internet Explorer 6.0 то получаю два одинаковых результата. 
Это первая проблема.
А вторая проблема в том , что  если этот класс будет реализовывать интерфейс SingleThreadModel 

Код

public class SingleThreadServlet extends GenericServlet implements SingleThreadModel


до этого было : 

Код

public class SingleThreadServlet extends GenericServlet 


, то разницы вообще не замечается.. между тем что класс реализует интерфейс поточности или не реализует.

Буду благодарен за содействующую помощь. 

Дима.   

Это сообщение отредактировал(а) d1nam1k - 3.7.2006, 23:27
PM MAIL   Вверх
d_k
Дата 4.7.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 20.7.2004

Репутация: 1
Всего: 1



Выкинь нафик эту книжку.
Цитата(d1nam1k @  3.7.2006,  23:24 Найти цитируемый пост)
откройте два браузера и запросите быстро один и тот же сервлет
 - смешно. Пошлите 2 запроса в промежуток между тактами smile)
1. Дело в том что сервлеты открывют потоки ввода вывода.
Эксепшины ты не отлавливаешь, просто съедаешь. Если файл занят - то эксепшин вылетит, но проглотится. Результат просто непредсказуем! Успел - не успел! Итого получится и одинаковые и разные значения в зависимости от того - используется ли ресурс или нет!
2. Если имплементировать SingleThreadModel то запускается только 1 инстанс сервлета и он и обслуживает клиентов. Тут должно быть всегда увеличение на 1-цу без эксепшинов

Добавлено @ 10:11 
Кстати работать с нитками в сервлетах не очень то рекоммендуется. 
PM MAIL   Вверх
d1nam1k
Дата 4.7.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Цитата(d_k @ 4.7.2006,  10:09)
Выкинь нафик эту книжку.
Цитата(d1nam1k @  3.7.2006,  23:24 Найти цитируемый пост)
откройте два браузера и запросите быстро один и тот же сервлет
 - смешно. Пошлите 2 запроса в промежуток между тактами smile)
1. Дело в том что сервлеты открывют потоки ввода вывода.
Эксепшины ты не отлавливаешь, просто съедаешь. Если файл занят - то эксепшин вылетит, но проглотится. Результат просто непредсказуем! Успел - не успел! Итого получится и одинаковые и разные значения в зависимости от того - используется ли ресурс или нет!
2. Если имплементировать SingleThreadModel то запускается только 1 инстанс сервлета и он и обслуживает клиентов. Тут должно быть всегда увеличение на 1-цу без эксепшинов

Добавлено @ 10:11 
Кстати работать с нитками в сервлетах не очень то рекоммендуется.

ну вообще попасть между тактами это анрил smile 
но для этого вроде и прописалась 6 секундная задержкав нужном месте. 

1. т.е. когда первый сервлет вылопнил чтение и увеличения каунтера и ждет 6 сек то в это время запускается второй сервлет и выполняет пункт 1 и 2 . потом первый сервоет записывает и возвращает клиенту каунтер. тогда и второй , после 6 секундной задержки , должен вернуть тоже самое значение , но возвращает на 1 больше. Но он же считывал тоже значение каунтера что и первый сервлет ...
 
2. допустим оно так работает , но при реализации \ не реализации интерфейса SingleThreadServlet - никакой разницы не наблюдается.. при реализации этого интерфейса сервлет как бы должен выстраивать в очередь все запросы и выполнять по очереди ... но например на Екплорере выдает одно и то же значение при любом раскладе реализации\не реализации однопоточности . почему? в тоже время когда на firefox-e выдает на 1 больше тоже при любых расскладах реализации\не реализации. 

 
PM MAIL   Вверх
d_k
Дата 4.7.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 20.7.2004

Репутация: 1
Всего: 1



Эмм. Нарыл случайно
вот 
PM MAIL   Вверх
d1nam1k
Дата 6.7.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



спасибо!

довольно интересная статейка. 
мда... автором книги было явно выбран неудачный пример для демонстрации многопоточности...

чтобы  разобратся с многопоточностью в Java что Вы можете посоветовать?
 
PM MAIL   Вверх
d_k
Дата 7.7.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 20.7.2004

Репутация: 1
Всего: 1



Местного фака вполне достаточно, чтобы начать... ;) 
PM MAIL   Вверх
d1nam1k
Дата 7.7.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



"местный фак" всмысле этот топик ?

З.Ы. : у меня маленький вопрос , я вообще хотел идти в направление Java+Servlets+базы данных.

но мне предложили работу javascript+дизайновые мутки+ возможно писать на Ява+возможно на будущее ajax 

что вы посоветуете ? оставатся при своей идеи и идти непонятными шагами не зная толком к чему стремится или начать хоть как работать со второй работой через некоторое время когда с этим разберусь ? 

Заранее спасибо огромное! 
PM MAIL   Вверх
carper
Дата 7.7.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 2
Всего: 8



d1nam1k
Не мое дело лезть с советами в таком тонком деле, но IMHO "Java+Servlets+базы данных", вполне даже тянут за собой - "клиентам надоело слушать рекламу они хотят чтобы их интерфейс не выглядел как в 1985 году и работал быстро", а это тянет за собой аплеты (все реже) и/или AJAX (не единственный свет в окошке, но пока наиболее модный).

AJAX гордо демонстрирует свои преимущества перспективной, но крайне сырой технологии (в плане реализации), а это (сырость) тянет за собой изучение javascript (не обязательно в совершенстве, честно говоря, IMHO его единственное достоинство - это универсальность поддержки браузерами (тоже не полная совместимость, кстати), а так редкое убожество) и XML.
javascript не имеет никакого смысла (в нашем случае), если не взаимодействует с экранными элементами, а это тянет за собой изучение DHTML (опять же не на уровне дизайнер!!!).

В жирных мозгах некоторых неумных работодателей это почему-то тесно начинает ассоциироваться, с тем, что и "на швейной машике могешь!" и человека пытаются заставить выполнять работу web- дизайнера. Вот на этом этапе я бы крепко уперся рогом и уже решал кем быть.  smile

Для хорошего дизайнера придется изучить уйму интересных вещей не имеющих не малейшего отношения к программированию, для начала, рекомендую закончить хотя бы хорошую художественную школу с отличными оценками, не помешают также знания психологии восприятия (не на уровне основ, разумеется), собственные дизайнерские работы, участие хотя бы в паре дизанерских/художественных выставок ну и т.д. и т.п.. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.