![]() |
|
|||||||
| Informática y Tecnología A los amantes ... y no tan amantes de las computadoras, gadgets y la tecnología. Un foro para preguntar, aprender, informarse y salir de dudas. |
![]() |
|
|
LinkBack | Herramientas | Buscar en Tema | Calificar Tema | Desplegado |
|
|
#1 (permalink) | ||
|
|
Bueno esta es una oportunidad para defender a java...
sucede que ya tengo 3 dias tratando de hacer una conexion con Netbeans+driver jdbc+mysql todo esto en un servlets y nomas no puedo.... curiosamente probe con un JSP y funciono sin problemas, despues de buscar opciones y bajar muchos codigos. logre hacerlo funcionar... pero el maestro no lo quiere con JSP sino con servlets.. bien el codigo en jsp es el siguiente Cita:
Cita:
classpath, driver, configurar driver ya esta echo, puesto que con el jsp me conecta... pero nunca lo hace con el servlets... ahora ven por que odio java!!! ![]() ![]() ![]() ![]()
__________________
S L A C K W A R E Linux... http://fd0xh.wordpress.com/ ![]() ![]() Los juguetes son para los niños Slackware no...... |
||
|
|
|
|
|
#2 (permalink) | ||
![]() |
Hace muchisimo que trabaje con servlets, asi que no recuerdo muy bien todo. Viendo tu codigo y lo que pones entre comentarios en doGet, busque en Google y esto encontre:
Cita:
Código PHP:
Avisame si lo resuelve, si no, con gusto busco con mas calma, pues es tecnologia que ya he manejado (hace como 7 an~os) y no me haria mal recordarla ![]() Cita:
Quieres algo para lo que es malo Java? Los templates. En C++ puedes crear eficientemente estructuras de datos primitivos usando templates como <int>,<char> y demas, pero en Java tienes que usar a fuerzas las wrapper clases, lo cual funciona, pero es ineficiente porque toma mas tiempo para procesar. Un amigo se queja mucho de los resultados que obtiene precisamente por esa razon. Yo uso los templates, pero a mucho mas alto nivel (con clases complejas), asi que no noto la diferencia hasta que me pongo a ver tiempos de ejecuciones.
__________________
![]() |
||
|
|
|
|
|
#3 (permalink) |
|
|
Ok. Ya vi cual es el problema.
El post va a ser largo, asi ke tenme un poco de paciencia. Código:
public class conexion extends HttpServlet {
...
protected void processRequest(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
/* TODO output your page here
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet BD</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet BD at " + request.getContextPath () + "</h1>");
out.println("</body>");
out.println("</html>");
*/
out.close();
}
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String SQL;
String bd = "escuela";
String login = "root";
String password = "1101";
String url = "jdbc:mysql://localhost:3306/escuela";
PrintWriter out = response.getWriter();
ResultSet resultado;
Statement sentencia;
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection(url,login,password);
if (conn != null) {
sentencia = conn.createStatement();
resultado = sentencia.executeQuery("select * from alumnos");
while(resultado.next()) {
out.println("<body bgcolor='#CC9933'>");
out.println("<table border='1' cellspacing='3' cellpadding='0' bgcolor='#666FFF' ><h4> <TR><TD> No Control </TD><TD><center> Nombre</center> </TD><TD><center> Apellido</center> </TD><TD><center> Carrera</center> </TD><TD></TD></TR>"+"<td> "+ resultado.getString("Id")+ "</td>"+"<td>"+ resultado.getString("Nombre")+ "</td>"+"<td>"+ resultado.getString("Apellido")+"</td>"+"<td>"+ resultado.getString("Telefono")+"</td></tr></table></h4>" );
}
conn.close();
}
} catch(SQLException ex) {
out.println("No se encontro la base de datos"+bd);
} catch(ClassNotFoundException ex) {
out.println(ex);
} catch(Exception exception) {
}
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
Primero, y como comento Yue, es mejor que proceses todos tus request en un solo metodo, ya sea utilizando el metodo service() o invocando un nuevo metodo desde doGet y doPost. La segunda forma sirve para cuando necesitas ejecutar codigo especifico para cada tipo de llamada antes de procesar lo comun al servicio. Siguiendo tu linea, voy a pasar todo el codigo al metodo processRequest: Código:
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void processRequest(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
/* TODO output your page here
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet BD</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet BD at " + request.getContextPath () + "</h1>");
out.println("</body>");
out.println("</html>");
*/
out.close();
String SQL;
String bd = "escuela";
String login = "root";
String password = "1101";
String url = "jdbc:mysql://localhost:3306/escuela";
PrintWriter out = response.getWriter();
ResultSet resultado;
Statement sentencia;
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection(url,login,password);
if (conn != null) {
sentencia = conn.createStatement();
resultado = sentencia.executeQuery("select * from alumnos");
while(resultado.next()) {
out.println("<body bgcolor='#CC9933'>");
out.println("<table border='1' cellspacing='3' cellpadding='0' bgcolor='#666FFF' ><h4> <TR><TD> No Control </TD><TD><center> Nombre</center> </TD><TD><center> Apellido</center> </TD><TD><center> Carrera</center> </TD><TD></TD></TR>"+"<td> "+ resultado.getString("Id")+ "</td>"+"<td>"+ resultado.getString("Nombre")+ "</td>"+"<td>"+ resultado.getString("Apellido")+"</td>"+"<td>"+ resultado.getString("Telefono")+"</td></tr></table></h4>" );
}
conn.close();
}
} catch(SQLException ex) {
out.println("No se encontro la base de datos"+bd);
} catch(ClassNotFoundException ex) {
out.println(ex);
} catch(Exception exception) {
}
}
Tu codigo de consulta a la DB estaba dentro de doPost, y al final de ese metodo invocabas processRequest. Seguramente abrias tu navegador, escribias el URL que apuntaba hacia tu servlet y le dabas enter. Tu servlet era invocado y respondia con... una pagina vacia! Ok, esto es porque ese un request tipo GET, que es el default. Para enviar un request POST, tiene que hacerse por medio de submitir una forma HTML o por AJAX (definiendo el request como POST en los atributos del REQUEST HEADER). Por lo tanto, tu codigo de consulta a la DB no se estaba ejecutando y, si te fijas, el codigo en processRequest que deberia escribir algo a la pagina esta comentado. O sea, pagina en blanco :P : Código:
...
/* TODO output your page here
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet BD</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet BD at " + request.getContextPath () + "</h1>");
out.println("</body>");
out.println("</html>");
*/
...
Ademas, si necesitas escribir el resultado de la consulta a la pagina, no puedes cerrar el PrinterOut antes de escribir! Manda ese out.close() hasta justo antes de salir del metodo. Ahora tu metodo processRequest luce de la siguiente manera: Código:
protected void processRequest(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String SQL;
String bd = "escuela";
String login = "root";
String password = "1101";
String url = "jdbc:mysql://localhost:3306/escuela";
ResultSet resultado;
Statement sentencia;
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection(url,login,password);
if (conn != null) {
sentencia = conn.createStatement();
resultado = sentencia.executeQuery("select * from alumnos");
while(resultado.next()) {
out.println("<body bgcolor='#CC9933'>");
out.println("<table border='1' cellspacing='3' cellpadding='0' bgcolor='#666FFF' ><h4> <TR><TD> No Control </TD><TD><center> Nombre</center> </TD><TD><center> Apellido</center> </TD><TD><center> Carrera</center> </TD><TD></TD></TR>"+"<td> "+ resultado.getString("Id")+ "</td>"+"<td>"+ resultado.getString("Nombre")+ "</td>"+"<td>"+ resultado.getString("Apellido")+"</td>"+"<td>"+ resultado.getString("Telefono")+"</td></tr></table></h4>" );
}
conn.close();
}
} catch(SQLException ex) {
out.println("No se encontro la base de datos"+bd);
} catch(ClassNotFoundException ex) {
out.println(ex);
} catch(Exception exception) {
}
out.close();
}
Código:
...
// --- Crea el BODY y TABLE solo una vez, antes de la consulta
out.println("<body bgcolor='#CC9933'>");
out.println("<table border='1' cellspacing='3' cellpadding='0' bgcolor='#666FFF'><TR><TD>No Control</TD><TD><center>Nombre</center></TD><TD><center>Apellido</center></TD><TD><center>Carrera</center></TD></TR>");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection(url,login,password);
if (conn != null) {
sentencia = conn.createStatement();
resultado = sentencia.executeQuery("select * from alumnos");
if (resultado.next() {
while(resultado.next()) {
out.println("<td>"+ resultado.getString("Id") + "</td><td>"+ resultado.getString("Nombre")+ "</td><td>"+ resultado.getString("Apellido")+"</td><td>"+ resultado.getString("Telefono")+"</td></tr>" );
}
conn.close();
} else {
// --- Si no hubo resultados, pon un mensaje dentro de la tabla
out.println("<TD colspan='4'>No se encontraron registros</TD>");
}
}
} catch(SQLException sqle) {
out.println("No se encontro la base de datos: " + bd);
} catch(ClassNotFoundException cnfe) {
out.println(cnfe);
} catch(Exception e) {
out.println(e)
}
// --- Cierra la tabla y el BODY
out.println("</table>");
out.println("</body>");
...
![]() No tuve chance de probar el codigo, asi ke no dudo ke por ahi se me haya ido un dedazo o una comilla, pero espero ke te sirva :P
__________________
"Solo los muertos ven el fin de la guerra" - Platón Última edición por Galo; 24-abr-2008 a las 12:03. |
|
|
|
|
|
#4 (permalink) |
|
|
Que onda, pues primero gracias por las respuestas, como comente ya andaba arto de eso por que bajaba ejemplos, uno tras o otro y ninguno me daba solucion, ya en la noche era como la 1, arto de eso empece a ver eso del request que mencionas galo y al hacer una prueba efectivamente ya me estaba mandando la respuesta. lo deje incompleto ya que solo queria que me mandara algo. y ahora voy a probar el codigo que sujieres, bueno uno de tantos :p.
gracias a yue tambien por la sumergida a la info. y lo de odiar java era sarcasmo, pero una parte si estaba arto de estar buscando info y nada. y lo preocupante es que es uno de esos maestros que te dan trabajos y se fusilan codigos y te dijen "debe de jalar". lo unico que me mantenia con la esperanza era el jsp que si funciono, pero el che servlets ya andaba hasta la mouseeeerrr!!! bueno grax por la ayuda ![]() ![]()
__________________
S L A C K W A R E Linux... http://fd0xh.wordpress.com/ ![]() ![]() Los juguetes son para los niños Slackware no...... |
|
|
|
|
|
#6 (permalink) |
|
|
ahahha xD no dudes ke ya haya puesto su agradecimiento el solo xD...
yo la verdad no sé de que demonios hablan, así que si por favor me explican que es jsp y que son los servlets... aquí a mi lado tengo un libro de java que me compraron en secundaria, pero le di una hojeada y no entendi ni madres... y ahorita hasta me da miedo abrirlo xD... apenas ando en Turbo C xDDDD y ando batallando con punteros y estructuras... tengo ke aventarme una sumergida a eso de programación... |
|
|
|
|
|
#7 (permalink) |
|
|
Pues ya supere esa prueba y ahora sigo con inserciones y demas, pero bueno ya no es tan frustante. de echo galo te voy a regalar 10 segundos para que te escondas en el sig. partido de gotcha a si quedaremos a mano
![]() sobre los servlets, una definicion rapida... mmmm.... podria decirse que son applet (aplicaciones) que se ejecutan al lado del servidor. no me agradan del todo, pero pues tengo que pasar la dichosa materia, aunque hay gente que le gusta trabajar y ganarse el sustento con eso, verdad galo :P .
__________________
S L A C K W A R E Linux... http://fd0xh.wordpress.com/ ![]() ![]() Los juguetes son para los niños Slackware no...... |
|
|
|
|
|
#8 (permalink) | |||
|
|
Cita:
![]() Cita:
![]() Ademas, tengo un año ke no trabajo en Java ![]() Cita:
__________________
"Solo los muertos ven el fin de la guerra" - Platón |
|||
|
|
|
|
|
#9 (permalink) | |
|
|
Cita:
jajaja mejor ajustamos cuentas en la siguiente.. es mas hacemos 1 a 1 para asi quedar los 2 a mano que dices :P ![]()
__________________
S L A C K W A R E Linux... http://fd0xh.wordpress.com/ ![]() ![]() Los juguetes son para los niños Slackware no...... |
|
|
|
|
|
|
#10 (permalink) | |
|
|
Cita:
> false; PuntosGotcha == PesosMexicanos > false int adeudo = 1000; while (adeudo > 0) { Galo.saldoAFavor = Binary.paga(1); adeudo--; } Me sigues debiendo una lana ![]()
__________________
"Solo los muertos ven el fin de la guerra" - Platón |
|
|
|
|