Como mostrar Exception con PrintWriter?

alejandro
31 de Agosto del 2009
Estoy haciendo este servlet para validar los datos de un login, pero no sé que debo hacer para mostrar mis mensajes de excepciones en la pantalla:
He declarado PrintWriter al principio de la clase, y en el metodo BooleanLogin quiero ocupar out.println para mostrar mis mensajes de error, al ejecutar los datos en el login no muestra nada y no sé si estoy conectado a la BDD o si ocurrio alguna cosa.

Como puedo solucionar el problema para mostrar los mensajes de error formulados por excepciones en pantalla y el mensaje si estoy conectado a la BDD?

gracias
--------------------------------------------------------------------------------

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

public class LoginServletSql extends HttpServlet
{
PrintWriter out; //printWriter declarado


public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
sendLoginForm(response,false);
}//fin doGet

private void sendLoginForm(HttpServletResponse response, boolean withErrorMessage)
throws ServletException,IOException
{
response.setContentType("text/html");
PrintWriter out= response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>Login</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<CENTER>");

if(withErrorMessage)
out.println("Login failed. Please try again.<BR>");
out.println("<BR>");
out.println("<BR><H2>Login Page</H2>");
out.println("<BR>");
out.println("<BR>Please enter your user name and password.");
out.println("<BR>");
out.println("<BR><FORM METHOD=POST>");
out.println("<TABLE>");
out.println("<TR>");
out.println("<TD>User Name:</TD>");
out.println("<TD><INPUT TYPE=TEXT NAME=userName></TD>");
out.println("</TR>");
out.println("<TR>");
out.println("<TD>Password:</TD>");
out.println("<TD><INPUT TYPE=PASSWORD NAME=password></TD>");
out.println("</TR>");
out.println("<TR>");
out.println("<TD ALIGN=RIGHT COLSPAN=2>");
out.println("<INPUT TYPE=SUBMIT VALUE=Login></TD>");
out.println("</TR>");
out.println("</TABLE>");
out.println("</FORM>");
out.println("</CENTER>");
out.println("</BODY>");
out.println("</HTML>");
}//fin sendLoginForm

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException
{
String userName= request.getParameter("UserName");
String password =request.getParameter("password");
if(login(userName,password))
{
RequestDispatcher rd=request.getRequestDispatcher("mensaje/Mensaje");
rd.forward(request,response);
}//fin if
else
{
sendLoginForm(response,true);
}//fin else
}//fin doPost

//metodo de conexion

Boolean login(String userName,String password)

{
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost/prueba","root","");
out.println("got connection");
Statement s = con.createStatement();
String sql ="SELECT UserName FROM Users"+ "WHERE UserName\'"+userName+"\'"+ "AND Password=\'"+password+"\'";
ResultSet rs = s.executeQuery(sql);
if(rs.next())
{
rs.close();
s.close();
con.close();
return true;
}//fin if
rs.close();
s.close();
con.close();

} //fin try

catch(ClassNotFoundException e)
{

out.println("Exception:"+e.toString());
}//fin primer catch

catch(SQLException e)
{
out.println("Exception:"+e.toString());
}//fin segundo catch

catch(Exception e)
{
out.println("Exception:"+e.toString());
}//fin tercer catch

return false;

}//fin Boolean login

}//fin clase

jdiscolo
31 de Agosto del 2009
Te recomiendo que para eso utilices log4j y que te acostumbres a generar mensajes de trazas en un fichero, así podrás depurar tu programa más fácilmente.

Respondiendo a tu pregunta, el método getMessage() te devuelve la causa del error, en lugar de usar toString(). Si quieres que salga toda la pila de la excepción por la salida estándar de error puedes utilizar printStackTrace()

Saludos