Ing. Pablo Almeida Haro Msc.
N CAPAS UTILIZANDO JSP (n tier)
CONCEPTO
División de la aplicación en varias capas. Cada capa se especializa en algo en particular
Capa de presentación.- Se especializa en la presentación de la interfase
Capa de negocio.- Posee el código relacionado a los procesos específicos
Capa de persistencia.- Gestiona la transaccionalidad de la base de datos
Recurso.- Utiliza un conjunto de conexión
Conjunto de conexión.- Mantiene la configuración de conexión a la base de datos
CAPA DE PRESENTACION
*Ingresar a netbeans
*Crear un nuevo proyecto: file/new/Project/web application
*Ingresar nombre de proyecto y ubicación
*Seleccionar servidor y versión jee
*No seleccionar ningún framework
*Crear un nuevo paquete: click derecho sobre source packages/new/java package
*Crear el servlet: click derecho sobre el nuevo paquete new/servlet
*Ingresar el nombre del servlet
*Dejar por defecto los datos que siguen a continuación:
*El IDE por defecto creará un código el cual debe ser reemplazado por lo que sigue a continuación:
package pack_servlet_n_capas;
import java.io.IOException;
import java.io.PrintWriter;
import javax.persistence.Query;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "servlet_n_capas", urlPatterns = {"/servlet_n_capas"})
public class servlet_n_capas extends HttpServlet
{
String ls_mensaje="";
negocio_cliente ncli=new negocio_cliente();
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String is_pantalla="";
ls_mensaje="";
String is_boton="";
String ls_codigo="";
String ls_nombre="";
is_boton=request.getParameter("boton");
ls_codigo=request.getParameter("codigo");
ls_nombre=request.getParameter("nombre");
if (is_boton==null || is_boton =="")
{
is_pantalla=desplegar_pantalla("","");
}
if (is_boton!=null && is_boton !="")
{
if(is_boton.equals("Insertar"))
{ if (ncli.insertar(ls_codigo, ls_nombre)==1)
{
ls_mensaje="Se insertó";
}
else
{
ls_mensaje="No se pudo insertar";
}
is_pantalla=desplegar_pantalla("","");
is_pantalla+=ls_mensaje;
}
if(is_boton.equals("Eliminar"))
{
if (ncli.eliminar(ls_codigo)==1)
{
ls_mensaje="Se eliminó";
}
else
{
ls_mensaje="No se pudo eliminar";
}
is_pantalla=desplegar_pantalla("","");
is_pantalla+=ls_mensaje;
}
if(is_boton.equals("Modificar"))
{
if (ncli.modificar(ls_codigo, ls_nombre)==1)
{
ls_mensaje="Se modificó";
}
else
{
ls_mensaje="No se pudo modificar";
}
is_pantalla=desplegar_pantalla("","");
is_pantalla+=ls_mensaje;
}
if(is_boton.equals("Buscar"))
{ ls_nombre=ncli.buscar(ls_codigo);
if(ls_nombre!=null)
{
ls_mensaje="Se encontró";
}
else
{
ls_mensaje="No se encontró";
}
is_pantalla=desplegar_pantalla(ls_codigo,ls_nombre);
is_pantalla+=ls_mensaje;
}
}
out.println(is_pantalla);
}
public String desplegar_pantalla(String as_codigo, String as_nombre)
{ String ls_pantalla="";
ls_pantalla+="<html>";
ls_pantalla+="<head>";
ls_pantalla+="</head>";
ls_pantalla+="<body>";
ls_pantalla+="<h2>SERVLETS - Ing. Pablo Almeida Haro </h2>";
ls_pantalla+="<form action='servlet_n_capas' method='post'>";
ls_pantalla+="Codigo:<input type='text' name='codigo'"+" value='"+as_codigo +"'></input>";
ls_pantalla+="<br>";
ls_pantalla+="Nombre:<input type='text' name='nombre'"+" value='"+as_nombre+"'></input>";
ls_pantalla+="<br>";
ls_pantalla+="<input type='submit' value='Insertar' name='boton'></input>";
ls_pantalla+="<input type='submit' value='Eliminar' name='boton' ></input>";
ls_pantalla+="<input type='submit' value='Modificar' name='boton'></input>";
ls_pantalla+="<input type='submit' value='Buscar' name='boton'></input>";
ls_pantalla+="</form>";
ls_pantalla+="</body>";
ls_pantalla+="</html>";
return ls_pantalla;
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
CAPA DE PERSISTENCIA
*Agregar el framework Hibernate al proyecto: click derecho sobre el proyecto/propiedades
*Colocar click en add
*Crear la unidad de persistencia: file /new file/persistence/persistence unit
*Colocar el nombre de la unidad de persistencia y el origen de datos
*Crear las clases de persistencia a partir de las tablas de la base de datos: Click derecho new/ entity clases from database
*Se generará el código automático que sigue a continuación:
package pack_servlet_n_capas;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author administrador
*/
@Entity
@Table(name = "CLIENTE")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Cliente.findAll", query = "SELECT c FROM Cliente c"),
@NamedQuery(name = "Cliente.findByCodigo", query = "SELECT c FROM Cliente c WHERE c.codigo = :codigo"),
@NamedQuery(name = "Cliente.findByNombre", query = "SELECT c FROM Cliente c WHERE c.nombre = :nombre")})
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 4)
@Column(name = "CODIGO")
private String codigo;
@Size(max = 20)
@Column(name = "NOMBRE")
private String nombre;
public Cliente() {
}
public Cliente(String codigo) {
this.codigo = codigo;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
@Override
public int hashCode() {
int hash = 0;
hash += (codigo != null ? codigo.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Cliente)) {
return false;
}
Cliente other = (Cliente) object;
if ((this.codigo == null && other.codigo != null) || (this.codigo != null && !this.codigo.equals(other.codigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return "pack_servlet_n_capas.Cliente[ codigo=" + codigo + " ]";
}
}
CAPA DE NEGOCIO
*Click derecho sobre el paquete/new java class
*Reemplazar el código con lo que sigue a continuación:
package pack_servlet_n_capas;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
@ManagedBean()
@SessionScoped
public class negocio_cliente
{
int ii_retorno;
public int insertar(String as_codigo, String as_nombre)
{
EntityManagerFactory factory=Persistence.createEntityManagerFactory("prj_servlet_n_capasPU");
EntityManager em1=factory.createEntityManager();
pack_servlet_n_capas.Cliente c1=new pack_servlet_n_capas.Cliente(as_codigo);
c1.setCodigo(as_codigo);
c1.setNombre(as_nombre);
try
{ em1.getTransaction().begin();
em1.persist(c1);
em1.getTransaction().commit();
ii_retorno=1;
}
catch (Exception ex)
{
ii_retorno=-1;
}
em1.close();
factory.close();
return ii_retorno;
}
public int eliminar(String as_codigo)
{
EntityManagerFactory factory=Persistence.createEntityManagerFactory("prj_servlet_n_capasPU");
EntityManager em1=factory.createEntityManager();
pack_servlet_n_capas.Cliente c1=new pack_servlet_n_capas.Cliente();
c1.setCodigo(as_codigo);
try
{
c1=em1.find(Cliente.class,as_codigo);
em1.getTransaction().begin();
em1.remove(c1);
em1.getTransaction().commit();
ii_retorno=1;
}
catch (Exception ex)
{
ii_retorno=-1;
}
em1.close();
factory.close();
return ii_retorno;
}
public int modificar(String as_codigo, String as_nombre)
{
EntityManagerFactory factory=Persistence.createEntityManagerFactory("prj_servlet_n_capasPU");
EntityManager em1=factory.createEntityManager();
pack_servlet_n_capas.Cliente c1=new pack_servlet_n_capas.Cliente();
try
{
c1=em1.find(Cliente.class,as_codigo);
em1.getTransaction().begin();
c1.setNombre(as_nombre);
em1.persist(c1);
em1.getTransaction().commit();
ii_retorno=1;
}
catch (Exception ex)
{
ii_retorno=-1;
}
em1.close();
factory.close();
return ii_retorno;
}
public String buscar(String as_codigo)
{ String ls_nombre;
EntityManagerFactory factory=Persistence.createEntityManagerFactory("prj_servlet_n_capasPU");
EntityManager em1=factory.createEntityManager();
pack_servlet_n_capas.Cliente c1=new pack_servlet_n_capas.Cliente();
try
{
c1=em1.find(Cliente.class,as_codigo);
ls_nombre=c1.getNombre();
}
catch (Exception ex)
{
ls_nombre=null;
}
em1.close();
factory.close();
return ls_nombre;
}
public void procesar()
{
// programar el código de la regla de negocio
}
}
*Correr la aplicación: click derecho servlet_n_capas y run