powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как работают сессии у сервлета
29 сообщений из 29, показаны все 2 страниц
как работают сессии у сервлета
    #33320254
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Пожалуйста не отправляйте к спец.литературе, если посчитаете данный вопрос недостойным вашего ответа., потому что даже при освоении какого то материала возникают такие вопросы, которые, мне лично легче решить в форме диалога. это к слову о том, если будут ответы - "читай как работает сервлет и т.п.".
вопрос в следующем:
я все время путаюсь со следующими понятиями. например мой сервлет использует какие либо переменные, ну например вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 public   class  MyServlet  extends  HttpServlet {
//переменная 1
 private   int  var;

//общий поток вывода
OutputStream os;

 public   void  doGet(...)  throws  ...{
os = response.getOutputStream();
os.write(...);
os.flush();
os.close();

}
}

меня интересуют ответы на такие вопросы:
1) как все это будет работать в реальности, не будет ли каких нибудь конфликтных ситуаций при обращении к потоку os?
2) я слышал что при обращении к сервлету запускается копия метода doGet в отдельном потоке? или же я ошибаюсь, запускается копия объекта сервлета? поясните пожалуйста..
пока всё..
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320343
1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писал сервлеты с методами doGet doPost,при выводе никаких таких конфликтных ситуций не было.
возможно,на реквестах,респонзах.. но тут то что?
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320429
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотелось бы знать как будет разделяться переменная os между потоками
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320453
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и все таки, как на деле происходит? создаются отдельные потоки в которых выполняются экземпляры класса MyServlet или как?
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320491
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Экземпляр будет один! соответственно твой ос будет произвольный...
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320562
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
am_sasa"твой ос будет произвольный."
как понять фразу ?

ладно, значит в разных потоках будут создаваться копии метода doGet? что то
как то непонятно это :( ну смилуйтесь, объясните пожалуйста, разжуйте новичку именно эту часть работы сервлета.
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320574
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unicornmirage
public class MyServlet extends HttpServlet {
//переменная 1
private int var;

//общий поток вывода
OutputStream os;

public void doGet(...) throws ...{
os = response.getOutputStream();
// вот тута запрос первого ползователь,
//в этот момент его сняли с процессора и к твоему сервлету обратился другой пользователь и в ос записан его оутпут
// и его тоже погнали на ... с процессора
os.write(...);
// а тута вернули на процессор старого пользователя и он послал данные на деревню дедушке
os.flush();
os.close();

}
}
[/src]
меня интересуют ответы на такие вопросы:
1) как все это будет работать в реальности, не будет ли каких нибудь конфликтных ситуаций при обращении к потоку os?
2) я слышал что при обращении к сервлету запускается копия метода doGet в отдельном потоке? или же я ошибаюсь, запускается копия объекта сервлета? поясните пожалуйста..
пока всё..
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320589
unicornmirage am_sasa"твой ос будет произвольный."
как понять фразу ?

