método init

Olá pessoal,

Quero fazer a conexão com meu banco de dados no método init, porém este método não esta funcionando, não esta nem imprimindo o que eu coloco para imprimir como base de teste. Alguém poderia me ajudar?
Estou no aguardo.

Sta. Leisley

Você está sobrescrevendo o método corretamente? Só pra lembrar, ele tem que ter a seguinte assinatura:

void init(ServletConfig sc) throws ServletException;

Também pode ser simplsmente:

public void init() {}

[quote=danieldestro]Também pode ser simplsmente:

public void init() {}

Então estou subrescrevendo corretamente sim, porém ele não funciona.

Sta. Leisley

Porque não coloca o código do seu Servlet aqui, pra gente olhar?

Olá, desculpe a demora…Mas ai vai o código:

[code]import javax.servlet.;
import javax.servlet.http.
;
import java.io.;
import java.util.
;
import java.sql.;
import java.lang.
;

/**
*

  • @author Leiloca

  • @version
    */
    public class Cad_QuestServlet extends HttpServlet {

    private Statement stm = null;
    private Connection con = null;

    /** Initializes the servlet.
    */
    public void init(ServletConfig config) throws ServletException {
    super.init(config);
    /Conexão com o Banco de Dados/
    try{
    Class.forName(“net.sourceforge.jtds.jdbc.Driver”).newInstance();
    con = java.sql.DriverManager.getConnection(“jdbc:jtds:sqlserver://localhost:1433/Sistema;user=sa”);
    if (con != null){
    System.out.println(“Sucesso”);
    }
    }
    catch(Exception e){
    e.printStackTrace();
    System.out.println("Error Trace in getConnection() : " + e.getMessage());
    }//try
    }

    public void service(ServletRequest req, ServletResponse res)
    throws ServletException, IOException{

         String assunto;   
         String descricao_questao;
     String alternativa[] = {"a","b","c","d"};
         String descricao_alt[]= new String[4];
         String alter_correta;
         String Voltar;
         String backUrl;
         String command = "";
         boolean error = false;
         int cont;
    
         command = req.getParameter("command");
    

    /*Recebe dados do cadastro de questoes do formulário professor/

         if(command.equals("OK")){
            assunto = req.getParameter("assunto");
            descricao_questao = req.getParameter("descricao_questao");
            descricao_alt[0]= req.getParameter("alt_a");
            descricao_alt[1]= req.getParameter("alt_b");
            descricao_alt[2]= req.getParameter("alt_c");
            descricao_alt[3]= req.getParameter("alt_d");
        alter_correta = req.getParameter("alter_correta");
           
            PrintWriter out = res.getWriter();
            res.setContentType("text/html");
                    
         }//if command ok
         
          PrintWriter out = res.getWriter();
          res.setContentType("text/html"); 
    

    }//service

    /** Destroys the servlet.
    */
    public void destroy() {
    try{
    con.close();
    }catch(Exception e){
    System.err.println(“Problemas ao fechar o banco de dados”);
    }
    }//destroy
    }[/code]

Seu código me pareceu normal e deveria rodar numa boa.
Você recebe alguma mensagem de erro? Você conseguiu executar o seu Servlet depois?

ps: não sei se você tem conhecimento, mas o método init() é executado quando o servlet é carregado (criado) e não toda vez que é executado.

[quote=danieldestro]Seu código me pareceu normal e deveria rodar numa boa.
Você recebe alguma mensagem de erro? Você conseguiu executar o seu Servlet depois?

ps: não sei se você tem conhecimento, mas o método init() é executado quando o servlet é carregado (criado) e não toda vez que é executado.[/quote]

Acho que é esse o problema…eu achava que toda vez q o servlet é executado ele executava o método init.
Então, não aparece nenhuma mensagem de erro, nem a mensagem de q a conexão foi um sucesso. Vc saberia me dizer como faço para imprimir algo no método init, pois assim ficarei sabendo se minha conexão foi um sucesso ou não.

obrigada,

Sta. Leisley

Pelo jeito o Tomcat mudou o output padrão para outro lugar que não seja o console de sua app.

Tenta fazer algo como servletConfig.getServletContext().log(“sucesso”);
e veja se logou com sucesso.

O melhor eh mudar todo o seu codigo. Servlets nao podem ter variaveis de instancia (ao menos que vc saiba exatamente o que esta fazendo / conheca as conseguencias). Logo, vc nao deveria ter

private Statement stm = null;
private Connection con = null;

essas declaracoes. Da mesma maneira, mova o codigo do metodo init() para um outro metodo qualquer e use e chame ele “toda vez” no servce() / doGet() / doPost().

ps: claro que “toda vez” eh uma generilzacao. Voce pode dar um Class.forName() no init() apenas, e entao usar o DriverManager em outro lugar para pegar a conexao.
Mas da maneira como vc fez nao vai funcionar mesmo / vai dar problemas logo logo, quanto mais de um usuario acessar a aplicacao

Rafael

Ou então use os bons padrões de projeto (design patterns)…

Absolutamente. Seria a “evolucao natural”.

Rafael