Вы находитесь на странице: 1из 16

LENGUAJE DE PROGRAMACION II

Modelo Vista Controlador (MVC) Aplicaciones JAVA


Desde hace mucho tiempo, se utiliza MVC para las aplicaciones JAVA. y en esta ocacion tratare de mostrarle con plabras sencillas, La idea general del MVC.

MVC (Modelo-Vista-Controlador), en palabras simples, es la forma(Patron de Disenio) que utilizamos los programadores para implementar nuestras aplicaciones, adems permite separar nuestra aplicacion en un modelo, una vista y con controlador. este patron fue introducido por primera vez en el lenguaje Sm alltalk. 3 tipos de entidades, cada una especialida en su tarea. Modelo: Es el encargo de administrar la logica de tu aplicacion. tiene como finalidad servir de abstracccion de algun proceso en el mundo real, ademas tiene acceso a nuestra Base de Datos, agregando q tiene las funciones que controlan la integridad del sistema.

Vista Sencillamente es la representacion visual del modelo. Es la encargada de representar los componentes visuales en la pantalla, Esta asociada a un Modelo, esto le permite que al momento de cambiar el Modelo, la vista redibujara la parte efectada para reflejar los cambios.

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II

Controlador Es el escuchador a los eventos que genere el usuario, es decir es el que permite que interactuen el usuario con el sistema. Interpreta los eventos (la entradas) atravez del teclado y/o raton. Por que usar MVC? Porque fue diseada para reducir el esfuerzo al momento de programar. Ademas porque permite una clara separacin entre los componentes de un programa; lo cual nospermite implementarlos por separado. Permite el trabajo en equipo.

Java implementa MVC? Con decir, que la mayoria de los componentes SWING, han tomado como patron de Disenio a MVC , esto es una gran ventaja para los programadores, porque nos permite implementar nuestro PROPIO modelo de datos para cada componente swing. Sin embargo es bueno recordar que El modelo original MVC prescriba un alto acoplamiento entre controladores y vistas. Por que es recomendable tener nuestro Propio Modelo de Datos para nuestros Compoonentes Swing? Swing se basa en un modelo MVC, donde la mayor parte de componentes de interfaz (JTable, JList, JComboBox, etc.) tienen un modelo de datos por defecto. Si nos limitamos a usar el modelo propio estaremos utilizando los modelos p defecto de or Swing. y obviamente estos modelos utilizan la clase java.util.Vector para el almacenamiento de los datos lo que provocar que nuestros interfaces pierdan ahorro de recursos. Por otro lado, mvc nos permite utilzar de la forma que queramos a cualquier componente swing con tan solo implementar nuestro propio modelo. es decir nos ofrece la posibilidad de trabajar con componentes ms eficientes . Espero haya quedado la idea general, de implementar nuestras aplicaciones tomando como patron de disenio a MVC
Que es ? Porque se recomienda ? La estructura MVC ("Model-View-Controller") es un paradigma utilizado en diversos desarrollos de software, a travs de este "Framework" se

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II logra una divisin de las diferentes partes que conforman una aplicacin, siendo su principal razn de ser: manutencin del cdigo fuente . Conforme incrementan las necesidades de cualquier aplicacin, la modificacin a cdigo existente se hace inminente y si no existe una clara divisin de uso , el cdigo no solo se torna indescifrable sino en ocasiones impredecible debido a la mezcla de funcionalidades que pueden surgir. A travs de MVC se realiza la siguiente divisin : Model: Concentra las funcionalidades relacionadas con el Modelo de datos, esto es, el acceso y manipulacin de depsitos informativos como Bases de Datos y Archivos. View: Se basa en el aspecto visual/grfico que ser empleado por la aplicacin en cuestin. Controller: Empleado como un mediador entre el medio grfico (" View") y el modelo ("Model"), coordina las acciones que son llevadas acabo entre ambos.

Con JSP's y Servlets El uso de "MVC" en ambientes Web para JSP's y Servlets ha empezado a generar gran inters, debido a que una vez diseada una aplicacin para ambiente Web es raro que sta permanezca sin cambios, el uso de MVC permite realizar diseos con JSP's/Servlets que logran verdaderas soluciones a escala. Tomemos el simple caso de un proceso de registro que despus de varios meses requiere ser modificado para solicitar datos no contemplados en el diseo inicial, o bien, la modificacin de un proceso de trabajo ("WorkFlow") que requiere modificar el orden de solicitud de datos; cualquiera de los casos anteriores requiere forzosamente modificacin al cdigo de JSP's y/o Servlets, observe la siguiente grfica que demuestra los posibles resultados de una aplicacin con JSP's/Servlets :

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II