ладно, значит в разных потоках будут создаваться копии метода doGet? что то
как то непонятно это :( ну смилуйтесь, объясните пожалуйста, разжуйте новичку именно эту часть работы сервлета.

Дефолтный вариант:
создаётся один экземпляр сервлета, у которого метод doGet дёргается из разных потоков обрабатывающих реквесты пользователя.

Альтернативный:
Для каждого реквеста создаётся новый инстанс сервлета.

Что бы оживить второй вариант поведения нужно что бы сервлет имплементировал интерфейс javax.servlet.SingleThreadModel.
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320595
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иван иванович, опять иван и коля[quot unicornmirage]
Что бы оживить второй вариант поведения нужно что бы сервлет имплементировал интерфейс javax.servlet.SingleThreadModel.
Вот этого точно делать не надо!!!! у сана на этот счет даже где то есть коментарий...
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320599
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДефолтный вариант:
создаётся один экземпляр сервлета, у которого метод doGet дёргается из разных потоков обрабатывающих реквесты пользователя.

Альтернативный:
Для каждого реквеста создаётся новый инстанс сервлета.

Что бы оживить второй вариант поведения нужно что бы сервлет имплементировал интерфейс javax.servlet.SingleThreadModel.

о, спасибо, это именно то наверное что хотел услышать. т.к. я использую видимо первый дефолтный вариант, значит мне нужно синхронизировать доступ к моим переменным var1 и os, чтобы другие их не испортили. так?
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320603
am_sasa Иван иванович, опять иван и коля[quot unicornmirage]
Что бы оживить второй вариант поведения нужно что бы сервлет имплементировал интерфейс javax.servlet.SingleThreadModel.
Вот этого точно делать не надо!!!! у сана на этот счет даже где то есть коментарий...

Покажи.
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320613
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 public   class  MyServlet  extends  HttpServlet {
//переменная 1
 private   int  var;

//общий поток вывода
OutputStream os;

 public   void  doGet(...)  throws  ...{
os = response.getOutputStream();
os.write(...);
os.flush();
os.close();

}
}

нельзя обявлять глобальные переменные в сервлете, если они не являются константами. Правильно будет так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 public   class  MyServlet  extends  HttpServlet {


 public   void  doGet(...)  throws  ...{
//переменная 1
 private   int  var;

//общий поток вывода
OutputStream os;

os = response.getOutputStream();
os.write(...);
os.flush();
os.close();

...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320645
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторнельзя обявлять глобальные переменные в сервлете, если они не являются константами. Правильно будет так

ага, теперь картина еще больше проясняется.. :) как то даже и светлее на душе становится!
хорошо, а вот если такой вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 class  NetTools {
     public   static  String filter(OutputStream os) {
           //здесь он что то пишет в поток os 
    }

}



 class  MyServlet  extends  HttpServlet {

 public   void  doGet(...)  throws  ... {
OutputStream os = response.getOutputStream();
NetTools.filter(os);
...
os.flush();
os.close();

}
}

как будет работать метод NetTools.filter(os)? если например несколько потоков обращаются к этому методу?
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320648
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. другие потоки будут ждать, пока метод NetTools.filter не освободится?
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320666
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Петр петрович, опять пётр и васяПокажи. не покажу... не помню где, но это вроде известный факт
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320677
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
unicornmirage
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 class  NetTools {
     public   static  String filter(OutputStream os) {
           //здесь он что то пишет в поток os 
    }

}



 class  MyServlet  extends  HttpServlet {

 public   void  doGet(...)  throws  ... {
OutputStream os = response.getOutputStream();
NetTools.filter(os);
...
os.flush();
os.close();

}
}

это намана!!!
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33320692
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если сделать так:

Код: plaintext
1.
2.
3.
 public   static   synchronized  String filter(OutputStream os) {
           //здесь он что то пишет в поток os 
    }

то будут ждать, а если без synchronized - будет драка между потоками, т.е. нельзя так.
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33321067
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
если сделать так:


Код: plaintext
1.
2.
3.
public static synchronized String filter(OutputStream os) {
           //здесь он что то пишет в поток os 
    }

то будут ждать, а если без synchronized - будет драка между потоками, т.е. нельзя так.

хех, так за что они будут драться? os - поток то создается внутри метода doGet!
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33321092
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в принципе почему я заговорил об классе NetTools, сейчас я использую статический метод filter, так может его лучше не делать статическим? чтобы не было проблем с потоками? и экземпляр NetTools тоже создавать внутри doGet.
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33321107
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage автор
если сделать так:


Код: plaintext
1.
2.
3.
public static  String filter(OutputStream os) {
           //здесь он что то пишет в поток os 
    }

то будут ждать, а если без synchronized - будет драка между потоками, т.е. нельзя так.

хех, так за что они будут драться? os - поток то создается внутри метода doGet!

Я невнимательно посмотрел этот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 class  NetTools {
     public   static  String filter(OutputStream os) {
           //здесь он что то пишет в поток os 
    }

}



 class  MyServlet  extends  HttpServlet {

 public   void  doGet(...)  throws  ... {
OutputStream os = response.getOutputStream();
NetTools.filter(os);
...
os.flush();
os.close();

}
}

он действительно будет корректно работать и без synchronized.

авторв принципе почему я заговорил об классе NetTools, сейчас я использую статический метод filter, так может его лучше не делать статическим? чтобы не было проблем с потоками? и экземпляр NetTools тоже создавать внутри doGet.

Если в классе NetTools не планируется никаких не статических полей, то можно оставить все как есть.
А какие такие проблемы с потоками?
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33321113
wessenесли сделать так:

Код: plaintext
1.
2.
3.
 public   static   synchronized  String filter(OutputStream os) {
           //здесь он что то пишет в поток os 
    }

то будут ждать, а если без synchronized - будет драка между потоками, т.е. нельзя так.

Драки не будет, если из этого метода обращается только к потокобезопасному коду или не обращаться к нему совсем :)
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33321133
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли в классе NetTools не планируется никаких не статических полей, то можно оставить все как есть.
А какие такие проблемы с потоками?
дело в том что пытаюсь одновременно понять как работают сервлеты с этой своей многопоточностью и одновременно разработать нормальную архитектуру классов, поэтому вопрос "о проблеме с потоками" поставил несколько гипотетически, зная что вообще это сложный вопрос. т.к. все равно на практике будет проверяться, но хотелось бы и хорошенько избавится от пробелов в познании. а форум, на мой взгляд - прекрасное средство от этого. :))
какие думал я могут быть проблемы - я их изложил в начале темы. в ответах нашел, что лучше не исп-ть глобальные переменные в сервлете. теперь буду думать дальше.
конечно можете ругать, но я делаю сайт, где шаблоны страниц (вернее элементы тегов) хранятся у меня в программе в специальных классах, типа NetTools. а так как наполнение сайта зависит от авторизации пользователя, то я просто боюсь, что какой нибудь поток другой сессии изменит страницу, отправляемую пользователю другой сессии. вот :)
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33321141
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордело в том что пытаюсь одновременно понять как работают сервлеты с этой своей многопоточностью

