Foros del Web » Programación para mayores de 30 ;) » Java »

puede haber servlets y clases??

Estas en el tema de puede haber servlets y clases?? en el foro de Java en Foros del Web. estoy programando un sitio servidor con servlets... este va realizar las altas, bajas y modificaciones de una base de datos....peroo quiero tener la clase de ...
  #1 (permalink)  
Antiguo 30/03/2009, 21:11
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 3 meses
Puntos: 1
puede haber servlets y clases??

estoy programando un sitio servidor con servlets... este va realizar las altas, bajas y modificaciones de una base de datos....peroo quiero tener la clase de conexion en otra clase distinta..

entonces: es mejor crear una clase comun o crear otro servlet que se encargue del acceso a la base de datos????
todas mis clases van a tener que ser servlet o pueden ser clases comunes?? que es lo mas aconsejable??

gracias de antemano...
  #2 (permalink)  
Antiguo 31/03/2009, 03:58
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: puede haber servlets y clases??

Wenas

Por supuesto, que puedes tener servlets y clases comunes. Y, como bien piensas, es mas aconsejable tener toda la logica de BBDD en una (o varias) clases que se encarguen del mantenimento y obtrencion de datos y se los pasen a otras clases que a su vez se las pasen a los servlets o a las jsps.

La idea es que los servlets no tengan ni pajolera idea de como se obtienen esos datos. Ni lo sepan ni les importe.

Saludos.
  #3 (permalink)  
Antiguo 31/03/2009, 14:50
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: puede haber servlets y clases??

okk...gracias por tu aporte, voy a hacerte caso...
gracias
  #4 (permalink)  
Antiguo 31/03/2009, 18:10
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: puede haber servlets y clases??

les hago una pregunta a ustedes que saben...

tengo una clase llamada "accesoBD", y por otro lado el servlet que tiene una instancia de la clase de accesoBD...el problema que tengo es que no puedo hacer funcionar el servlet de manera que haga ejecutar los metodos de la clase accesoBD....en cambio si yo codifico todo junto dentro del servlet (codigo de accesoBD y del servlet) este funciona...

alguien me podría aconsejar sobre esto..??? gracias
  #5 (permalink)  
Antiguo 01/04/2009, 03:14
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: puede haber servlets y clases??

Te da error o no hace nada?? Pon el codigo de ambas clases para ver que esta haciendo.

Saludos.
  #6 (permalink)  
Antiguo 01/04/2009, 09:34
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: puede haber servlets y clases??

ok..ahi les paso el codigo de las clases:

CODIGO DEL SERVLET
Cita:
public class alumnosABM extends HttpServlet
{
accesoBD bd;
ResultSet rs;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
bd = new accesoBD();
try
{
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet alumnosABM</title>");
out.println("</head>");
out.println("<body>");

//ACA ESTA EL ERROR: CUANDO LLAMO A UN METODO DE LA CLASE accesoBD
bd.conectar();
rs = bd.mostrar();
while(rs.next())
{
out.println(rs.getInt("id"));
out.println(rs.getString("nombre"));
}
bd.desconectar();

}
catch(Exception e)
{
out.println("error");

} finally {
out.close();
}
out.println("</body>");
out.println("</html>");
}
CODIGO DE LA CLASE accesoBD
Cita:

import java.sql.*;
public class accesoBD
{

private Connection conexion;
private Statement sentencia;
private ResultSet Rs;

public void conectar()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/p", "root", "");
}
catch (Exception e)
{
System.out.println("No se pudo cargar el puente JDBC-ODBC.");
return;
}
}

public ResultSet mostrar()
{
try
{
sentencia = conexion.createStatement();
Rs = sentencia.executeQuery("SELECT * FROM p");
}
catch(SQLException se)
{
System.out.println("fallo la conexion");
}
return Rs;
}

public void desconectar()
{
try
{
this.conexion.close();
}
catch(Exception e)
{

}
}
les aclaro que si yo programo el servlet para que acceda a la BD, este lo hace bien...ahora lo que yo quiero hacer es que el servlet "alumnosABM" cree una instancia de la clase "accesoBD" y que desde alumnosABM se llamen a los metodos de "accesoBD"... me explico?? espero haber sido claro...

Última edición por adg; 01/04/2009 a las 09:43
  #7 (permalink)  
Antiguo 01/04/2009, 09:39
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: puede haber servlets y clases??

Aparte de que la variable esta declarada como BD y luego usada como bd... Puedes indicar que error te da??
  #8 (permalink)  
Antiguo 01/04/2009, 09:50
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: puede haber servlets y clases??

ya esta corregido el error que vos decis....
el error que se produce es este: java.lang.NullPointerException.
no me esta reconociendo la clase accesoBD a pesar de que estoy creando una instancia de ella.. es algo raro que solamente me esta pasando con los servlets...
  #9 (permalink)  
Antiguo 01/04/2009, 10:00
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: puede haber servlets y clases??

De todos modos para la proxima, eso que estas haciendo no tiene sentido.

Si como te dije anteriormente a tu servlet le debe importar un pimiento de donde vengan los datos, no deberias hacer que sea el servlet el que conecte, obtenga el resultset y desconecte.

Lo mas logico seria que se encargase de eso accesoBD, y tuvieras un metodo tal que asi:

