Sistema não grava nem altera dados

Boa noite, estou com um sistema e ele não está gravando nem alterando dados, somente listando e excluindo, ainda não consegui resolver o problema, se alguém puder dar um help…

cadastroCLiente.jsp

<body>
        <%

            String nome = request.getParameter("nome");

            if(nome != null)
            {
        %>
                <jsp:useBean id="cliente" class="br.com.sistemaFinal.Cliente" scope="session" />
                <jsp:setProperty name="cliente" property="*" />
                <jsp:useBean id="dao" class="br.com.sistemaFinal.ClienteDAO" />
        <%
                dao.gravaDados(cliente);
        %>
                <jsp:forward page="clientes.jsp" />
        <%
            }else{

        %>
        <h1>Novo Cliente</h1>

        <form method="POST">
            <table border="0">
                <tr>
                    <td>Nome:</td><td><input type="text" name="nome" /></td>
                </tr>
                <tr>
                    <td>Endereço:</td><td><input type="text" name="endereco" /></td>
                </tr>
                <tr>
                    <td>Telefone:</td><td><input type="text" name="telefone" /></td>
                </tr>
                <tr>
                    <td><input type="submit" value="Cadastrar" /></td>
                </tr>
            </table>
        </form>
        <%

            }

        %>
    </body>

clienteDao

package br.com.sistemaFinal;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author windows
 */
public class ClienteDAO {

    private Connection connection;

    public ClienteDAO() throws SQLException{
        connection = ConnectionFactory.getConnection();
    }

   public List<Cliente> getLista() throws SQLException{
        PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM cliente");
        ResultSet rs = stmt.executeQuery();
        List<Cliente> cli = new ArrayList<Cliente>();
        while(rs.next()){

            Cliente cliente = new Cliente();
            cliente.setIdCliente(Integer.parseInt(rs.getString("idCliente")));
            cliente.setNome(rs.getString("nome"));
            cliente.setEndereco(rs.getString("endereco"));
            cliente.setTelefone(rs.getString("telefone"));

            cli.add(cliente);

        }

        rs.close();
        stmt.close();
        return cli;
    }

   public List<Cliente> getCliente(Cliente cliente) throws SQLException{
        PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM cliente WHERE idCliente = ?");
        stmt.setInt(1, cliente.getIdCliente());
        ResultSet rs = stmt.executeQuery();
        List<Cliente> cli = new ArrayList<Cliente>();
        while(rs.next()){

            cliente.setIdCliente(Integer.parseInt(rs.getString("idCliente")));
            cliente.setNome(rs.getString("nome"));
            cliente.setEndereco(rs.getString("endereco"));
            cliente.setTelefone(rs.getString("telefone"));

            cli.add(cliente);

        }

        rs.close();
        stmt.close();
        return cli;
    }

   public boolean verificaCliente(Cliente cliente){

        try{
            PreparedStatement stmt = this.connection.prepareStatement("SELECT * FROM cliente WHERE nome  = '?' AND telefone = '?'");
            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getTelefone());
            ResultSet rs = stmt.executeQuery();

            if(rs != null){
                rs.close();
                stmt.close();
                return false;
            }else{
                rs.close();
                stmt.close();
                return true;
            }
        } catch (SQLException ex){

            System.out.print(ex.getMessage());
            return false;

        }
    }

    public void gravaDados (Cliente cliente) {
        PreparedStatement stmt;

        try {
            stmt = this.connection.prepareStatement("Insert into cliente (nome,endereco,telefone) values ('?','?','?')");

            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getEndereco());
            stmt.setString(3, cliente.getTelefone());
            System.out.print(stmt.toString());
            stmt.execute();
            stmt.close();

        } catch (SQLException ex){

            System.out.print(ex.getMessage());

        }

    }

     public void editar (Cliente cliente) {
        PreparedStatement stmt;

        try {
            stmt = this.connection.prepareStatement("UPDATE cliente SET nome='?',endereco='?',telefone='?' WHERE idCliente=?");

            stmt.setString(1, cliente.getNome());
            stmt.setString(2, cliente.getEndereco());
            stmt.setString(3, cliente.getTelefone());
            stmt.setInt(4, cliente.getIdCliente());
            System.out.print(stmt.toString());
            stmt.execute();
            stmt.close();

        } catch (SQLException ex){

            System.out.print(ex.getMessage());

        }

    }

    public void excluirCliente (Cliente cliente) {
        PreparedStatement stmt;

        try {
            stmt = this.connection.prepareStatement("DELETE FROM cliente WHERE idCliente = ?");

            stmt.setInt(1, cliente.getIdCliente());
            System.out.print(stmt.toString());
            stmt.execute();
            stmt.close();

        } catch (SQLException ex){

            System.out.print(ex.getMessage());

        }

    }
}

Qualquer ajuda é bem vinda… achei que não precisava postar os gets e sets…

Ele tá caindo no catch? Coloca a mensagem que tá dando. Aparentemente tá certinho o código, mas só vendo o erro mesmo pra saber o problema.

Não da erro nenhum, ele simplesmente não grava nem altera os dados.