• Nenhum resultado encontrado

Conforme apresentado nos parágrafos anteriores, a inicialização do Servlet ocorre no instante em que é feita a carga da aplicação pelo Servlet Container.

Nesse instante, o Servlet Container executa o método “init” do Servlet, dando chance ao Servlet de executar quaisquer passos necessários para sua inicialização, tais como:

2) inicialização de variáveis de classe (variáveis estáticas) 3) inicialização de conexões ao banco de dados, etc.

Assim, podemos ter implementado em nosso Servlet “ProcCadastro”, por exemplo:

Inicialização do Servlet “ProcCadastro”

impo rt java.io.*; impo rt javax.servlet.*; impo rt javax.servlet.htt p.*;

/ / Servlet para process a m e n t o do cadas tr o de novos clientes: a cada novo cadastr o bem sucedid o,

/ / envia email com os dad os do cadas t r o public class ProcCada s t r o exten d s HttpServlet {

...

public void init () { ...

} ... }

As assinaturas do método init() são:

Assinaturas do método “init ()”

public void init();

public void init( javax.servlet.ServletConfig p_config );

Conforme pode ser visto, o método init() admite duas assinaturas, sendo que em uma delas, é recebido como parâmetro um objeto da classe javax.servlet.ServletConfig : através desse objeto, o Servlet pode obter os parâmetros de inicialização do Servlet, contidos no Deployment Descriptor (veja seção 2.2). Por outro lado, caso você opte por implementar o método init() sem nenhum parâmetro, é possível também obter uma referência para o objeto ServletConfig por meio da chamada getServletConfig() da própria classe javax.servlet.GenericServlet (a qual nossa classe estende).

public javax.servlet.ServletConfig getServletConfig ();

Para obter um parâmetro de inicialização do Servlet usando o objeto ServletConfig , deve- se utilizar o método getInitParameter(), passando como parâmetro o nome do parâmetro que se deseja obter.

Assinatura do métod o “getInitParameter ()”

public java.lang.String getInitPara m e t e r( java.lang.String p_par a m e t e rN a m e );

Temos, a seguir, um exemplo de uso desse método:

Exemplo de uso do método “getInitParameter()” de

um objeto “ServletConfig”

public void init(ServletConfig p_servletConfig) throw s ServletException {

super.init(p_servletConfig);

String l_servidorSMTP = p_servletConfig.getInitPara m e t e r (“Email.Servido rSMTP”);

if(l_servidorSMTP != null) { ...

} }

Obviamente o método getInitParameter() pode retornar um valor nulo caso o parâmetro inicial a ser obtido não tenha sido definido, e por isso é importante que você faça a verificação do String retornado pela chamada do método antes de utilizá - lo.

É possível também, a partir de um objeto da classe ServletConfig , percorrer a lista dos parâmetros de inicialização do Servlet, bastando utilizar o método getInitParameterNames().

Assinatura do métod o “getInitParameterNam e s ()”

public java.util.Enum er a tio n getInitPara m e te rNa m e s();

Temos, a seguir, um exemplo de uso deste outro método:

Exemplo de uso do método “getInitParameterNa m e s

()” de um objeto “ServletConfig”

public void init(ServletConfig p_servletConfig) throw s ServletException {

super.init(p_servletConfig);

Enumeratio n l_para m e t e rNa m e s = p_servletConfig.getInitPara m e t e rNa m e s ();

if(l_para m e t e rNa m e s != null)

while(l_para me t erNa m e s.h a sMoreEleme n t s ()) {

String l_para me t erNa m e = (String) l_para me t erNa m e s. nextElemen t ();

String l_para me t erValue= p_servletConfig.getInitParameter (l_parameterName) ;

... } } }

Assim, em nossa aplicação de exemplo CadastroClientes , podemos implementar o método de inicialização do Servlet ProcCadastro como:

Inicialização do Servlet “ProcCadastro”

impo rt java.io.*; impo rt javax.servlet.*; impo rt javax.servlet.htt p.*;

/ / Servlet para process a m e n t o do cadas tr o de novos clientes: / / a cada novo cadastr o bem sucedido, envia email com os dados do cadastr o

