Dúvida como mandar mensagem de erro ao invés do HTTP STATUS 500 java.nullpointer.exception

1 resposta
G

Tenho uma classe que conectar ao banco de dados e quando eu importo ela para conectar dentro do jsp da tudo certo, o problema e que eu estou tentando fazer emitir uma exception para que quando o nome ou senha do úsuario esteja errado ou não exista ao invés de apareçer (HTTP STATUS 500 javalang.nullpointerexception) apareça uma simples mensagem de erro.

Aqui está a minha classe de conexão com o banco.

package classes;

import java.sql.*;


public class Conexao{
  public Connection conectar(){
    
    String url = "jdbc:postgresql://localhost/java_site"; // Quando modificar aqui exibir mensagem de erro para o usuario final ao invés do HTTP 500.
    String usuario = "postgres"; // Quando modificar aqui exibir mensagem de erro para o usuarioi final ao invés do HTTP 500.
    String senha = "maclar1m"; // Quando modificar aqui exibir mensagem de erro para o usuarioi final ao invés do HTTP 500.

    try{
      Class.forName("org.postgresql.Driver").newInstance();
      Connection conn = DriverManager.getConnection(url, usuario, senha);
      return conn;
    }
    catch(NullPointerException nullerro)
    {
      System.out.println("Usuario ou Senhas Inválidos "+nullerro.getMessage());
      return null;
    }
    catch(SQLException ex){
      System.out.println("SQLException: " + ex.getMessage());
      System.out.println("SQLState: " + ex.getSQLState());
      System.out.println("VendorError: " + ex.getErrorCode());
      return null;
    }
    catch(Exception e){
      System.out.println("Problemas ao tentar conectar com o banco de dados: " + e);
      return null;
    }
  }
}

e aqui está o meu jsp

<%-- 
    Document   : index
    Created on : 23/06/2012, 04:10:16
    Author     : Geyson
--%>

<%@page import="java.sql.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8" import="classes.Conexao"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>
            <%
                Conexao acesso = new Conexao();

                Connection caminho = acesso.conectar();

                if (caminho != null) {
                    out.println("Conexão efetuada com sucesso!<br/>" + caminho);
                } else {
                    out.println("Não foi possivel estabeleçer conexão.");
                    finalize();
                }

                Statement st = caminho.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

                ResultSet rs = st.executeQuery("select * from bairro order by bai_codigo");
               
            %>
         </p>

    </h1>
</body>
</html>

da maneira como está, ta conectando e exibindo a mensagem conexão realizada com sucesso, porém se eu modifico os valores do acesso ao banco ele exibe o HTTP STATUS 500 mais eu quero que exiba uma mensagem.

Sou iniciante, obrigado a todos que poderem me ajudar.

1 Resposta

gmmascarin

Seu problema está ocorrendo porque o método conectar está entrando no catch e retornando null. O jsp entra no else e acaba chamando o finalize.
Recomendo que você faça com servlets e evite usar <% %> nas suas páginas. Não é uma boa prática e pode te dar dor de cabeça quando seu sistema começar a crescer. MVC é uma boa pedida também.

Criado 23 de junho de 2012
Ultima resposta 23 de jun. de 2012
Respostas 1
Participantes 2