а может сначала разобраться просто с многопоточностью, без всяких там сервлетов ?? А?


вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 class  MyThread  implements  Runnable{

  .......
   public   void  run(){
     .......
  }

}

 class  Main{

.... main(.....){
         for (....){
             new  MyThread(....);
        }
   }
}



и эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем..........
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33321300
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора может сначала разобраться просто с многопоточностью, без всяких там сервлетов ?? А?

как это безо всяких сервлетов??? а чем сервлеты не эксперимент. тем более, что касается потоков, согласен - поле для экспериментов обширное. но уж основные концепции - как то доступ к разделяемому объекту - немного знакомы. а вот как это работает у сервлетов - было темное дело. то ли объект запускается в потоке, то ли метод.
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33321882
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirage автора может сначала разобраться просто с многопоточностью, без всяких там сервлетов ?? А?

как это безо всяких сервлетов??? а чем сервлеты не эксперимент. тем более, что касается потоков, согласен - поле для экспериментов обширное. но уж основные концепции - как то доступ к разделяемому объекту - немного знакомы. а вот как это работает у сервлетов - было темное дело.

дело в том, что просто многопоточность (без сервлетов) это фундамент, а фундамент как известно, должень быть прочным, очень прочным. И если бы ты этот "фундамент" освоил, то вот таких замечательных вопросов - "то ли объект запускается в потоке, то ли метод." не задавал бы :)
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33322319
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордело в том, что просто многопоточность (без сервлетов) это фундамент, а фундамент как известно, должень быть прочным, очень прочным. И если бы ты этот "фундамент" освоил, то вот таких замечательных вопросов - "то ли объект запускается в потоке, то ли метод." не задавал бы :)

Ну смотри, поясню что имел ввиду. Как я понмаю, если объект запускается в потоке: он наследует интерфейс Runnable или наследуется от Thread

А метод запускается в потоке (конечно формулировку привел кривоватую) вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 class  MyClass {
    static   void  foo() {
   }
}


 class  MyThread  implements  Runnable {

    public  MyThread(MyClass) {
   }

    void  run() {
        MyClass.foo();
          
   }
}

разве нет?
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33322328
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоесть если возвратиться к вопросу как запускается doGet сервлета, то как тут народ говорит, есть какой то поток, порожденный сессией (ну не знаю как это объяснить), и ему передается ссылка на метод doGet. я правильно понял?
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33322488
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unicornmirageтоесть если возвратиться к вопросу как запускается doGet сервлета, то как тут народ говорит, есть какой то поток, порожденный сессией (ну не знаю как это объяснить), и ему передается ссылка на метод doGet. я правильно понял?

ссылка на метод передаться не может, Правильно сказать так - создается поток и ему передаётся ссылка на объект(ы) и уже в потоке, а именно в методе run, происходит вызов методов того самого объекта(ов), которые этому потоку передавались. И всетаки, советую почитать какую нить книгу для начала. Терпения, объяснять на пальцах элементарщину не у многих тут хватит, у меня оно уже заканчивается.
...
Рейтинг: 0 / 0
как работают сессии у сервлета
    #33322537
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторссылка на метод передаться не может, Правильно сказать так - создается поток и ему передаётся ссылка на объект(ы) и уже в потоке, а именно в методе run, происходит вызов методов того самого объекта(ов), которые этому потоку передавались. И всетаки, советую почитать какую нить книгу для начала. Терпения, объяснять на пальцах элементарщину не у многих тут хватит, у меня оно уже заканчивается.
я помоему объяснил уже, что просто не правильно сформулировал, хотя мы говорим об одном и томже.
ладно, спасибо за проявленное внимание. почитаем...
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / как работают сессии у сервлета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]