Estou ficando um pouco confuso aqui. Em nossa aplicação, estamos tendo alguns servlets definidos. Aqui está o trecho de 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 o meu entendimento, o valor para o <load-on-startup>
deve ser um número inteiro positivo para que seja carregado automaticamente. Procurei no google, mas as respostas que encontrei só aumentaram minha confusão.
fonte
Resposta curta : valor> = 0 significa que o servlet é carregado quando o aplicativo da web é implementado ou quando o servidor é iniciado. valor <0: o servlet é carregado sempre que o contêiner parecer.
Resposta longa (da especificação):
fonte
Indica que o servlet não será iniciado até que uma solicitação tente acessá-lo.
Se o carregamento na inicialização for maior ou igual a zero, quando o contêiner iniciar, ele iniciará o servlet em ordem crescente do valor de carga no início que você colocar lá (ou seja, 0, 1 e 2, 5 e 10 e assim por diante) .
fonte
Ciclo de vida do servlet
Um valor 0 ativado
load-on-startup
significa que o ponto 1 é executado quando uma solicitação chega a esse servlet. Outros valores significam que o ponto 1 é executado na inicialização do contêiner.fonte
Conforme declarado em outra resposta, este artigo zero de carregamento na inicialização é aceitável e, na ausência de qualquer outro servlet, isso terá prioridade no carregamento e carregamento durante a implementação. O melhor uso do status de carregamento é carregar servlets que demoram mais tempo para inicializar bem antes que a primeira solicitação venha, como servlets que criam um pool de conexões ou fazem chamadas de rede ou retêm recursos volumosos; isso reduzirá significativamente o tempo de resposta da primeira solicitação.
fonte
fonte
sim, pode ter o mesmo valor .... o motivo para atribuir números ao carregar na inicialização é definir uma sequência para o servidor carregar todo o servlet. o servlet com o valor 0 carregar na inicialização será carregado primeiro e o servlet com o valor 1 será carregado depois disso.
se dois servlets terão o mesmo valor para carregar na inicialização do que será carregado como eles são declarados no web.xml de cima para baixo. o servlet que vem primeiro no web.xml será carregado primeiro e o outro será carregado depois disso.
fonte
-> (Ausência de carga na inicialização) Antes de tudo, quando um servlet é implantado no servidor, é responsabilidade do servidor criar o objeto do servlet. Ex .: Suponha que o Servlet seja implantado no servidor, (o Objeto Servlet não está disponível no servidor), o cliente envia a solicitação ao servlet pela primeira vez e, em seguida, o servidor cria o objeto servlet com a ajuda do construtor padrão e chama imediatamente init (). A partir disso, sempre que o cliente envia a solicitação, apenas o método de serviço será executado, pois o objeto já está disponível
Se a tag load-on-start-up for usada no descritor de implementação: No momento da implementação, o servidor cria o objeto de servlet para os servlets com base no valor positivo fornecido entre as tags. A criação de objetos para as classes de servlet seguirá de 0-128 0 número de servlet será criado primeiro e seguido por outros números.
Se fornecermos o mesmo valor para dois servlets no web.xml, a criação de objetos será feita com base na posição das classes no web.xml também varia de servidor para servidor.
Se fornecermos um valor negativo entre a tag load on start up, o servidor não criará o objeto servlet.
Outros cenários em que o servidor cria o objeto para servlet.
Se não usarmos a tag load on start up em web.xml, o projeto será implantado sempre que o cliente enviar a solicitação pela primeira vez que o servidor criar o objeto e o servidor for responsável por chamar seus métodos de ciclo de vida. Então, se um .class for modificado no servidor (tomcat). novamente o cliente envia a solicitação de servlet modificado, mas no caso do tomcat, o novo objeto não será criado e o servidor fará uso do objeto existente, a menos que ocorra a reinicialização do servidor. Mas na classe da lógica da web sempre que um arquivo .class é modificado no servidor sem reiniciar o servidor, se ele recebe uma solicitação, o servidor chama o método destroy no servlet existente e cria um novo objeto de servlet e chama init () para sua inicialização .
fonte
Se o valor for <0, o serlet será instanciado quando a solicitação chegar; caso contrário> = 0, o contêiner será carregado na ordem crescente dos valores. se 2 ou mais servlets tiverem o mesmo valor, a ordem dos servlets declarados no web.xml.
fonte
O contêiner do servlet carrega o servlet durante a inicialização ou quando a primeira solicitação é feita. O carregamento do servlet depende do atributo "carregar na inicialização" no arquivo "web.xml". Se o atributo tiver um número inteiro positivo (0 a 128), o servlet será carregado com o carregamento do contêiner, caso contrário, será carregado quando a primeira solicitação for solicitada.
Quando o servlet é carregado quando é solicitado, é chamado de "Carregamento lento".
fonte
É simples como você nem espera.
Se o valor for positivo, ele será carregado quando o contêiner iniciar
Se o valor não for positivo, o servelet será carregado quando a solicitação for feita.
fonte