Chamar método em um servlet

6 respostas
A

Nesse exemplo abaixo tenho um while que retorna todos os candidatos a prefeitos da cidade escolhida de um combo do jsp anterior, e seguido de um caixa de texto que retorna a quantidade de votos que cada prefeito tem lançado no banco de dados, como faço para quando clicar no botão Atualizar, salvar os novos resultados digitados na caixa de texto no banco de dados, a parte do SQL eu sei, só não sei como faço ao clicar no Atualizar chamar um método no servlet.

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Lancar extends HttpServlet {
    Connection con;
    Statement stm;
    ResultSet res;
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String cidade=request.getParameter("cidade");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con=DriverManager.getConnection("jdbc:mysql://localhost/resul_eleicoes","root","");
            stm=con.createStatement();
            res=stm.executeQuery("select * from prefeitos where cidade='"+cidade+"'");
            res.last();
            int t=res.getRow();
            res.beforeFirst();
            String[] candidato = new String[t];
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Lancar Votos</title>");
            out.println("</head>");
            out.println("<body bgcolor=#CDC9C9><center>");
            out.println("<h2>Lancar Votos</h2><table border='1' width='150'>");
            out.println("<table border='1' width='200'>");
            int i=0;
            while(res.next()) {
                out.println("<tr><td><b>"+res.getString("nome")+":</b></td><td> <input type='text' name='"+res.getString("numero")+"' value='"+res.getString("votos")+"' size='6' maxlength='6'></td></tr>");
                candidato[i]=res.getString("numero");
                i++;
            }
            out.println("</table>");
            out.println("<input type='button' name='atualizar' value='Atualizar' onClick=atualizar()>");
            out.println("<br><br><a href=lancavotos.jsp>Voltar</a>");
            out.println("</center></body>");
            out.println("</html>");
        } catch (SQLException e) {
        } catch (ClassNotFoundException e) {
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
    /** 
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

6 Respostas

J

A principio, não é uma boa pratica vc juntar a parte de SQL com a parte WEB, vc deve sequir o padrão MVC.
Em relação ao seu problema.
1. Vc deve ter um form

<form action="servletcontrole" method="POST">

2. O botão pode ser submit

<input type="submit" name="botao" value="Cadastrar"/>

3. E na sua servlet no metodo POST vc testa o botão q o kra clicou

if(Cadastrar(request.getParameter("botao"))) {

//seu codigo aki

}
R

MVC!!
Cadastro.jsp == > Servlet == > Bean(classe) ==> Servlet == > Resultado.jsp

1- No action do seu formulario vc especifica para qual servlet (para onde) o seu dados serão processado .
O campo values sera o valor que sera enviada para a serlvet(no nosso caso) então vc nao precissa digitar nada porque o valor sera digitado pelo usuario por exemplo o se o usuario digitar ‘Rodrigo’ em uma text o value desta text sera “value = ‘Rodrigo’”.
2- Na servlet vc trata os dados e chama uma classe (bean) para cuidadar da regra de negocio l
3 - No bean toda regra de negocio eh feita e por exemplo retorna um valor para a servlet .
5 - A servlet verifica o retorna do bean e redireciona
6 - O jsp exibi a msg!!!

J

? cade seu javascript Atualizar() ?

  • mapeia no web.xml um outra servlet. E chama ela !!
A
Estava fazendo do jeito que o João Paulo me informou, mais da erro no if abaixo:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
        if(Atualizar()) {
            res.beforeFirst();
            for(int i=0;i<t;i++) {
                res.next();
                stm.executeUpdate("update prefeitos set votos=getParameterById('"+res.getString("numero")+"') where cidade='"+cidade+"' and numero='"+res.getString("numero")+"'");
            }
        } 
    }

Fiz do jeito que ele tinha passado mais tava dando erro, então retirei o request.getParameter("atualizar"), o erro que mostra é tipos imcompatíveis
found: Atualizar
required: boolean

Segue código como está ficando.

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Lancar extends HttpServlet {
    Connection con;
    Statement stm;
    ResultSet res;
    String cidade;
    int t;
    String[] candidato;
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        cidade=request.getParameter("cidade");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con=DriverManager.getConnection("jdbc:mysql://localhost/resul_eleicoes","root","");
            stm=con.createStatement();
            res=stm.executeQuery("select * from prefeitos where cidade='"+cidade+"'");
            res.last();
            t=res.getRow();
            res.beforeFirst();
            candidato = new String[t];
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Lancar Votos</title>");
            out.println("</head>");
            out.println("<body bgcolor=#CDC9C9><center>");
            out.println("<h2>Lancar Votos</h2>");
            out.println("<form action='servletcontrole' method='post'>");
            out.println("<table border='1' width='200'>");
            while(res.next()) {
                out.println("<tr><td><b>"+res.getString("nome")+":</b></td><td> <input type='text' id='"+res.getString("numero")+"' value='"+res.getString("votos")+"' size='6' maxlength='6'></td></tr>");
            }
            out.println("</table>");
            out.println("<input type='submit' name='atualizar' value='Atualizar'/>");
            out.println("</form>");
            out.println("<br><br><a href=lancavotos.jsp>Voltar</a>");
            out.println("</center></body>");
            out.println("</html>");
        } catch (SQLException e) {
        } catch (ClassNotFoundException e) {
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
    /** 
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
        if(Atualizar()) {
            res.beforeFirst();
            for(int i=0;i<t;i++) {
                res.next();
                stm.executeUpdate("update prefeitos set votos=getParameterById('"+res.getString("numero")+"') where cidade='"+cidade+"' and numero='"+res.getString("numero")+"'");
            }
        } 
    }

    /** 
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
J
Correção
//Faltou declarar essa constante
private static final String Acao_Cadastrar="Cadastrar";//esse 'Cadastrar' tem q ser igual ao value do botão

if(Cadastrar(request.getParameter("botao"))) {  
  
//seu codigo aki  
  
}
A

Continua dando o erro no if abaixo:
imcompatible tybles
found: Atualizar
required: boolean

cannot find symbol
symbol: method Atualizar(java.lang.String)
location: class Lancar

protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
        if(Atualizar(request.getParameter("botao"))) {
            res.beforeFirst();
            while(res.next()) {
                try {
                    stm.executeUpdate("update prefeitos set votos=getParameterById('"+res.getString("numero")+"') where cidade='"+cidade+"' and numero='"+res.getString("numero")+"'");
                } catch (SQLException e) {
                }
            }
        } 
    }

Segue abaixo o Servlet completo:

import java.io.*;
import java.sql.*;
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Lancar extends HttpServlet {
    Connection con;
    Statement stm;
    ResultSet res;
    private String cidade;
    private static final String Acao_Atualizar="Atualizar";
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        cidade=request.getParameter("cidade");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con=DriverManager.getConnection("jdbc:mysql://localhost/resul_eleicoes","root","");
            stm=con.createStatement();
            res=stm.executeQuery("select * from prefeitos where cidade='"+cidade+"'");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Lancar Votos</title>");
            out.println("</head>");
            out.println("<body bgcolor=#CDC9C9><center>");
            out.println("<h2>Lancar Votos</h2>");
            out.println("<form action='servletcontrole' method='post'>");
            out.println("<table border='1' width='200'>");
            while(res.next()) {
                out.println("<tr><td><b>"+res.getString("nome")+":</b></td><td> <input type='text' id='"+res.getString("numero")+"' value='"+res.getString("votos")+"' size='6' maxlength='6'></td></tr>");
            }
            out.println("</table>");
            out.println("<input type='submit' name='botao' value='Atualizar'>");
            out.println("</form>");
            out.println("<br><br><a href=lancavotos.jsp>Voltar</a>");
            out.println("</center></body>");
            out.println("</html>");
        } catch (SQLException e) {
        } catch (ClassNotFoundException e) {
        } finally {
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
    /** 
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
        if(Atualizar(request.getParameter("botao"))) {
            res.beforeFirst();
            while(res.next()) {
                try {
                    stm.executeUpdate("update prefeitos set votos=getParameterById('"+res.getString("numero")+"') where cidade='"+cidade+"' and numero='"+res.getString("numero")+"'");
                } catch (SQLException e) {
                }
            }
        } 
    }

    /** 
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
Criado 4 de novembro de 2008
Ultima resposta 4 de nov. de 2008
Respostas 6
Participantes 4