Pergunta

Estou ficando um pouco confuso aqui. Em nossa aplicação nós estamos tendo alguns servlets definidos. Aqui está o trecho da web.xml para um dos servlets:

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>com.foo.framework.axis2.http.FrameworkServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet> 

De acordo com a minha compreensão do valor para o <load-on-startup> tem que ser um número inteiro positivo para que ele para obter carregado automaticamente. Olhei para cima no google, mas as respostas que me deparei só aumentou minha confusão.

Foi útil?

Solução

Resina 3,0 documentos este comportamento:

load-on-startup pode especificar um (opcional) valor inteiro. Se o valor for 0 ou maior, indica uma ordem para servlets a ser carregado, servlets com números mais elevados obter carregado depois servlets com números mais baixos.

O JSP 3.1 especificação (JSR 340) diz que esta na página 14-160 :

O elemento load-on-startup indica que este servlet deve ser carregado (instanciado e têm a sua init () chamado) na inicialização do aplicativo da Web. O conteúdo do elemento deste elemento deve ser um número inteiro que indica a ordem na qual o servlet deve ser carregado. Se o valor é um número inteiro negativo, ou o elemento não está presente, o recipiente é livre para carregar o servlet sempre que escolhe. Se o valor é positivo número inteiro ou 0, o recipiente deve carregar e inicializar o servlet como a aplicação é implantado. O recipiente deve garantir que os servlets marcados com números inteiros mais baixos são carregados antes servlets marcadas com números inteiros mais elevados. O recipiente pode escolher a ordem de carregamento de servlets com o mesmo valor load-on-startup.

Você provavelmente vai querer verificar não só a JSR, mas também a documentação do seu container web. Pode haver diferenças

Outras dicas

Resposta Curta : valor> = 0 significa que o servlet é carregado quando o web-app é implantado ou quando o servidor é iniciado. valor <0:. servlet é carregado sempre que o recipiente se sente como

Resposta longa (da especificação):

O elemento de load-on-startup indica que este servlet deve ser carregado (instanciado e têm o init () chamado) no arranque da web inscrição. Os conteúdos opcionais destes elemento deve ser um número inteiro que indica a ordem em que o servlet deve ser carregado. Se o valor é um número inteiro negativo, ou o elemento não está Actualmente, o recipiente é livre para carregar o servlet sempre que escolhe. Se o valor é positivo 128 número inteiro ou 0, o recipiente deve carregar e inicializar o servlet como a aplicação é implantado. O recipiente deve garantir que servlets marcadas com números inteiros inferiores são carregados antes de servlets marcados com números inteiros superiores. o recipiente pode escolher a ordem de carregamento de servlets com o mesmo valor start-up load-on-.

Ela indica que o servlet não será iniciado até que uma solicitação tenta acessá-lo.

Se load-on-startup é maior ou igual a zero, em seguida, quando o recipiente começa ele vai começar que servlet em ordem ascendente da carga no valor de inicialização que você colocar lá (ou seja, 0, 1, em seguida 2, em seguida, 5, em seguida, 10 e assim por diante).

Servlet Life Cycle

O ciclo de vida de um servlet é controlado pelo recipiente no qual o servlet tenha sido implantado. Quando um pedido é mapeado para um servlet, os contentores executa os seguintes passos.

  1. Se uma instância do servlet não existe, o recipiente web:

    a. Cargas da classe servlet

    b. Cria uma instância da classe servlet

    c. inicializa a instância servlet chamando o método init (inicialização é coberto em criar e inicializar um Servlet )

  2. O recipiente invoca o método de serviço, passando de solicitação e resposta objetos. métodos de serviço são discutidos em Métodos escrito serviço .

Um valor 0 em meio load-on-startup que o ponto 1 é executado quando um pedido chega a esse servlet. Outros valores significa que o ponto 1 é executado na inicialização do recipiente.

  1. Se o valor é o mesmo para dois servlet que eles serão carregados em uma ordem na qual eles são declarados dentro do arquivo web.xml.
  2. Se é 0 ou inteiro negativo de Servlet será carregado quando Container sente para carregá-los.
  3. garante carregamento, inicialização e chamada para método init () do servlet por contêiner da Web.
  4. Se não há nenhum elemento para qualquer servlet que eles serão carregados quando o recipiente web decide carregá-los.

sim, podem ter o mesmo valor .... a razão para dar números para carregar-on-startup é definir uma seqüência para o servidor para carregar todo o servlet. servlet com 0 valor load-on-startup irá carregar primeiro e servlet com valor 1 será carregado depois disso.

Se dois servlets terá o mesmo valor para o load-on-startup que ele será carregado como eles são declarados no web.xml de cima para baixo. o servlet que vem em primeiro lugar no web.xml vai ser carregado em primeiro lugar e o outro será carregado depois disso.

-> (Ausência de carga-a-start-up) tag Primeiro de tudo, quando servlet já está implementado no servidor, é da responsabilidade do servidor para cria o objeto servlet. Por exemplo: Servlet Suponha que é implantado no servidor, (Servlet objeto não está disponível no servidor) cliente envia a solicitação para o servlet, pela primeira vez, em seguida, servidor cria o objeto servlet com a ajuda de construtor padrão e imediatamente chama init (). Desde que quando o cliente sempre envia o pedido único método de serviço serão executados como objeto já está disponível

Se load-on-start-up tag é usada no descritor de implantação: No momento da implantação propriamente dita do servidor cria o objeto servlet para os servlets com base no valor positivo fornecido entre as tags. A criação de objetos para as classes de servlet seguirá 0-128 0 número servlet vai ser criada primeiro e seguido por outros números.

Se nós fornecemos mesmo valor para dois servlets em web.xml, em seguida, criação de objetos será feita com base na posição de classes em web.xml também varia de servidor para servidor.

Se nós fornecemos valor negativo entre a carga no arranque tag então servidor não vai criar o objeto servlet.

Outros cenários onde servidor cria o objeto para o servlet.

Se nós não load uso no arranque tag em web.xml, então projeto é implantado quando o cliente sempre envia o pedido para o primeiro servidor de tempo cria o objeto eo servidor é responsável por chamar seus métodos de ciclo de vida. Então, se um .class está sendo modificado no servidor (tomcat). novo cliente envia o pedido de servlet modificado, mas em caso de tomcat novo objeto não será criado e servidor fazer uso de objeto existente a menos reinício do servidor ocorre. Mas, na classe de web-lógica quando o arquivo já .class é modificado no servidor com a reiniciar o servidor se ele recebe um pedido, em seguida, servidor chama o método destroy no servlet existente e cria um novo objeto de servlet e chamadas init () para a sua initilization .

Se o valor for <0, o Serlet é instanciado quando o pedido vem, else> = 0 o recipiente irá carregar na ordem crescente dos valores. se 2 ou mais servlets têm o mesmo valor, então a ordem dos servlets declarada no web.xml.

As cargas de contentores servlet o servlet durante a inicialização ou quando o primeiro pedido é feito. O carregamento do servlet depende do atributo "load-on-startup" no arquivo "web.xml". Se o atributo tem um número inteiro positivo (0 a 128), em seguida, o servlet é a carga com o carregamento do recipiente caso contrário, cargas quando o primeiro pedido vem para o serviço.

Quando o servlet é carregado uma vez que recebe pedido então é chamado "Lazy carregamento".

É simples como você não precisa nem esperar.

Se o valor for positivo, carregado quando o recipiente começa

Se o valor não é positivo que o servelet é carregado quando o pedido é feito.

scroll top