Ciclo de Vida JSP

O que รฉ ciclo de vida JSP?
O ciclo de vida JSP รฉ definido como a traduรงรฃo da pรกgina JSP em servlet, pois uma pรกgina JSP precisa primeiro ser convertida em servlet para processar as solicitaรงรตes de serviรงo. O Ciclo de Vida comeรงa com a criaรงรฃo do JSP e termina com a desintegraรงรฃo deste.
Diferentes fases do ciclo de vida JSP
Quando o navegador solicita um JSP, o mecanismo JSP primeiro verifica se รฉ necessรกrio compilar a pรกgina. Se o JSP foi compilado pela รบltima vez ou a modificaรงรฃo recente foi feita no JSP, o mecanismo JSP compila a pรกgina.
O processo de compilaรงรฃo da pรกgina JSP envolve trรชs etapas:
- Anรกlise de JSP
- Transformando JSP em servlet
- Compilando o servlet
Diagrama do Ciclo de Vida JSP
O ciclo de vida JSP รฉ representado no diagrama abaixo.
As etapas a seguir explicam o ciclo de vida do JSP:
- Traduรงรฃo da pรกgina JSP
- Compilaรงรฃo da pรกgina JSP (Compilaรงรฃo da pรกgina JSP em _jsp.java)
- Carregamento de classe (_jsp.java รฉ convertido no arquivo de classe _jsp.class)
- Instanciaรงรฃo (Objeto do servlet gerado รฉ criado)
- Inicializaรงรฃo(
_jspinit()mรฉtodo รฉ invocado pelo contรชiner) - Processamento de solicitaรงรฃo (
_jspservice()mรฉtodo รฉ invocado pelo contรชiner) - Destruir (
_jspDestroy()mรฉtodo invocado pelo contรชiner)
Deixe-nos ter um resumo mais detalhado sobre os pontos acima:
1) Traduรงรฃo da pรกgina JSP:
A Java O arquivo servlet รฉ gerado a partir de um arquivo de origem JSP. Esta รฉ a primeira etapa do ciclo de vida JSP. Na fase de traduรงรฃo, o contรชiner valida a correรงรฃo sintรกtica da pรกgina JSP e dos arquivos de tags.
- O contรชiner JSP interpreta as diretivas e aรงรตes padrรฃo e as aรงรตes customizadas que fazem referรชncia ร s bibliotecas de tags (todas fazem parte da pรกgina JSP e serรฃo discutidas na seรงรฃo posterior) usadas nesta pรกgina JSP.
- Na descriรงรฃo pictรณrica acima, demo.jsp รฉ traduzido para demo_jsp.java na primeira etapa
- Vejamos um exemplo de โdemo.jspโ conforme mostrado abaixo:
Demo.jsp
<html> <head> <title>Demo JSP</title> </head> <% int demvar=0;%> <body> Count is: <% Out.println(demovar++); %> <body> </html>
Code Explicaรงรฃo para Demo.jsp
Code Linha 1: tag de inรญcio html
Code Linha 2: Etiqueta de cabeรงa
Code Linha 3 โ 4: Tag de tรญtulo, ou seja, Demo JSP e tag de fechamento head
Code Linha 5 โ 6: Tag Scriptlet onde inicializa a variรกvel demo
Code Linha 7 โ 8: Na tag body, um texto a ser impresso na saรญda (Contagem รฉ: )
Code Linha 9: Tag scriplet onde tenta imprimir a variรกvel demovar com valor incrementado
Code Linha 10 โ 11: Tags de corpo e HTML fechadas
A pรกgina Demo JSP รฉ convertida em servlet demo_jsp no cรณdigo abaixo.
Code Explicaรงรฃo para Demo_jsp.java
Code Linha 1: A classe servlet demo_jsp estรก estendendo a classe pai HttpServlet
Code Linha 2 โ 3: Substituindo o mรฉtodo de serviรงo de jsp, ou seja, _jspservice que tem os objetos HttpServletRequest e HttpServletResponse como seus parรขmetros
Code Linha 4: Mรฉtodo de abertura
Code Linha 5: Chamando o mรฉtodo getWriter() do objeto de resposta para obter PrintWriterobjeto (imprime a representaรงรฃo formatada de objetos no fluxo de saรญda de texto)
Code Linha 6: Chamando o mรฉtodo setContentType do objeto de resposta para definir o tipo de conteรบdo
Code Linha 7: Usando write() mรฉtodo de impressรฃoWriter objeto tentando analisar html
Code Linha 8: Inicializando a variรกvel demovar para 0
Code Linha 9: Ligando write() mรฉtodo de impressรฃoWriter objeto para analisar o texto
Code Linha 10: Ligando print() mรฉtodo de impressรฃoWriter objeto para incrementar a variรกvel demovar de 0+1=1. Portanto, a saรญda serรก 1.
Code Linha 11: Usando write() mรฉtodo de impressรฃoWriter objeto tentando analisar html
Saรญda:
- Aqui vocรช pode ver que na captura de tela a saรญda รฉ 1 porque demvar รฉ inicializado em 0 e depois incrementado em 0+1=1
No exemplo acima,
- demo.jsp, รฉ um JSP onde uma variรกvel รฉ inicializada e incrementada. Este JSP รฉ convertido no servlet (demo_jsp.class ) em que o mecanismo JSP carrega a pรกgina JSP e converte em conteรบdo do servlet.
- Quando a conversรฃo acontece, todo o texto do modelo รฉ convertido para
println()declaraรงรตes e tudo Elementos JSP sรฃo convertidos para Java cรณdigo.
ร assim que uma pรกgina JSP simples รฉ traduzida em uma classe de servlet.
2) Compilaรงรฃo da pรกgina JSP
- O arquivo java servlet gerado รฉ compilado na classe java servlet
- A traduรงรฃo da pรกgina de origem Java para sua classe de implementaรงรฃo pode acontecer a qualquer momento entre a implantaรงรฃo da pรกgina JSP no contรชiner e o processamento da pรกgina JSP.
- Na descriรงรฃo pictรณrica acima, demo_jsp.java รฉ compilado em um arquivo de classe demo_jsp.class
3) Carregamento de classe
- A classe servlet que foi carregada da origem JSP agora รฉ carregada no contรชiner
4) Instanciaรงรฃo
- Nesta etapa o objeto, ou seja, a instรขncia da classe, รฉ gerado.
- O contรชiner gerencia uma ou mais instรขncias desta classe na resposta a solicitaรงรตes e outros eventos. Normalmente, um contรชiner JSP รฉ construรญdo usando um contรชiner de servlet. Um contรชiner JSP รฉ uma extensรฃo do contรชiner de servlet, pois ambos suportam JSP e servlet.
- Uma interface JSPPage fornecida pelo contรชiner fornece
init()edestroy()mรฉtodos. - Existe uma interface HttpJSPPage que atende solicitaรงรตes HTTP e tambรฉm contรฉm o mรฉtodo de serviรงo.
5) Inicializaรงรฃo
public void jspInit()
{
//initializing the code
}
_jspinit()O mรฉtodo iniciarรก a instรขncia do servlet que foi gerada a partir do JSP e serรก chamada pelo contรชiner nesta fase.- Assim que a instรขncia for criada, o mรฉtodo init serรก invocado imediatamente apรณs isso
- ร chamado apenas uma vez durante o ciclo de vida JSP, o mรฉtodo de inicializaรงรฃo รฉ declarado conforme mostrado acima
6) Processamento de solicitaรงรฃo
void _jspservice(HttpServletRequest request HttpServletResponse response)
{
//handling all request and responses
}
_jspservice()O mรฉtodo รฉ invocado pelo contรชiner para todas as solicitaรงรตes levantadas pela pรกgina JSP durante seu ciclo de vida- Para esta fase, รฉ necessรกrio passar por todas as fases acima e entรฃo apenas o mรฉtodo de serviรงo poderรก ser invocado.
- Ele passa objetos de solicitaรงรฃo e resposta
- Este mรฉtodo nรฃo pode ser substituรญdo
- O mรฉtodo รฉ mostrado acima: ร responsรกvel por gerar todos os mรฉtodos HTTP, ou seja, GET, POST, etc.
7) Destruir
public void _jspdestroy()
{
//all clean up code
}
_jspdestroy()O mรฉtodo tambรฉm รฉ invocado pelo contรชiner- Este mรฉtodo รฉ chamado quando o contรชiner decide que nรฃo precisa mais da instรขncia do servlet para atender ร s solicitaรงรตes.
- Quando a chamada para o mรฉtodo destroy รฉ feita, o servlet estรก pronto para uma coleta de lixo
- Este รฉ o fim do ciclo de vida.
- Nรณs podemos substituir
jspdestroy()mรฉtodo quando realizamos qualquer limpeza, como liberar conexรตes de banco de dados ou fechar arquivos abertos.



