Como mostrar Exception con PrintWriter?
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
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
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
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
