|
|
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Пожалуйста не отправляйте к спец.литературе, если посчитаете данный вопрос недостойным вашего ответа., потому что даже при освоении какого то материала возникают такие вопросы, которые, мне лично легче решить в форме диалога. это к слову о том, если будут ответы - "читай как работает сервлет и т.п.". вопрос в следующем: я все время путаюсь со следующими понятиями. например мой сервлет использует какие либо переменные, ну например вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. меня интересуют ответы на такие вопросы: 1) как все это будет работать в реальности, не будет ли каких нибудь конфликтных ситуаций при обращении к потоку os? 2) я слышал что при обращении к сервлету запускается копия метода doGet в отдельном потоке? или же я ошибаюсь, запускается копия объекта сервлета? поясните пожалуйста.. пока всё.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 14:57 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
Писал сервлеты с методами doGet doPost,при выводе никаких таких конфликтных ситуций не было. возможно,на реквестах,респонзах.. но тут то что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 15:19 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
хотелось бы знать как будет разделяться переменная os между потоками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 15:38 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
и все таки, как на деле происходит? создаются отдельные потоки в которых выполняются экземпляры класса MyServlet или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 15:43 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
Экземпляр будет один! соответственно твой ос будет произвольный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 15:55 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
am_sasa"твой ос будет произвольный." как понять фразу ? ладно, значит в разных потоках будут создаваться копии метода doGet? что то как то непонятно это :( ну смилуйтесь, объясните пожалуйста, разжуйте новичку именно эту часть работы сервлета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:08 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
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 в отдельном потоке? или же я ошибаюсь, запускается копия объекта сервлета? поясните пожалуйста.. пока всё.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:13 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
unicornmirage am_sasa"твой ос будет произвольный." как понять фразу ? ладно, значит в разных потоках будут создаваться копии метода doGet? что то как то непонятно это :( ну смилуйтесь, объясните пожалуйста, разжуйте новичку именно эту часть работы сервлета. Дефолтный вариант: создаётся один экземпляр сервлета, у которого метод doGet дёргается из разных потоков обрабатывающих реквесты пользователя. Альтернативный: Для каждого реквеста создаётся новый инстанс сервлета. Что бы оживить второй вариант поведения нужно что бы сервлет имплементировал интерфейс javax.servlet.SingleThreadModel. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:16 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
Иван иванович, опять иван и коля[quot unicornmirage] Что бы оживить второй вариант поведения нужно что бы сервлет имплементировал интерфейс javax.servlet.SingleThreadModel. Вот этого точно делать не надо!!!! у сана на этот счет даже где то есть коментарий... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:19 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
авторДефолтный вариант: создаётся один экземпляр сервлета, у которого метод doGet дёргается из разных потоков обрабатывающих реквесты пользователя. Альтернативный: Для каждого реквеста создаётся новый инстанс сервлета. Что бы оживить второй вариант поведения нужно что бы сервлет имплементировал интерфейс javax.servlet.SingleThreadModel. о, спасибо, это именно то наверное что хотел услышать. т.к. я использую видимо первый дефолтный вариант, значит мне нужно синхронизировать доступ к моим переменным var1 и os, чтобы другие их не испортили. так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:20 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
am_sasa Иван иванович, опять иван и коля[quot unicornmirage] Что бы оживить второй вариант поведения нужно что бы сервлет имплементировал интерфейс javax.servlet.SingleThreadModel. Вот этого точно делать не надо!!!! у сана на этот счет даже где то есть коментарий... Покажи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:21 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. нельзя обявлять глобальные переменные в сервлете, если они не являются константами. Правильно будет так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:23 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
авторнельзя обявлять глобальные переменные в сервлете, если они не являются константами. Правильно будет так ага, теперь картина еще больше проясняется.. :) как то даже и светлее на душе становится! хорошо, а вот если такой вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. как будет работать метод NetTools.filter(os)? если например несколько потоков обращаются к этому методу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:31 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
т.е. другие потоки будут ждать, пока метод NetTools.filter не освободится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:33 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
Петр петрович, опять пётр и васяПокажи. не покажу... не помню где, но это вроде известный факт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:36 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
unicornmirage Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. это намана!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:38 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
если сделать так: Код: plaintext 1. 2. 3. то будут ждать, а если без synchronized - будет драка между потоками, т.е. нельзя так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 16:41 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
автор если сделать так: Код: plaintext 1. 2. 3. то будут ждать, а если без synchronized - будет драка между потоками, т.е. нельзя так. хех, так за что они будут драться? os - поток то создается внутри метода doGet! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 18:47 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
в принципе почему я заговорил об классе NetTools, сейчас я использую статический метод filter, так может его лучше не делать статическим? чтобы не было проблем с потоками? и экземпляр NetTools тоже создавать внутри doGet. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 18:55 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
unicornmirage автор если сделать так: Код: plaintext 1. 2. 3. то будут ждать, а если без synchronized - будет драка между потоками, т.е. нельзя так. хех, так за что они будут драться? os - поток то создается внутри метода doGet! Я невнимательно посмотрел этот код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. он действительно будет корректно работать и без synchronized. авторв принципе почему я заговорил об классе NetTools, сейчас я использую статический метод filter, так может его лучше не делать статическим? чтобы не было проблем с потоками? и экземпляр NetTools тоже создавать внутри doGet. Если в классе NetTools не планируется никаких не статических полей, то можно оставить все как есть. А какие такие проблемы с потоками? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 19:02 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
wessenесли сделать так: Код: plaintext 1. 2. 3. то будут ждать, а если без synchronized - будет драка между потоками, т.е. нельзя так. Драки не будет, если из этого метода обращается только к потокобезопасному коду или не обращаться к нему совсем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 19:03 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
авторЕсли в классе NetTools не планируется никаких не статических полей, то можно оставить все как есть. А какие такие проблемы с потоками? дело в том что пытаюсь одновременно понять как работают сервлеты с этой своей многопоточностью и одновременно разработать нормальную архитектуру классов, поэтому вопрос "о проблеме с потоками" поставил несколько гипотетически, зная что вообще это сложный вопрос. т.к. все равно на практике будет проверяться, но хотелось бы и хорошенько избавится от пробелов в познании. а форум, на мой взгляд - прекрасное средство от этого. :)) какие думал я могут быть проблемы - я их изложил в начале темы. в ответах нашел, что лучше не исп-ть глобальные переменные в сервлете. теперь буду думать дальше. конечно можете ругать, но я делаю сайт, где шаблоны страниц (вернее элементы тегов) хранятся у меня в программе в специальных классах, типа NetTools. а так как наполнение сайта зависит от авторизации пользователя, то я просто боюсь, что какой нибудь поток другой сессии изменит страницу, отправляемую пользователю другой сессии. вот :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 19:15 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
автордело в том что пытаюсь одновременно понять как работают сервлеты с этой своей многопоточностью а может сначала разобраться просто с многопоточностью, без всяких там сервлетов ?? А? вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. и эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем, эксперементируем.......... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 19:23 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
автора может сначала разобраться просто с многопоточностью, без всяких там сервлетов ?? А? как это безо всяких сервлетов??? а чем сервлеты не эксперимент. тем более, что касается потоков, согласен - поле для экспериментов обширное. но уж основные концепции - как то доступ к разделяемому объекту - немного знакомы. а вот как это работает у сервлетов - было темное дело. то ли объект запускается в потоке, то ли метод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2005, 22:48 |
|
||
|
как работают сессии у сервлета
|
|||
|---|---|---|---|
|
#18+
unicornmirage автора может сначала разобраться просто с многопоточностью, без всяких там сервлетов ?? А? как это безо всяких сервлетов??? а чем сервлеты не эксперимент. тем более, что касается потоков, согласен - поле для экспериментов обширное. но уж основные концепции - как то доступ к разделяемому объекту - немного знакомы. а вот как это работает у сервлетов - было темное дело. дело в том, что просто многопоточность (без сервлетов) это фундамент, а фундамент как известно, должень быть прочным, очень прочным. И если бы ты этот "фундамент" освоил, то вот таких замечательных вопросов - "то ли объект запускается в потоке, то ли метод." не задавал бы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2005, 10:57 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33321300&tid=2151243]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
160ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 471ms |

| 0 / 0 |
