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

Proyecto Netbeans 4 capas.

Estas en el tema de Proyecto Netbeans 4 capas. en el foro de Java en Foros del Web. Hola, muy buenas! Soy principiante en esto del lenjuage java y necesito ayuda. La cuestión es la siguiente, tengo un proyecto creado en Netbeans (Web ...
  #1 (permalink)  
Antiguo 13/10/2013, 12:28
Avatar de iamPePerez  
Fecha de Ingreso: octubre-2013
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Pregunta Proyecto Netbeans 4 capas.

Hola, muy buenas!

Soy principiante en esto del lenjuage java y necesito ayuda.

La cuestión es la siguiente, tengo un proyecto creado en Netbeans (Web Application) que consta de 4 capas (la verdad es que yo creo que esas se llaman capas, si estoy mal me dicen.) Y el Netbeans esta conectado a una base de datos (Navicat)

La idea es crear una pagina web, que tenga un formulario para Ingresar, Consultar, Modificar y Eliminar clientes.

Logré hacer que ingrese usuarios via web. Pero estoy trabado en poder consultar.

A continuación expongo los codigos para ingresar. (Los codigos tambien tienen otras cosas, pero ustedes podrán darse cuenta cual es cual)


Cliente.java (Dentro del paquete DTO)

Código Java:
Ver original
  1. package DTO;
  2.  
  3. public class Cliente
  4. {
  5.     private String rut;
  6.     private String nombre;
  7.     private String estado;
  8.  
  9.        public String getRut() {
  10.         return rut;
  11.     }
  12.  
  13.     public void setRut(String rut) {
  14.         this.rut = rut;
  15.     }
  16.  
  17.     public String getNombre() {
  18.         return nombre;
  19.     }
  20.  
  21.     public void setNombre(String nombre) {
  22.         this.nombre = nombre;
  23.     }
  24.  
  25.     public String getEstado() {
  26.         return estado;
  27.     }
  28.  
  29.     public void setEstado(String estado) {
  30.         this.estado = estado;
  31.     }  
  32. }

IngresoCliente.java (Dentro del paquete GUIServlet)

Código Java:
Ver original
  1. package GUIServlet;
  2.  
  3. import DTO.Cliente;
  4. import Negocio.Negocio;
  5. import java.io.IOException;
  6. import java.io.PrintWriter;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.annotation.WebServlet;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12.  
  13. @WebServlet(name = "IngresoCliente", urlPatterns = {"/IngresoCliente"})
  14. public class IngresoCliente extends HttpServlet {
  15.  
  16.     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  17.             throws ServletException, IOException {
  18.         response.setContentType("text/html;charset=UTF-8");
  19.         PrintWriter out = response.getWriter();
  20.         try
  21.         {
  22.             Negocio auxNegocio = new Negocio();
  23.             Cliente auxCliente = new Cliente();
  24.            
  25.             auxCliente.setRut(request.getParameter("txtRut"));
  26.             auxCliente.setNombre(request.getParameter("txtNombre"));
  27.              auxCliente.setEstado(request.getParameter("txtEstado"));
  28.             auxNegocio.ingresarCliente(auxCliente);
  29.  
  30. out.println("<!DOCTYPE html>");
  31. out.println("<html>");
  32. out.println("<head>");
  33. out.println("<title>Se grabaron los datos correctamente</title>");            
  34. out.println("</head>");
  35. out.println("<body>");
  36. out.println("<script language = Javascript>");
  37. out.println("window.alert ('Datos Grabados');");
  38. out.println("location = href= 'http://localhost:8080/Web/WebIngresoCliente.jsp';");
  39. out.println("</script>");
  40. out.println("</body>");
  41. out.println("</html>");
  42.             out.close();
  43.          }
  44.             catch (Exception ex)
  45.             {
  46. out.println("<!DOCTYPE html>");
  47. out.println("<html>");
  48. out.println("<head>");
  49. out.println("<title>no se grabaron los datos correctamente</title>");            
  50. out.println("</head>");
  51. out.println("<body>");
  52. out.println("Rut: " + request.getParameter("txtRut"));
  53. out.println("Nombre: " + request.getParameter("txtNombre"));
  54. out.println("Estado:" + request.getParameter("txtEstado"));
  55. out.println("</body>");
  56. out.println("</html>");
  57. out.close();
  58.             }
  59.         {
  60. out.close();
  61.             }
  62.         }
  63. }


Negocio.java (Dentro del paquete Negocio)

Código Java:
Ver original
  1. package Negocio;
  2.  
  3. import DTO.*;
  4. import Conexion.*;
  5. import java.util.ArrayList;
  6. import javax.swing.JOptionPane;
  7.  
  8. public class Negocio
  9. {
  10. private Conexion conec1;
  11.  
  12. public Conexion getConec1() {
  13.         return conec1;
  14.     }
  15.  
  16. public void setConec1(Conexion conec1) {
  17.         this.conec1 = conec1;
  18.     }
  19.    
  20.     public void configurarConexion()
  21.     {
  22. this.setConec1(new Conexion());
  23. this.getConec1().setNombreBaseDeDatos("jdbc:mysql://localhost/ventas");
  24. this.getConec1().setNombreTabla("clientes");
  25. this.getConec1().setCadenaConexion("com.mysql.jdbc.Driver");
  26. this.getConec1().setUsuario("root");
  27. this.getConec1().setPass("");
  28.     }
  29.         public void ingresarCliente(Cliente cliente)
  30.     {
  31.           this.configurarConexion();
  32.           this.getConec1().setCadenaSQL("INSERT INTO clientes"
  33.                                      + " (rut,nombre,estado) VALUES ('" + cliente.getRut()+ "','"
  34.                                      + cliente.getNombre() + "','" + cliente.getEstado() + "');" );
  35.           this.getConec1().setEsSelect(false);
  36.           this.getConec1().conectar();
  37.   }
  38.    
  39.     public Cliente buscarCliente(String rut)
  40.     {
  41.    
  42.        Cliente auxCliente = new Cliente();
  43.         this.configurarConexion();
  44.        
  45.         this.getConec1().setCadenaSQL("SELECT * FROM clientes"
  46.                                      
  47.                                      + " WHERE rut = '" + rut + "';");
  48.         this.getConec1().setEsSelect(true);
  49.         this.getConec1().conectar();
  50.        
  51.         try
  52.         {
  53.            if (this.getConec1().getDbResultSet().next())
  54.            {
  55.                auxCliente.setRut(this.getConec1().getDbResultSet().getString("rut"));
  56.                auxCliente.setNombre(this.getConec1().getDbResultSet().getString("nombre"));
  57.                auxCliente.setEstado(this.getConec1().getDbResultSet().getString("estado"));
  58.                
  59.            }
  60.            else
  61.            {
  62. auxCliente.setRut("");
  63. auxCliente.setNombre("");
  64. auxCliente.setEstado("");
  65.                
  66.            }
  67.         }
  68.         catch(Exception ex)
  69.         {
  70.            JOptionPane.showMessageDialog(null, "Error de SQL " + ex.getMessage());
  71.         }
  72.         return auxCliente;
  73.     }
  74.    
  75.  public void eliminarCliente(String rut)
  76.     {
  77.        this.configurarConexion();
  78.        this.getConec1().setCadenaSQL("DELETE FROM " + this.getConec1().getNombreTabla()
  79.                                       + " WHERE rut = '" + rut + "';");
  80.        this.getConec1().setEsSelect(false);
  81.        this.getConec1().conectar();
  82.  
  83.     }
  84.    
  85.     public Cliente posicionaCliente(int fila)
  86.     {
  87.         Cliente auxCliente = new Cliente();
  88.        
  89.         this.configurarConexion();
  90.        
  91.         this.getConec1().setCadenaSQL("SELECT * FROM " + this.getConec1().getNombreTabla());
  92.         this.getConec1().setEsSelect(true);
  93.         this.getConec1().conectar();
  94.        
  95.         try
  96.         {
  97.             if(this.getConec1().getDbResultSet().relative(fila))
  98.             {
  99.                 auxCliente.setRut(this.getConec1().getDbResultSet().getString("rut"));
  100.                 auxCliente.setNombre(this.getConec1().getDbResultSet().getString("nombre"));
  101.                
  102.             }
  103.             {
  104.                auxCliente.setRut("");
  105.                auxCliente.setNombre("");
  106.             } //Fin else
  107.         }
  108.         {
  109.            auxCliente.setRut("");
  110.            auxCliente.setNombre("");
  111.         }
  112.         return auxCliente;
  113.     }
  114.    
  115.  }


Como pueden ver, el que se conecta a la base de datos es Negocio.java. Osea, IngresoCliente llama a Negocio.java para registar datos. Esto me funciona a la perfección.

Ahora le muestro el código ConsultaCliente.java que debe conectarse a Negocio.java para mostrar los datos.

ConsultaCliente.java (Dentro del paquete GUIServlet)

Código Java:
Ver original
  1. package GUIServlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import DTO.*;
  11. import Negocio.*;
  12.  
  13. @WebServlet(name = "ConsultaCliente", urlPatterns = {"/ConsultaCliente"})
  14. public class ConsultaCliente extends HttpServlet {
  15.  
  16.     protected void processRequest(HttpServletRequest request, HttpServletResponse response)
  17.             throws ServletException, IOException {
  18.         response.setContentType("text/html;charset=UTF-8");
  19.         PrintWriter out = response.getWriter();
  20.         try {            
  21.                      
  22.            
  23. Negocio auxNegocio = new Negocio();
  24. Cliente auxCliente = new Cliente();
  25.          
  26. auxNegocio.buscarCliente(null);
  27. auxCliente.setRut(request.getParameter("txtRut"));
  28. auxCliente.setNombre(request.getParameter("txtNombre"));
  29. auxCliente.setEstado(request.getParameter("txtEstado"));
  30.  
  31. out.println("<!DOCTYPE html>");
  32. out.println("<html>");
  33.  out.println("<head>");
  34. out.println("<title>Servlet ConsultaCliente</title>");            
  35. out.println("</head>");
  36. out.println("<body>");
  37.             out.println("Rut: " + request.getParameter("txtRut"));
  38.             out.println("Nombre: " + request.getParameter("txtNombre"));
  39.             out.println("Apellido: " + request.getParameter("txtEstado"));
  40.             out.println("</body>");
  41.             out.println("</html>");
  42.         } finally {            
  43.             out.close();
  44.         }
  45.     }

El problema es el al solicitar los datos me los muestra null.

La idea es que el formulario (en la web) tenga el campo Rut y un botón Consultar. Al ingresar el Rut y dar click en el boton, deberia mostrar los demas datos del cliente (Nombre y Estado) pero me paracen valores null.

Espero me puedan ayudar. Pido disculpas por si el codigo está algo desordenado, pero creo que se entiende.

Muchas gracias, saludos!

  #2 (permalink)  
Antiguo 13/10/2013, 12:58
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años, 8 meses
Puntos: 12
Respuesta: Proyecto Netbeans 4 capas.

Hola

1º estás buscando un cliente por null

Código PHP:
auxNegocio.buscarCliente(null); 
2º Si encontras un cliente no lo asignas a nadie.

3º Las 4 capas ¿ dónde están ?

4º No queda lindo crear la vista desde el servlet, es poco legible.

Le falta más separación de incumbencias entre objetos, fijate el patron DAO es muy usado en estos casos.

Saludos
  #3 (permalink)  
Antiguo 13/10/2013, 13:11
Avatar de iamPePerez  
Fecha de Ingreso: octubre-2013
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Proyecto Netbeans 4 capas.

Las 4 capas son:

Conexion : Que contiene Conexion.java
DTO : Que contiene Cliente.java
GUIServlet : Que contiene IngresarCliente.java y ConsultarCliente.java
Negocio : Que contiene Negocio.java

La verdad es que tienes razón con lo de null. No sé cúal es la linea que me falta o la que está sobrando.

La web.jsp llama al servlet ConsultaClientes, yo creo que una vez consiga que me muestre los datos puedo mejorar el diseño no?

Buscaré lo de DAO.

Gracias.
  #4 (permalink)  
Antiguo 13/10/2013, 13:45
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años, 8 meses
Puntos: 12
Respuesta: Proyecto Netbeans 4 capas.

Cuando digo que le pasas null es que le estàs pasando ese valor a mano, supongo que quisieras buscar clientes por un id o su dni, desde un request debería llegarte esa info.

Si separás por capas y Negocio y Conexión son capas distintas entonces no está bueno que Negocio deba configurar la conexión sino es como que conexión y negocio son una especie de symbian.El objeto conexion al vos crearlo debería estar configurado.

Generalmente al trabajar con capas lográs visualizar, de manera perfecta, sólo tres capas, las que ueden ser, Modelo , Vista y Controlador, referido al patron MVC
  • En el modelo viven tus entidades, el negocio y la Bd.
  • En el controlador podés poner los servlets.
  • En la vista van las paginas si es web.


O podés separar así
  • La capa de datos.
  • La capa de negocios.
  • La capa de presentación.

Después cuando digo de no crear la pagina en el servlet, luego cuando sigas trabajando con estás cosas de programación ,vas a ver que es engorroso ya que si quisieras cambiar un text field , vas tener que bajar el server y volverlo a subir.

En cambio si laburás con html es refrescar la pagina.


Saludos...
  #5 (permalink)  
Antiguo 13/10/2013, 15:05
Avatar de iamPePerez  
Fecha de Ingreso: octubre-2013
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Proyecto Netbeans 4 capas.

Gracias amigo por tu tiempo. No poseo mucho lenjuaje técnico por lo que se me hace dificil explicar.

Concuerdo contigo que con 3 capas, ya he trabajado asi y es mucho más práctico y queda de maravilla. Pero este proyecto debe ser en 4 capas, es un exámen para un curso que debo dar en una par de días. O sea la idea de estos tipos es complicarte la vida.

Al fin pude hacer la consulta. Modifiqué el ConsultaCliente con esto:

Código Java:
Ver original
  1. Negocio auxNegocio = new Negocio();
  2.            //Cliente auxCliente = new Cliente();
  3.            
  4.             //auxNegocio.buscarCliente(null);
  5.             //auxCliente.setRut(request.getParameter("txtRut"));
  6.             //auxCliente.setNombre(request.getParameter("txtNombre"));
  7.             //auxCliente.setEstado(request.getParameter("txtEstado"));
  8.            // this.append(auxCliente.getRut() + " " + auxCliente.getNombre() +"\n" );
  9.  
  10.             out.println("<!DOCTYPE html>");
  11.             out.println("<html>");
  12.             out.println("<head>");
  13.             out.println("<title>Consulta Cliente</title>");            
  14.             out.println("</head>");
  15.             out.println("<body>");
  16.             out.println("<h1>Clientes</h1>");
  17.             out.println("<table border = 3>");
  18.             out.println("<tr>");
  19.             out.println("<th>Rut");
  20.             out.println("<th>Nombre");
  21.             out.println("<th>Apellido");
  22.            
  23.            
  24.             Iterator iter = auxNegocio.retornaClientes().iterator();
  25.            
  26.             while(iter.hasNext())
  27.             {
  28.                 Cliente auxCliente = new Cliente();
  29.                 auxCliente = (Cliente) iter.next();
  30.                 out.println("<tr>");
  31.                 out.println("<td>");
  32.                 out.println(auxCliente.getRut());
  33.                 out.println("<td>");
  34.                 out.println(auxCliente.getNombre());
  35.                 out.println("<td>");
  36.                 out.println(auxCliente.getEstado());
  37.                
  38.             }
  39.            
  40.             out.println("</table>");
  41.             out.println("</body>");
  42.             out.println("</html>");
  43.         } finally {            
  44.             out.close();
  45.         }

Esto llama a a un ArrayList que se llama retornaCliente. Lo malo, es que me muestra todos los clientes registrados en una tabla feisima. Ahora estoy pensando es lo que me dices de las vistas, nunca lo he hecho y no se por donde configurar el código para que, en vez de mostrarme esa tabla, me lo muestre dentro del mismo JSP sin mandarme diectamente al servlet.

Voy a buscar como hacerlo. Alguna idea?

Gracias. Saludos!
  #6 (permalink)  
Antiguo 13/10/2013, 21:04
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años, 8 meses
Puntos: 12
Respuesta: Proyecto Netbeans 4 capas.

Todo bien,

Ufff!! eso hace mucho no lo hago ya que con esto de los frameworks terminas "aburguesandote", pero basicamente la idea es tener una página, que puede ser un archivo .jsp ó .html, enlazado a un servlet -esto generalmente se llama mapping-, en concreto tendrías:

miPagina.jsp => MiPaginaServlet.java (Esto se especifica en el web.xml.)

Lo que queda es, vos recibís un request a tu servlet ,por ej cuando haces submit en un botón, y entonces luego de recibir este request corres tu lógica y al terminar generás un response a tu página enlazada. Con esto si por ejemplo tenés una tabla debajo del form , vas a viajar desde el form en .jsp al servlet y desde este a tu tabla en ese mismo .jsp.

Acá un tuto bastante simple

Acá otro

En fin hay varios...

Espero te sirva

Saludos.

Etiquetas: html, jsp, netbeans, proyecto, servlet, string
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 13:46.