La seccin izquierda demuestra un posible diseo que pudo ser empleado al disear la aplicacin antes mencionada, las principales deficiencias son las siguientes:
y

La secuencia de JSP's que conforma la parte visual de la aplicacin esta enlazada directamente entre s, esto es, el "WorkFlow" (Flujo de Trabajo) esta implementado en cada JSP y cualquier cambio en esta secuencia implica modificar el cdigo fuente de diverso s JSP's.

La lgica de negocios, que correspondera al Modelo de la aplicacin, tambin esta enlazada directamente con JSP's, esto tiene como consecuencia que el diseo de lgica de negocios (a travs de Servlets) esta fuertemente basado en el diseo de los JSP's frontales, esto dificulta que sean reutilizados diversos elementos de lgica de negocios (Servlets) en distintos JSP's.

Utilizando "MVC" se obtienen los siguientes resultados a los problemas anteriores:


y

La secuencia de JSP's es enlazada a un "Controlador" en forma de un Servlet, este enlaze permite alterar el "WorkFlow" (Flujo de Trabajo) a travs de una modificacin sencilla al Servlet "Controlador", los JSP's no contienen cdigo de "Workflow" (Flujo de Trabajo).

La lgica de negocios que correspondera al Modelo es obtenida a travs del Servlet "Controlador", esto permite que la lgica de Ing. Alberto Moreno C. 4

LENGUAJE DE PROGRAMACION II negocios (Servlets) permanezca

aislada

de

cualquier

tipo

de

