Entao? Qual dos dois? achei estranho ter dois…
void init(ServletConfig)
void init()
Entao? Qual dos dois? achei estranho ter dois…
void init(ServletConfig)
void init()
Caçei lá no Java Docs… Na interface GenericServlet:
void [b]init/b
A convenience method which can be overridden so that there’s no need to callsuper.init(config).void init(ServletConfig config)
Called by the servlet container to indicate to a servlet that the servlet is being placed into service.
public void [b]init/b
throws ServletExceptionA convenience method which can be overridden so that there's no need to call super.init(config). Instead of overriding init(ServletConfig), simply override this method and it will be called by GenericServlet.init(ServletConfig config). The ServletConfig object can still be retrieved via getServletConfig(). </blockquote>public void init(ServletConfig config)
throws ServletExceptionCalled by the servlet container to indicate to a servlet that the servlet is being placed into service. See Servlet.init(javax.servlet.ServletConfig). This implementation stores the ServletConfig object it receives from the servlet container for later use. When overriding this form of the method, call super.init(config). </blockquote>Então, pelo que eu entendi, é o seguinte: ele chama por padrão passando o config, e o outro serve pra você dar override na sua aplicação, porque a Servlet vai chamar o init(config), que por sua vez vai chamar o seu init()… e por aí vai.
Caçei lá no Java Docs… Na interface GenericServlet:void [b]init/b
A convenience method which can be overridden so that there’s no need to callsuper.init(config).void init(ServletConfig config)
Called by the servlet container to indicate to a servlet that the servlet is being placed into service.public void [b]init/b
throws ServletExceptionA convenience method which can be overridden so that there's no need to call super.init(config). Instead of overriding init(ServletConfig), simply override this method and it will be called by GenericServlet.init(ServletConfig config). The ServletConfig object can still be retrieved via getServletConfig(). </blockquote>public void init(ServletConfig config)
throws ServletExceptionCalled by the servlet container to indicate to a servlet that the servlet is being placed into service. See Servlet.init(javax.servlet.ServletConfig). This implementation stores the ServletConfig object it receives from the servlet container for later use. When overriding this form of the method, call super.init(config). </blockquote>Então, pelo que eu entendi, é o seguinte: ele chama por padrão passando o config, e o outro serve pra você dar override na sua aplicação, porque a Servlet vai chamar o init(config), que por sua vez vai chamar o seu init()… e por aí vai.
tentei dar uma override no init sem parametros eee olha oque deu:
c:\AplicacaoWEB\src>javac -classpath c:\libs\servlet-api.jar;c:\xampp\tomcat\webapps\Aplicacao\WEB-INF\classes -d c:\xampp\tomcat\webapps\Aplicacao\WEB-INF\classes com\ex
com\example\web\MeuServlet.java:11: init() in com.example.web.MeuServlet cannot override init() in javax.servlet.GenericServlet; attempting to assign weaker access privil
void init(){
^
1 erroredit: se bem que eu to extendendo da HttpServlet… mas se eu nao me engano… HttpServlet implementa a GenericServlet entao acho que da na mesma!
Como você escreveu o seu init? Eu fiz o meu assim:
@Override
public void init(){
System.out.println("Iniciando a servlet");
}
E funcionou de boa.
(Sim, dá no mesmo =] )
tentei dar uma override no init sem parametros eee olha oque deu:c:\AplicacaoWEB\src>javac -classpath c:\libs\servlet-api.jar;c:\xampp\tomcat\webapps\Aplicacao\WEB-INF\classes -d c:\xampp\tomcat\webapps\Aplicacao\WEB-INF\classes com\ex
com\example\web\MeuServlet.java:11: init() in com.example.web.MeuServlet cannot override init() in javax.servlet.GenericServlet; attempting to assign weaker access privil
void init(){
^
1 errorComo você escreveu o seu init? Eu fiz o meu assim:
@Override public void init(){ System.out.println("Iniciando a servlet"); }E funcionou de boa.
(Sim, dá no mesmo =] )
de fato funcionou agora :}
Mas sera que isso nao ia dar problema?
entao a inicializacao do servlet é assim
-> containner chama o construtor do servlet
-> depois chama o init com parametro -> depois chama o init() sem parametro -> depois o service ai bla bla bla…
é isso entao?
To sendo chato ne? mas é essencial que eu entenda isso rs
__
E isso mesmo baixei o fonte do apache tomcat e la diz o seguinte no metodo init
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
de fato funcionou agora :}
Mas sera que isso nao ia dar problema?entao a inicializacao do servlet é assim
-> containner chama o construtor do servlet
-> depois chama o init com parametro -> depois chama o init() sem parametro -> depois o service ai bla bla bla…é isso entao?
To sendo chato ne? mas é essencial que eu entenda isso rs
Acredito que não daria problema, porque segundo o javadoc ele foi feito justamente pra isso.
Cara, acho que é isso sim. Também não entendo muito sobre o assunto, se alguém quiser discordar… Mas qualquer dúvida que ainda restar sobre ciclos de vida de servlet, leia esse artigo aqui. Ele não chega a mencionar nada sobre o init() sem parâmetros, mas pelo que a gente já testou - e funcionou - ele foi chamado pelo init(ServletConfig). Também dá pra entrar em debug mode e olhar a pilha de execução, depois que ele terminar o init() sobrescrito, ele volta a fazer o init(ServletConfig config) do GenericServlet, provavelmente para finalizar a execução do método.
Que nada! É sempre bom ter dúvida, na realidade eu fui pesquisar sobre o assunto pra te responder, ou seja, nós dois estámos aprendendo.