Erro com Double e Interger no JSP

Olá estou tentando pegar os parâmetros pelo meu jsp da minha classe Conta.java os valores em Double e Int. Mas, não estou conseguindo, sempre da o seguinte erro: java.lang.NumberFormatException: empty String.

<%
Conta conta = new Conta();


conta.setSaldo(Double.parseDouble(request.getParameter("saldo")));
conta.setLimite(Double.parseDouble(request.getParameter("limite")));

ContaDao contaDao = new ContaDao();
contaDao.setConta(conta);
contaDao.inserir();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<jsp:include page="Menu.jsp" />
	<form method="post" action="Conta.jsp">
	<fieldset>
		Agencia: <input type="text" name="agencia" id="idAgencia" />
		<br>
		Saldo: <input type="text" name="saldo" id="idSaldo" />
		<br>
		Limite: <input type="text" name="limite" id="idLimite" />
		<br>
		<input type="reset" name="limpar" value="Limpar" id="btEnviar">
		<input type="submit" name="enviar" value="Enviar" id="btLimpar">
	</fieldset>
	</form>
</body>
</html>

Poste o resto do seu projeto.

{ },s.


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

public class ContaDao {

    private Conta conta;
    private List<Conta> contas;
    private Connection conn;

    public ContaDao() {
        DBConnection banco = DBConnection.getInstance();
        this.setConn(banco.getConexao());
    }