public class ProcCada s t r o exten d s HttpServlet {

/ / Servidor SMTP a ser usado para o envio de email private static String _ServidorSMTP = null;

/ / Remetent e, destinat á rio e assu n t o do email a ser enviado a cada cadas tr o

private static String _Remeten te = null, _Destinat ario = null, _Assunt o = null;

public void init(ServletConfig p_servletConfig) throws ServletException {

super.init(p_servletConfig);

/ / Recupera n d o os parâ m e t r o s de inicializaçã o do Servlet _ServidorSMTP = p_servletConfig.getInitPara me t e r

(“Email.Servido rSMTP”);

_Remetent e = p_servletCo nfig.getInitPara m e te r (“Email.Remeten t e”);

_Destinat ario = p_servletConfig.getInitPara m e t e r (“Email.Destinat a rio”);

_Assu nt o = p_servletCo nfig.getInitPara m e te r(“Email.Assu n t o”); ...

}

}

Outro uso comum para o método de inicialização do Servlet é para o despacho de um ou mais Threads, que deverão ser executados durante o período em que o Servlet permanecer carregado. Assim, um serlvet pode, por exemplo, iniciar um Thread que irá verificar continuamente a disponibilidade de uma conexão com o banco de dados, independente de qualquer requisição que receba. Este Servlet de exemplo é apresentado a seguir:

Inicialização do Servlet “VerificaConBD”

impo rt java.io.*; impo rt javax.servlet.*; impo rt javax.servlet.htt p.*;

/ / Servlet para verificar conexão com banco de dad os: lança threa d que verifica stat u s da conexão periodica m e n t e

public class VerificaConDB extend s HttpServlet impleme n t s Runnable {

/ / Referência ao thread que irá fazer a verificação da conexão Threa d _ThreadVerif = null;

/ / Inicializaçã o do Servlet

public void init(ServletConfig p_servletConfig) throws ServletException {

/ / Lançand o Threa d ...

_Threa dVerif = new Threa d(this); _Threa dVerif.star t ();

... }

/ / Execução do thread public void run() {

while(_ThreadVerif != null) { if(!ConBD.OK ()) { ... } } } ... }

Uma observação importante com relação a esse processo de inicialização é que o Servlet somente poderá receber requisições após a conclusão de seu processo de inicialização.

O desenvolvedor pode, por outro lado, indicar que esse processo de inicialização não foi bem sucedido, através do lançamento da exceptions ServletException ou UnavailableException ; nestes casos, o Servlet Container irá deixar o Servlet em um estado inativo, ou seja, sem poder receber requisições. A exception UnavailableException , em particular, pode receber como parâmetro em seu construtor, um número de segundos com uma estimativa de quanto tempo o Servlet deverá ficar inativo.

Exemplo de uso da exceçã o “UnavailableException”

para indicar fracass o na inicialização

public void init(ServletConfig p_servletConfig)

throws ServletException, UnavailableException { super.init(p_servletConfig);

...

/ / Recupera n d o e validan d o parâ m e t r o s de inicialização do Servlet

_ServidorSMTP = p_servletConfig.getInitPara m e t e r (“Email.Servido rSMTP”);

_Remeten te = p_servletConfig.getInitPara m e t e r (“Email.Remeten t e”);

_Destinata rio = p_servletConfig.getInitPara m e t e r (“Email.Destinat a rio”);

_Assun t o = p_servletConfig.getInitPara m e t e r(“Email.Assu n t o”); if((_ServidorSMTP = = null) || (_Remeten te = = null) || (_Assunt o = = null))

throw new UnavailableExceptio n(“Erro: parâm e t r o s de inicialização não

encont r a d o s!”);

No caso de você não ter percebido, todos os métodos init() apresentados até agora nos exemplos foram declarados de maneira a possibilitar o lançamento do exception ServletException : isso é necessário devido à chamada do método super.init (), que pode, por si, lançar essa exceção para indicar problemas em sua execução.

No documento Programação Web com Jsp, Servlets e J2EE (páginas 33-39)

Documentos relacionados