despliegue grfico (JSP's), en efecto, facilitando la reutilizacin de componentes de negocios (Servlets) con diversos JSP's . Finalmente, vale mencionar que hoy en da existen diversas

implementaciones para utilizar un "Framework MVC" en ambientes de JSP's/Servlets, entre ellas se encuentran : Struts (http://jakarta.apache.org/struts) Spring (http://www.springframework.org/) Maverick (http://mav.sourceforge.net/) La siguiente seccin de este curso describir el uso de "Struts" (http://jakarta.apache.org/struts) que es un Software Open-Source desarrollado por la fundacin Apache. Java Beans Un Java Bean es una manera de modularizar el uso datos en una aplicacin con JSP's/Servlets a travs de una Clase, su caracterstica primordial es el uso de los mtodos get y set los cuales permiten el acceso a los valores del Bean, el diseo de un Java Be an es relativamente sencillo ya que no posee cdigo extenso, observe el siguiente Java Bean que es utilizado para manipular datos de usuarios.

y y y

public class Usuario implements java.io.Serializable { private String nombre; private String apellido; private String correo; public Usuario() { } public Usuario(String nombre, String apellido, String correo) {

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II

this.nombre = nombre; this.apellido = apellido; this.correo = correo; } public void setNombre(String nombre) { this.nombre = nombre; } public String getNombre() return nombre; } public void setApellido(String apellido) { this.apellido = apellido; } public String getApellido() { return apellido; } public void setCorreo(String correo) { this.correo = correo; } public String getCorreo(){ return correo; } } {

Los detalles de la clase (Java Bean) anterior son los siguientes:

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II
y

La clase es llamada Usuario e implementa la clase java.io.Serializable una caracterstica primordial de todo Java Bean. Posteriormente se definen los campos ("fields") utilizados dentro del Java Bean en un contexto privado (private). Se definen dos Constructores Java, uno que asigna los parmetros a la instancia con valores de entrada, y el Constructor "default" sin datos de entrada. A travs de los diversos mtodos get/set es posible modificar los valores iniciales definidos en el Java Bean. A travs de Java Beans es posible encapsular conceptos de diferentes tipos, en el proceso permitiendo la manipulacin de valores a travs de una sola Clase, de esta manera facilitando el manejo de informacin y a su vez el desarrollo de Software; a continuacin se describe el uso de Java Beans en conjuncin de JSP's y Servlets:
y y

Java Bean Producto.java. Uso de Java Beans en JSP's/Servlets.

A simple vista el uso de Java Beans parece superficial, pero conforme empieza a crecer el tamao de una aplicacin su uso se hace ms evidente, lo cual ser ejemplificado en la siguiente seccin utilizando el paradigma "MVC"("Model-View-Controller") a travs de "Struts" y

posteriormente en conjuncin de JSTL. Filtros Otro paradigma empleado en diseos modulares de JSP's y Servlets es el de Filtros, como su nombre lo implica, un filtro permite que determinada requisicin o respuesta sea analizada en circunstancias especificas. En este caso la requisicin y/o respuesta corresponden a los principales elementos de un Servlet (por ende JSP tambin) que son los objetos
ServletRequest y ServletResponse respectivamente.

Una de las principales caractersticas de un filtro es que puede ser colocado en cualquier punto de una secuencia de actividades ("Work Flow"), ya sea entre una solicitud de JSP a JSP, Servlet a Servlet, o

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II inclusive Servlet/JSP a HTML, la nica condicin que debe cumplirse es que debe existir un objeto de entrada ( ServletRequest) y otro de salida (ServletResponse), condicin que obviamente cumple todo JSP y Servlet. Ahora bien, en lo que concierne el proceso de filtrado este puede ser de cualquier tipo imaginable, aunque los candidatos naturales para filtros son procesos de registro ("Logs"), pruebas de integridad ("Debugging") o simplemente la modificacin de una respuesta previo a su envo. A continuacin se describe el diseo y configuracin de un filtro empleado en la aplicacin de Java Beans descrita anteriormente:
y y

Filtro ImpuestosRegistro.java. Configuracin de Filtro en web.xml.

Eventos ("Listeners") A travs de eventos se ofrece el mecanismo para realizar determinadas acciones al momento de ocurrir un acontecimiento en un JSP o Servlet, en el sentido estricto de la palabra este mecanismo no es conocido como evento en J2EE sino como oyente o "listener", pero en principio es el mismo concepto. Si esta familiarizado con la programacin de paginas HTML con JavaScript ya conoce los fundamentos de eventos, as como JavaScript ofrece una serie de eventos que permiten realizar acciones al momento que un usuario cierra una ventana o atraviesa su "mouse" por determinado punto en una pgina, en JSP y Servlets existen otra serie de acciones que permiten realizar determinadas tareas, con la diferencia que estas ltimas son acciones de Servidor, comparado con JavaScript que representa acciones de Cliente ("Browser"). A continuacin se enumeran la serie de acciones/mtodos disponibles para ambientes Web con JSP's y Servlets :

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II Interfase Mtodo(s) Significado

ServletContextListener

Llamado al crearse y destruirse contextInitialized( ), (respectivament contextDestroyed() e) el contexto de la aplicacin (WAR).

Invocado al agregar, eliminar o modificar attributeAdded() , ServletContextAttributesListe (respectivament attributeRemoved() , ner attributeReplaced() e) un atributo del contexto de la aplicacin. Llamado al crearse y destruirse sessionCreated() , sessionDestroyed() (respectivament e) una sesin de usuario.

HttpSessionListener

Invocado al agregarse, eliminarse o attributeAdded() , HttpSessionAttributesListener attributeRemoved() modificarse , attributeReplaced() (respectivament e) un atributo de una sesin.

A continuacin se describen una serie de Clases que hacen uso de estos eventos as como un JSP que ejemplifica su uso practico :

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II

Ejemplo:
Por ejemplo vamos a crear la consulta de notas de un alumno mediante MVC

Capa de vista, que corresponde a las paginas Html y Jsp

Capa Modelo o Beans donde se encuentra las Clase identidad atributos y constructores

La capa de Controlador donde se realiza el proceso de gestin de datos

Son libreras que hay que adicionar al proyecto como el jdbc14, dbutils.jar y DataHelper que nos van a facilitar la gestin de datos

10

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II Se desea realizar la siguiente pgina:

La Clase Alumno.java package Beans; public class Alumno { private String Idalumno; private String ApeAlumno; private String NomAlumno; public String getIdalumno() { return Idalumno; } public void setIdalumno(String Idalumno) { this.Idalumno = Idalumno; } public String getApeAlumno() { return ApeAlumno; }

public void setApeAlumno(String ApeAlumno) { this.ApeAlumno = ApeAlumno; } public String getNomAlumno() { return NomAlumno; } public void setNomAlumno(String NomAlumno) { this.NomAlumno = NomAlumno; }

11

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II } La clase Cursos.java package Beans; public class Cursos { private String Idcurso; private String NomCurso; private int exp; private int exf; public double Prom(){ return (exp+exf)/2; } //// y los accesores correspondientes public String Obser(){ String res=Prom()>11?"Aprobado":"Desaprobado"; return res; } }

En la capa Dao se coloca toda la lgica de negocios , instrucciones sql que van consultar datos de la tabla y almacenarlos temporalmente en un arraylist de la clase Beans que se desea .

Procesos.java

package Dao; import Beans.*; import com.dbutils.DataHelper; import java.util.*; public class Procesos { public List<Cursos> LisCur(String cod){ String sql="select c.idcurso, nomcurso, exp, exf from curso c, notas n where c.idcurso=n.idcurso and idalumno='"+cod+"'"; return DataHelper.getListOfBeans(Conexion.Conecta Cursos.class, sql); (), } public List<Alumno> LisAlu(){ String sql="select idalumno,apealumno, nomalumno from alumno"; return DataHelper.getListOfBeans(Conexion.Conecta(), Alumno.class, sql); }

12

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II

Y la capa de Presentacin o vista donde se hace el llamado de las clases elaboradas anteriormente.

<%@page import="Beans.*,Dao.*,java.util.*" %> <html> <body> <% Procesos obj=new Procesos(); String coda=""; if(request.getParameter("cba")!=null) coda=request.getParameter("cba"); %> <h1>Lista de Notas</h1> <form action=""> Seleccione Alumno: <select name="cba" onchange="submit()"> <% for(Alumno x:obj.LisAlu()){ if(x.getIdalumno().equals(coda)) out.print("<option value="+x.getIdalumno()+" selected>"+x.getApeAlumno()+","+x.getNomAlumno()); else out.print("<option value="+x.getIdalumno()+">"+x.getApeAlumno()+","+x.getNomAlumno()); } %> </select> </form> <table border="1"> <tr><td>Codcur<td>ASignatura<td>Exp<td>Exf<td>Prom <td>Obser <% for(Cursos x:obj.LisCur(coda)){ out.print("<tr><td>"+x.getIdcurso()+"<td>"+x.getNomCurso()+"<td>"+ x.getExp()+"<td>"+x.getExf()+"<td>"+x.Prom()+"<td>"+x.Obser()); } %> </table> </body> </html>

13

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II

Repetir el ejemplo anterior pero teniendo dos listas en cascada como se muestra:

Observe ahora que la lista de alumnos depende de lo que seleccione en la especialidad y la lista de cursos lo que seleccione un alumno En la capa Beans agregar la clase Especial.java package Beans; public class Especial { private String idesp; private String nomesp; public String getIdesp() { return idesp; } public void setIdesp(String idesp) { this.idesp = idesp; } public String getNomesp() { return nomesp; } public void setNomesp(String nomesp) { this.nomesp = nomesp; } } La capa de procesos hay que modificarlo: package Dao; import Beans.*; import com.loli.hernandez.dbutils.DataHelper; import java.util.*;

14

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II

public class Procesos { public List<Cursos> LisCur(String cod){ String sql="select c.idcurso, nomcurso, exp, exf from curso c, notas n where c.idcurso=n.idcurso and idalumno='"+cod+"'"; return DataHelper.getListOfBeans(Conexion.Conecta(), Cursos.class, sql); } public List<Alumno> LisAlu(String code){ String sql="select idalumno,apealu mno, nomalumno from alumno where idesp='"+code+"'"; return DataHelper.getListOfBeans(Conexion.Conecta(), Alumno.class, sql); } public List<Especial> LisEsp(){ String sql="select idesp,nomesp from especialidad"; return DataHelper.getListOfBeans(Conexion .Conecta(), Especial.class, sql); } } Y en la capa de presentacin : <%@page import="Beans.*,Dao.*,java.util.*" %> <html> <body> <% Procesos obj=new Procesos(); String coda="", code=""; if(request.getParameter("cba")!=null) coda=request.getParameter("cba"); if(request.getParameter("cbe")!=null) code=request.getParameter("cbe"); %> <h1>Lista de Notas</h1> <form action=""> Seleccione especialidad:<sele ct name="cbe" onchange="submit()"> <% for(Especial x:obj.LisEsp()){ if(x.getIdesp().equals(code)) out.print("<option value="+x.getIdesp()+" selected>"+x.getNomesp()); else out.print("<option value="+x.getIdesp()+">"+x.getNomesp()); } %> </select> <br> Seleccione Alumno: <select name="cba" onchange="submit()"> <% for(Alumno x:obj.LisAlu(code)){ if(x.getIdalumno().equals(coda))

15

Ing. Alberto Moreno C.

LENGUAJE DE PROGRAMACION II

out.print("<option value="+x.getIdalumno()+" selected>"+x.getApeAlumno()+","+x.getNomAlumno()); else out.print("<option value="+x.getIdalumno()+">"+x.getApeAlumno()+","+x.getNomAlumno()); } %> </select> </form> <table border="1"> <tr><td>Codcur<td>ASignatura<td>Exp<td>Exf<td>Prom <td>Obser <% for(Cursos x:obj.LisCur(coda)){ out.print("<tr><td>"+x.getIdcurso()+"<td>"+x.ge tNomCurso()+"<td>"+ x.getExp()+"<td>"+x.getExf()+"<td>"+x.Prom()+"<td>"+x.Obser()); } %> </table> </body> </html>

16

Ing. Alberto Moreno C.

Вам также может понравиться