Académique Documents
Professionnel Documents
Culture Documents
Módulo 1 / parte 4
Objetivo
El objetivo de esta práctica es implementar la separación de capas usando el patrón de Arquitectura
MVC (Modelo, Vista y Controlador) en Servlets utilizando NetBeans IDE.
Separar las distintas capas con sus roles bien definidos, implementando el patrón de arquitectura de
software MVC (Modelo, Vista y Controlador) es fundamental para el desarrollo de aplicaciones
escalables, flexibles y de fácil mantención. Donde el Modelo es la representación específica de los datos
con la cual el sistema opera (generalmente bases de datos, pero pueden ser otras fuentes de datos
como Web Services etc), la Vista presenta los datos en un formato adecuado para interactuar,
usualmente cumpliendo con la "interfaz de usuario" y finalmente el Controlador que responde a
eventos, generalmente peticiones de los usuarios (presionando un link, ejecutando un formulario, etc), e
interactúa a su vez con el Modelo y la Vista (para pedirle información o para representar la información,
respectivamente).
El patrón MVC podría considerarse una "especialización" de una típica "arquitectura de 3 capas" pero
con una lógica de funcionamiento más ajustada a entornos web, donde se intenta -por lo general–
concentrar todas las peticiones del exterior a través de un solo punto de entrada (clásicos sistemas
"modulares")
Aclaración importante: los patrones de diseño son "la mejor solución encontrada para resolver un
problema genérico y recurrente", pero, la solución es una "guía" y no un "manual" para resolver un
response.setContentType("text/html;charset=UTF-8");
// Get a session
HttpSession session = request.getSession();
<%
String saludo = (String) request.getAttribute("saludo");
String titulo = (String) request.getAttribute("titulo");
%>
response.setContentType("text/html;charset=UTF-8");
// Cierra el HttpSession
request.getSession().invalidate();
package models;
/**
*
* @author Andrés Guzmán F
*/
public class Producto {
private int id;
private String nombre;
private int precio;
public Producto() {
}
package models;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Andrés Guzmán F
*/
public class CatalogoDb {
public CatalogoDb() {
productos.add(new Producto(1, "Panasonic Pantalla LCD", 259990));
productos.add(new Producto(2, "Sony Cámara digital DSC-W320B", 123490));
productos.add(new Producto(3, "Apple iPod shuffle ", 69990 ));
productos.add(new Producto(4, "Sony Notebook Z110 ", 1499990 ));
productos.add(new Producto(5, "Hewlett Packard Multifuncional F2280", 37990));
productos.add(new Producto(6, "Bianchi Bicicleta Aro 26", 69990));
productos.add(new Producto(7, "Mica Cómoda 5 Cajones", 69990));
productos.add(new Producto(8, "Movistar Celular Nokia X6 ", 299990));
}
if(producto.getId() == id){
resultado = producto;
break;
}
}
return resultado;
}
}
package controllers;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import models.CatalogoDb;
/**
* Web application lifecycle listener.
* @author Andrés Guzmán F
*/
public class CatalogoEventListener implements ServletContextListener {
ServletContext servletContext;
servletContext = sce.getServletContext();
servletContext.setAttribute("catalogoDb", new CatalogoDb());
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
modelo = (CatalogoDb) config.getServletContext().getAttribute("catalogoDb");
}
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/* …… Etc ……*/