    public void inserir() {
        try {
            PreparedStatement exec = this.getConn().prepareStatement("INSERT INTO "
                    + "conta (agencia, pessoa, saldo, limite) VALUES "
                    + "(?,?,?,?)");
            exec.setInt(1, this.getConta().getAgencia().getNumero());
            exec.setInt(2, this.getConta().getCorrentista().getIdCorrentista());
            exec.setDouble(3, this.getConta().getSaldo());
            exec.setDouble(4, this.getConta().getLimite());
            exec.executeUpdate();

        } catch (SQLException ex) {
            Logger.getLogger(ContaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void alterar() {
        try {
            PreparedStatement exec = this.getConn().prepareStatement("UPDATE conta\n"
                    + "SET agencia = ?, pessoa = ?, saldo = ?, limite = ? "
                    + "WHERE idconta = ?");
            exec.setInt(1, this.getConta().getAgencia().getNumero());
            exec.setInt(2, this.getConta().getCorrentista().getIdCorrentista());
            exec.setDouble(3, this.conta.getSaldo());
            exec.setDouble(4, this.getConta().getLimite());
            exec.setInt(5, this.conta.getNumero());
            exec.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(ContaDao.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void apagar() {
        try {
            PreparedStatement exec = this.getConn().prepareStatement("DELETE "
                    + "FROM conta WHERE idconta=?");
            exec.setInt(1, this.conta.getNumero());
            exec.executeUpdate();
        } catch (SQLException ex) {
            Logger.getLogger(ContaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void localizarNome(String nome) {
        this.contas = new ArrayList<Conta>();
        try {
            PreparedStatement exec = this.getConn().prepareStatement("SELECT idconta,"
                    + " agencia, pessoa, saldo, limite, nm_pessoa, nm_endereco, "
                    + "cpf, cnpj,idade,"
                    + "DATE_FORMAT(dataNascimento,'%d/%m/%Y') as dataNascimento, "
                    + "nomeFantasia, estadoCivil, sexo, nm_agencia, "
                    + "nm_endereco as nm_endAgencia "
                    + "FROM pessoa, conta where conta.pessoa=pessoa.idpessoa "
                    + "and conta.agencia=agencia.idagencia "
                    + "and nm_pessoa like ?");
            exec.setString(1, "%"+ nome + "%");
            ResultSet result= exec.executeQuery();
            Agencia agencia;
            Correntista correntista;
            Conta conta;
            while (result.next()){
                agencia = new Agencia();
                conta = new Conta();
                correntista = new Correntista();
                agencia.setNumero(result.getInt("idagencia"));
                agencia.setNome("nm_agencia");
                agencia.setEndereco("nm_endereco");
                conta.setNumero(result.getInt("idconta"));
                conta.setSaldo(result.getDouble("saldo"));
                conta.setLimite(result.getDouble("limite"));
                conta.setAgencia(agencia);
                
                correntista.setIdCorrentista(result.getInt("idpessoa"));
                correntista.setNome(result.getString("nm_pessoa"));
                correntista.setEndereco(result.getString("dataNascimento"));
                if (result.getString("cpf").isEmpty()) {
                    ((PessoaFisica)correntista).setCpf(result.getString("cpf"));
                    ((PessoaFisica)correntista).setDataNascimento("dataNascimento");
                    ((PessoaFisica)correntista).setEstadoCivil(result.getInt("estadoCivil"));
                    ((PessoaFisica)correntista).setIdade(result.getInt("idade"));
                    ((PessoaFisica)correntista).setSexo(result.getString("sexo"));
                } else {
                    ((PessoaJuridica)correntista).setCnpj(result.getString("cnpj"));
                    ((PessoaJuridica)correntista).setNomeFantasia("nomeFantasia");

                    PreparedStatement execSocio = this.getConn().prepareStatement(
                            "SELECT pessoaJuridica,"
                            + " socios FROM pessoa"
                            + " where pessoaJuridica = ?");
                    execSocio.setInt(1, correntista.getIdCorrentista());
                    
                    ResultSet resultSocio = execSocio.executeQuery();
                    PessoaFisica pessoaF;
                    while (resultSocio.next()) {
                        pessoaF = new PessoaFisica();
                        pessoaF.setNome(result.getString("nm_pessoa"));
                        pessoaF.setEndereco(result.getString("nm_Endereco"));
                        pessoaF.setCpf(result.getString("cpf"));
                        pessoaF.setIdade(result.getInt("idade"));
                        pessoaF.setIdCorrentista(result.getInt("idpessoa"));
                        pessoaF.setDataNascimento(result.getString("dataNascimento"));
                        pessoaF.setEstadoCivil(result.getInt("estadoCivil"));
                        pessoaF.setSexo(result.getString("sexo"));
                        ((PessoaJuridica)correntista).setSocios(pessoaF);
                    }
                }
                conta.setCorrentista(correntista);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ContaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

        public void localizarId(int idconta) {
        this.contas = new ArrayList<Conta>();
        try {
            PreparedStatement exec = this.getConn().prepareStatement("SELECT idconta,"
                    + " agencia, pessoa, saldo, limite, nm_pessoa, nm_endereco, "
                    + "cpf, cnpj,idade,"
                    + "DATE_FORMAT(dataNascimento,'%d/%m/%Y') as dataNascimento, "
                    + "nomeFantasia, estadoCivil, sexo, nm_agencia, "
                    + "nm_endereco as nm_endAgencia "
                    + "FROM pessoa, conta where conta.pessoa=pessoa.idpessoa "
                    + "and conta.agencia=agencia.idagencia "
                    + "and idconta = ?");
            exec.setInt(1, idconta);
            ResultSet result= exec.executeQuery();
            Agencia agencia;
            Correntista correntista;
            Conta conta;
            while (result.next()){
                agencia = new Agencia();
                conta = new Conta();
                correntista = new Correntista();
                agencia.setNumero(result.getInt("idagencia"));
                agencia.setNome("nm_agencia");
                agencia.setEndereco("nm_endereco");
                conta.setNumero(result.getInt("idconta"));
                conta.setSaldo(result.getDouble("saldo"));
                conta.setLimite(result.getDouble("limite"));
                conta.setAgencia(agencia);
                
                correntista.setIdCorrentista(result.getInt("idpessoa"));
                correntista.setNome(result.getString("nm_pessoa"));
                correntista.setEndereco(result.getString("dataNascimento"));
                if (result.getString("cpf").isEmpty()) {
                    ((PessoaFisica)correntista).setCpf(result.getString("cpf"));
                    ((PessoaFisica)correntista).setDataNascimento("dataNascimento");
                    ((PessoaFisica)correntista).setEstadoCivil(result.getInt("estadoCivil"));
                    ((PessoaFisica)correntista).setIdade(result.getInt("idade"));
                    ((PessoaFisica)correntista).setSexo(result.getString("sexo"));
                } else {
                    ((PessoaJuridica)correntista).setCnpj(result.getString("cnpj"));
                    ((PessoaJuridica)correntista).setNomeFantasia("nomeFantasia");

                    PreparedStatement execSocio = this.getConn().prepareStatement(
                            "SELECT pessoaJuridica,"
                            + " socios FROM pessoa"
                            + " where pessoaJuridica = ?");
                    execSocio.setInt(1, correntista.getIdCorrentista());
                    
                    ResultSet resultSocio = execSocio.executeQuery();
                    PessoaFisica pessoaF;
                    while (resultSocio.next()) {
                        pessoaF = new PessoaFisica();
                        pessoaF.setNome(result.getString("nm_pessoa"));
                        pessoaF.setEndereco(result.getString("nm_Endereco"));
                        pessoaF.setCpf(result.getString("cpf"));
                        pessoaF.setIdade(result.getInt("idade"));
                        pessoaF.setIdCorrentista(result.getInt("idpessoa"));
                        pessoaF.setDataNascimento(result.getString("dataNascimento"));
                        pessoaF.setEstadoCivil(result.getInt("estadoCivil"));
                        pessoaF.setSexo(result.getString("sexo"));
                        ((PessoaJuridica)correntista).setSocios(pessoaF);
                    }
                }
                conta.setCorrentista(correntista);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ContaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
        
    public Conta getConta() {
        return conta;
    }

    public void setConta(Conta conta) {
        this.conta = conta;
    }

    public List<Conta> getContas() {
        return contas;
    }

    public void setContas(List<Conta> contas) {
        this.contas = contas;
    }

    public Connection getConn() {
        return conn;
    }

    public void setConn(Connection conn) {
        this.conn = conn;
    }

}



public class Conta {

    private Agencia agencia;
    private Correntista correntista;
    private int numero;
    private double saldo;
    private double limite;

    public void depositar(double depositar) {
        this.setSaldo(this.getSaldo() + depositar);
    }

    public void sacar(double valor) {
        if ((this.getSaldo() + this.getLimite() - valor) > 0) {
            this.setSaldo(this.getSaldo() - valor);
        }
    }

    public double saldo() {
        return this.saldo;
    }

    public void criarConta(Correntista correntista, Agencia agencia) {
        this.setCorrentista(correntista);
        this.setAgencia(agencia);
        this.setLimite(0);
        this.setSaldo(0);
    }

    public void setAgencia(Agencia agencia) {
        this.agencia = agencia;
    }

    public Agencia getAgencia() {
        return this.agencia;
    }

    public void setCorrentista(Correntista correntista) {
        this.correntista = correntista;
    }

    public Correntista getCorrentista() {
        return this.correntista;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public int getNumero() {
        return this.numero;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    public double getSaldo() {
        return this.saldo;
    }

    public void setLimite(double limite) {
        this.limite = limite;
    }

    public double getLimite() {
        return this.limite;
    }

}

@Daniel_Dias aqui está!

vamos la

é por isso que se usa servlets pra fazer este tipo de coisa

vejamos: vc pode chamar esse jsp de varias formas. se eu carregar esse jsp passando o caminho completo ( ou seja meu browser vai fazer um GET ) e, nesse caso, eu nao tenho os parametros saldo ou limite.

portanto a primeira coisa que vc tem que fazer é VALIDAR OS INPUTS.

  1. vc só deve inserir se conseguir pegar os parametros corretos.
  2. vc só deve inserir se o request for um POST
  3. no POST vc deve validar se existe algum valor em saldo e limite antes de tentar setar.
  4. na sua abordagem vc ignora se conseguiu inserir ou não
  5. pior, vc abusa dos setters. faria mais sentido isso:
// verifica se é POST
// verifica se o parametro saldo existe e retorna algo util
double saldo = ...
// verifica se o parametro limite existe e retorna algo util
double limite = ...
Conta conta = new Conta( saldo, limite );
ContaDAO dao = new ContaDAO();
boolean success = dao.inserir( conta ); /* ou pode ser void e lançar exception se nao conseguir inserir*/

de novo, nao coloca isso na JSP. scriptlets é algo do demonio pra testar e depurar. prefira servlets. só use jsp com codigo se vc tem uma boa razão pra isso ( esta estudando, o codigo é legado, etc ) hoje em dia o que se usa são TAG LIBS e vc pode inclusive desabilitar os scriptlets do jsp.

agora o resto do seu projeto tem decisões curiosas de design. não sei se são boas ou ruins, o tempo dirá. de uma lida no material que eu te passei.

evite abusar de getters / setters. as vezes eles não fazem sentido. eu sei q a primeira coisa q ensinam na faculdade é o construtor, instanciar e get/set mas nem toca a classe precisa de setters pra tudo. no caso do DAO é algo totalmente desnecessario. o Dao SALVA coisas. ele nao precisa ter uma conta pra salva-la.

porem se vc quer fazer assim, blza fera, vai em frente. não sou o dono da verdade. mas vc vai ter mais dificuldades pra evoluir esse modelo de dados e nem falamos em testes (unitarios ou não)