|
|
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
Добрый день! У меня возникли вопросы по поводу поведения сервлета. Когда мы отправляем request на томкат, в томкате есть контэйтенер который обратывает каждый запрос ,этот контэйтенер смотрит web.xml и если находит сервлет , то создает instance этого сервлета,правильно? И этот процесс повторяется на каждый request ? И еще говорят что создается thread , кто создает thread ? Второй вопрос: допустим есть сервлет который вытаскивает данные из базы данных и показывает на браузере. Для этого я в сервлете загружаю драйвер(Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")) , создаю соединение и вытаскиваю данные и закрываю соединение. То есть практически на каждый request сервлет загружает драйвер, создает соединение и закрывает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 10:05:20 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
откройте для себя connection pool: http://en.wikipedia.org/wiki/Connection_pool ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 10:30:11 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
gunnerто создает instance этого сервлета,правильно? Ну, а как вообще без экземпляра? Вообще спека вроде не особо декларирует время создания. Главное когда вызывается метод init(). gunnerИ этот процесс повторяется на каждый request ? Обычно нет. Есть SingleThreadModel, но он крайне редко используется. gunnerИ еще говорят что создается thread , кто создает thread ? Контейнер создаёт. Но не на каждый запрос. А использует пул. SingleThreadModel тоже, скорее всего, испольщзует пул для экземпляров. gunnerВторой вопрос: допустим есть сервлет который вытаскивает данные из базы данных и показывает на браузере. Для этого я в сервлете загружаю драйвер(Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")) , создаю соединение и вытаскиваю данные и закрываю соединение. То есть практически на каждый request сервлет загружает драйвер, создает соединение и закрывает ? Да. Для решения этой проблемы есть DataSource, который вы конфигурируете один раз в контейнере. А приложение его использует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 10:30:51 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
Спасибо ,Blazkowicz Это значит при запуске томката один раз создается соединение с бд и все экземпляры сервлетов исползуют это соединение? То есть соединение с базой создается при запуске томката на уровне application scope? Насчет scope , я так понял что есть три scope'а: page scope, session scope и application scope. Если какой то экземпляр сервлета создается на уровне application scope то этот экземпляр видят все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 10:44:34 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
gunnerЭто значит при запуске томката один раз создается соединение с бд и все экземпляры сервлетов исползуют это соединение? Это сильно зависит от того куда вы в сервлете свой код запхали. Это раз. Сервлеты не могут использовать соединение одновременно. JDBC не thread safe. Это два. Читайте про пул. [quot gunner] То есть соединение с базой создается при запуске томката на уровне application scope? [quot gunner] В вашем случае или в случае DataSource? DataSource обычно вообще server scope конфигурируют. Но при желании можно и к приложению привязать. gunnerНасчет scope , я так понял что есть три scope'а: page scope, session scope и application scope. Если какой то экземпляр сервлета создается на уровне application scope то этот экземпляр видят все. Это отдельная тема хранения данных\атрибутов\настроек соединение с БД лучше к ней не приплетать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 10:53:01 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНу, а как вообще без экземпляра? Вообще спека вроде не особо декларирует время создания. Главное когда вызывается метод init(). В спеке как раз все подробно. Экземпляр создается при первом обращении или сразу если указать <load-on-startup>. BlazkowiczgunnerИ этот процесс повторяется на каждый request ? Обычно нет. Есть SingleThreadModel, но он крайне редко используется. SingleThreadModel тут не причем. Этот процесс выполняется только один раз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 11:15:10 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
ТимоНВ спеке как раз все подробно. Экземпляр создается при первом обращении или сразу если указать <load-on-startup>. Да, ну? Не хочешь привести цитаты подверждающие твоё мнение? Вот то о чем я говою. Когда создаётся экземпляр: Loading and InstantiationThe servlet container is responsible for loading and instantiating servlets. The loading and instantiation can occur when the container is started, or delayed until the container determines the servlet is needed to service a request. When the servlet engine is started, needed servlet classes must be located by the servlet container. The servlet container loads the servlet class using normal Java class loading facilities. The loading may be from a local file system, a remote file system, or other network services. After loading the Servlet class, the container instantiates it for use. Как load-on-startup связан с экземплярами: Assembling the descriptor from web.xml and web-fragment.xmlServlets are initialized either lazily at request processing time, or eagerly during deployment. In the latter case, they are initialized in the order indicated by their load-on-startup elements ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 11:30:21 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
ТимоНSingleThreadModel тут не причем. Этот процесс выполняется только один раз! Ну, уж про SingleThreadModel уже кучу раз обсудили. И может снова заглянем в спеку? Number of InstancesThe servlet declaration which is either via the annotation as described in Chapter 8 or part of the deployment descriptor of the Web application containing the servlet, as described in Chapter 14, “Deployment Descriptor”, controls how the servlet container provides instances of the servlet. For a servlet not hosted in a distributed environment (the default), the servlet container must use only one instance per servlet declaration. However, for a servlet implementing the SingleThreadModel interface, the servlet container may instantiate multiple instances to handle a heavy request load and serialize requests to a particular instance . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 11:32:37 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
[quot Blazkowicz]Да, ну? Не хочешь привести цитаты подверждающие твоё мнение? Вот то о чем я говою. Когда создаётся экземпляр: Loading and InstantiationThe servlet container is responsible for loading and instantiating servlets. The loading and instantiation can occur when the container is started, or delayed until the container determines the servlet is needed to service a request. When the servlet engine is started, needed servlet classes must be located by the servlet container. The servlet container loads the servlet class using normal Java class loading facilities. The loading may be from a local file system, a remote file system, or other network services. After loading the Servlet class, the container instantiates it for use. Верно. Но экзепляр создается все равно один раз. BlazkowiczКак load-on-startup связан с экземплярами Никак. Тут я был не прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 11:47:16 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
ТимоНВерно. Но экзепляр создается все равно один раз. В SingleThreadModel - не обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 11:51:41 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТимоНВерно. Но экзепляр создается все равно один раз. В SingleThreadModel - не обязательно. Да, тут не поспоришь ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 11:55:23 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
Такой вопрос: когда томкат вызывает метод destroy для определенного экземпляра? Это где-то настраивается время вызова метода или контэйнер сам узнает что браузер закрыт или перешел на другую страницу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 12:16:05 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
gunnerТакой вопрос: когда томкат вызывает метод destroy для определенного экземпляра? Это где-то настраивается время вызова метода или контэйнер сам узнает что браузер закрыт или перешел на другую страницу? Контейнер вызывает destroy когда останавливает приложение. Закрытие браузера и страницы со временем жизни сервлета и приложения никак не связаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 12:19:32 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz , если для каждого пользователя создается экземпляр сервлета который занимает память, значит все эти экземпляры будут занимать память, даже если пользователь не использует этот экземпляр ? Получается если не остановится приложение у нас на сервере будут миллионы экземпляр которые не используются ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 12:32:30 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
gunnerBlazkowicz , если для каждого пользователя создается экземпляр сервлета который занимает память Попробуйте прочитать то что вам пишут выше. Обычно, экземпляр создаётся один на всё приложение и все им пользуются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 12:36:07 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
gunnerBlazkowicz , если для каждого пользователя создается экземпляр сервлета который занимает память, значит все эти экземпляры будут занимать память, даже если пользователь не использует этот экземпляр ? Наоборот, для всех пользователей создается один экземпляр (если не SingleThreadModel). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 13:30:02 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
ТимоНgunnerBlazkowicz , если для каждого пользователя создается экземпляр сервлета который занимает память, значит все эти экземпляры будут занимать память, даже если пользователь не использует этот экземпляр ? Наоборот, для всех пользователей создается один экземпляр (если не SingleThreadModel). ТимоН, если я правильно понял Blazkowicz , то экземпляр создается один раз даже если это SingleThreadModel, в случае SingleThreadModel все запросы обрабатываются по очереди , если не SingleThreadModel то обрабатываются параллельно в thread'е. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 13:39:36 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
gunner, умываю руки, дискутировать тут, походу, бесполезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 13:42:13 |
|
||
|
Как создается сервлет в томкате ?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо вам за ответы, я новичок поэтому не судите строго )). Я все установил, запустил томкат , почитал как создается сервлеты жсп. Написал пару примеров .Все запускается. Но не понял архитектуру , поэтому и спросил) .Видимо еще надо читать книжки про архитектуре. Спасибо еще раз ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2012, 13:52:47 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37955836&tid=2130967]: |
0ms |
get settings: |
12ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
50ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
80ms |
get tp. blocked users: |
3ms |
| others: | 303ms |
| total: | 502ms |

| 0 / 0 |