Código:
public ArrayList lista()
{
ArrayList lista= new ArrayList();
Dato d = new Dato();
try{
conectar();
rs = bd.mostrar();
while(rs.next())
{
d.setId(rs.getInt("id"));
d.setNombre(rs.getString("nombre"));
lista.add(d);
}
finally
{
bd.desconectar();
}
return lista;

}
Y todos los demas de accesoBD que sean private. Por lo que te comente, que a nadie le importa como sea la BD y a donde se conecte.

En tu servlet
Código:
  ArrayList lista = accesoBD.lista();
  for (int i=0;i<lista.size();i++)
  {
       Dato d = (Dato) lista.get(i);
       out.println(d.getId());
      ......
   }
Evidentemente con sus capturas de excepciones en condiciones, etc etc.

Pero la idea seria esa.

Saludos.
  #10 (permalink)  
Antiguo 01/04/2009, 11:16
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: puede haber servlets y clases??

gracias elAntonie..tus aportes me han ayudado mucho a mejorar mi codigo...y ahí me di cuenta de mi error...mil gracias de nuevo!!!!
  #11 (permalink)  
Antiguo 01/04/2009, 11:25
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: puede haber servlets y clases??

elAntoni igual aca te paso el codigo por si queres ver como quedo...

codigo del SERVLET
Cita:
public class alumnosABM extends HttpServlet
{
accesoBD bd;
ResultSet rs;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
bd = new accesoBD();
try
{
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet alumnosABM</title>");
out.println("</head>");
out.println("<body>");

ArrayList lista = bd.lista();
for (int i = 0; i < lista.size(); i++)
{
alumnos alu = (alumnos) lista.get(i);
out.println("numero:" + alu.getIdAlumno());
out.println("nombre:" + alu.getNombre());
}

}
catch(Exception e)
{
out.println(e.getMessage() + " " + e.toString());

}
finally
{
out.println("</body>");
out.println("</html>");
out.close();
}
}
}
codigo de la clase accesoBD
Cita:
public ResultSet mostrar()
{
try
{
sentencia = conexion.createStatement();
rs = sentencia.executeQuery("SELECT * FROM p");
}
catch(SQLException se)
{
System.out.println(se.getMessage() );
}
return rs;
}


public ArrayList lista()
{
ArrayList lista = new ArrayList();
alumnos alu;
try
{
this.conectar();
rs = this.mostrar();

while(rs.next())
{
alu = new alumnos(rs.getInt("id"), rs.getString("nombre"));

lista.add(alu);
}
}
catch(SQLException se)
{
System.out.println(se.getMessage());
}
finally
{
this.desconectar();
}
return lista;
}
  #12 (permalink)  
Antiguo 02/04/2009, 02:06
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: puede haber servlets y clases??

Solo una cosa, si mostrar() no lo va a usar nadie mas que la clase accesoBD deberia ser private, no public.

Por lo demas efectivamente, esa es la idea. Creo que lo has entendido.

Ahora piensa otra cosa, una clase accesoBD que sea la unica que conecte y desconecte de la BD y tenga un metodo

Código:
public Resultset consultaGenerica (String query) throws SQLException
{
try{
this.conectar();
rs = this.mostrar(query);
}catch(SQLException se)
{
 throw se;
}
finally
{
this.desconectar();
}
return rs;
}
}
y un monton de clases BD alumnosBD, profesoresBD todas ellas extendiendo de esta accesoBD.

Código:
public class alumnosBD extends accesoBD
{
public ArrayList lista()
{
ArrayList lista = new ArrayList();
alumnos alu;
try
{

Resultset rs = consultaGenerica("select * from p");
while(rs.next())
{
alu = new alumnos(rs.getInt("id"), rs.getString("nombre"));

lista.add(alu);
}
}
catch(SQLException se)
{
System.out.println(se.getMessage());
}
return lista;
}     

}
Con ello tendrias una unica clase que se encargaria de CONECTAR, DESCONECTAR EJECUTAR QUERYS, INSERT UPDATES .... con la base de datos. Tal que si mañana tu base de datos pasa a ser oracle, solo hay que cambiar esta clase.

Y otro matiz, mejor que un select * from p, haz un select id, nombre from p. Podras hacer un uso mas eficiente de los indices y si mañana el administrador de base de datos te cambia nombre por nombre2 te enteraras a la primera, si no te puedes volver majara buscando donde falla tu codigo.

Y mejor que gracias, invitate a una cervecita...
Saludos.

Última edición por elAntonie; 02/04/2009 a las 02:22
  #13 (permalink)  
Antiguo 02/04/2009, 20:24
adg
 
Fecha de Ingreso: enero-2009
Mensajes: 60
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: puede haber servlets y clases??

buenisimo..!! lo de select *...lo hice para probar rapido pero despues con mas tiempo voy a escribir las consultas como tiene que ser...

justo lo que me planteaste de esa clase generica es algo que lo venia pensando hace unos dias y que no me habia puesto a hacer, pero con esto me has ahorrado tiempo!!!..

mas adelante seguramente venga con otras dudas, sabiendo ahora que con estas respuestas se me aclararon algunas cosas...

despues te invito una cerveza.. jajaj.
chauu
  #14 (permalink)  
Antiguo 02/04/2009, 20:34
 
Fecha de Ingreso: abril-2009
Mensajes: 2
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: puede haber servlets y clases??

no lo sep
de q esrtas hablando lo siento (sorry) no te entendi
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:25.