5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 1/16
LENGUAJE DE PROGRAMACION II
1 Ing. Alberto Moreno C.
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´.
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 loscambios.
MVC (Modelo-Vista-Controlador), en palabras simples, es laforma(Patron de Disenio) que utilizamos los programadores para
implementar nuestras aplicaciones, además permite separar nuestraaplicacion en un modelo, una vista y con controlador. este patron fue
introducido por primera vez en el lenguaje ³Smalltalk´.
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.
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 2/16
LENGUAJE DE PROGRAMACION II
2 Ing. Alberto Moreno C.
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.
P or que usar MVC?
Porque fue diseñada para reducir el esfuerzo al momento de programar. Ademas porque
permite una clara separación entre los componentes de un programa; lo cual nos permiteimplementarlos por separado.
Permite el trabajo en equipo.
J ava 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 prescribía un alto
acoplamiento entre controladores y vistas.
P or que es recomendable tener nuestro P ropio 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 por defecto deSwing. y obviamente estos modelos utilizan la clase java.util.Vector para el
almacenamiento de los datos lo que provocará que nuestros interfaces pierdan ahorro derecursos.
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 más eficientes .
Espero haya quedado la idea general, de implementar nuestras aplicaciones tomandocomo 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 través de este "Framework" se
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 3/16
LENGUAJE DE PROGRAMACION II
3 Ing. Alberto Moreno C.
logra una división de las diferentes partes que conforman una aplicación,
siendo su principal razón de ser: manutención del código fuente .
Conforme incrementan las necesidades de cualquier aplicación, la
modificación a código existente se hace inminente y si no existe una
clara división de uso , el código no solo se torna indescifrable sino en
ocasiones impredecible debido a la mezcla de funcionalidades que
pueden surgir.
A través de MVC se realiza la siguiente división :
y Model: Concentra las funcionalidades relacionadas con el Modelo de
datos, esto es, el acceso y manipulación de depósitos informativos como
Bases de Datos y Archivos.
y View: Se basa en el aspecto visual/gráfico que será empleado por laaplicación en cuestión.
y Controller: Empleado como un mediador entre el medio gráfico (" View")
y el modelo ("Model"), coordina las acciones que son llevadas acabo
entre ambos.
C on JSP's y Servlets
El uso de "MVC" en ambientes Web para JSP's y Servlets ha empezado a
generar gran interés, debido a que una vez diseñada una aplicación para
ambiente Web es raro que ésta permanezca sin cambios, el uso de MVC
permite realizar diseños con JSP's/Servlets que logran verdaderas
soluciones a escala.
Tomemos el simple caso de un proceso de registro que después de varios
meses requiere ser modificado para solicitar datos no contemplados en el
diseño inicial, o bien, la modificación de un proceso de trabajo ("Work-
Flow") que requiere modificar el orden de solicitud de datos; cualquiera
de los casos anteriores requiere forzosamente modificación al código de
JSP's y/o Servlets, observe la siguiente gráfica que demuestra los
posibles resultados de una aplicación con JSP's/Servlets :
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 4/16
LENGUAJE DE PROGRAMACION II
4 Ing. Alberto Moreno C.
La sección izquierda demuestra un posible diseño que pudo ser empleado
al diseñar la aplicación antes mencionada, las principales deficiencias son
las siguientes:
y La secuencia de JSP's que conforma la parte visual de la aplicación
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 código fuente de diversos JSP's.
y
La lógica de negocios, que correspondería al Modelo de la aplicación,también esta enlazada directamente con JSP's, esto tiene como
consecuencia que el diseño de lógica de negocios (a través de
Servlets) esta fuertemente basado en el diseño de los JSP's frontales,
esto dificulta que sean reutilizados diversos elementos de lógica 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
través de una modificación sencilla al Servlet "Controlador", los JSP's
no contienen código de "Workflow" (Flujo de Trabajo).
y La lógica de negocios que correspondería al Modelo es obtenida a
través del Servlet "Controlador", esto permite que la lógica de
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 5/16
LENGUAJE DE PROGRAMACION II
5 Ing. Alberto Moreno C.
negocios (Servlets) permanezca aislada de cualquier tipo de
despliegue gráfico (JSP's), en efecto, facilitando la reutilización de
componentes de negocios (Servlets) con diversos JSP's .
Finalmente, vale mencionar que hoy en día existen diversas
implementaciones para utilizar un "Framework MVC" en ambientes de
JSP's/Servlets, entre ellas se encuentran :
y Struts (http://jakarta.apache.org/struts)
y Spring (http://www.springframework.org/)
y Maverick (http://mav.sourceforge.net/)
La siguiente sección de este curso describirá el uso de "Struts"
(http://jakarta.apache.org/struts) que es un Software Open-Source
desarrollado por la fundación Apache.
Java Beans
Un Java Bean es una manera de modularizar el uso datos en una
aplicación con JSP's/Servlets a través de una C lase, su característica
primordial es el uso de los métodos get y set los cuales permiten el
acceso a los valores del Bean, el diseño de un Java Bean es
relativamente sencillo ya que no posee código extenso, observe el
siguiente Java Bean que es utilizado para manipular datos de usuarios.
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)
{
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 6/16
LENGUAJE DE PROGRAMACION II
6 Ing. Alberto Moreno C.
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:
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 7/16
LENGUAJE DE PROGRAMACION II
7 Ing. Alberto Moreno C.
y La clase es llamada Usuario e implementa la clase
java.io.Serializable una característica primordial de todo Java
Bean.
y Posteriormente se definen los campos ("fields") utilizados dentrodel Java Bean en un contexto privado (private).
y Se definen dos Constructores Java, uno que asigna los parámetrosa la instancia con valores de entrada, y el Constructor "default" sindatos de entrada.
y A través de los diversos métodos get/set es posible modificar los
valores iniciales definidos en el Java Bean.
A través de Java Beans es posible encapsular conceptos de
diferentes tipos, en el proceso permitiendo la manipulación de
valores a través de una sola Clase, de esta manera facilitando el
manejo de información y a su vez el desarrollo de Software; acontinuación se describe el uso de Java Beans en conjunción de
JSP's y Servlets:
y Java Bean P roducto.java.
y Uso de Java Beans en JSP's/Servlets.
A simple vista el uso de Java Beans parece superficial, pero conforme
empieza a crecer el tamaño de una aplicación su uso se hace más
evidente, lo cual será ejemplificado en la siguiente sección utilizando el
paradigma "MVC"("Model-View-Controller") a través de "Struts" y
posteriormente en conjunción de JSTL.
F iltros
Otro paradigma empleado en diseños modulares de JSP's y Servlets es el
de F iltros, como su nombre lo implica, un filtro permite que determinada
requisición o respuesta sea analizada en circunstancias especificas. En
este caso la requisición y/o respuesta corresponden a los principales
elementos de un Servlet (por ende JSP también) que son los objetos
ServletRequest y ServletResponse respectivamente.
Una de las principales características 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
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 8/16
LENGUAJE DE PROGRAMACION II
8 Ing. Alberto Moreno C.
inclusive Servlet/JSP a HTML, la única condición que debe cumplirse es
que debe existir un objeto de entrada (ServletRequest) y otro de salida
(ServletResponse), condición 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 modificación de una respuesta previo a su envío. A
continuación se describe el diseño y configuración de un filtro empleado
en la aplicación de Java Beans descrita anteriormente:
y Filtro I mpuestosRegistro.java.
y Configuración de Filtro en w eb.xml .
E ventos ("Listeners")
A través 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 programación de paginas HTML con
JavaScript ya conoce los fundamentos de eventos, así como JavaScriptofrece 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 página, 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 continuación se enumeran la serie de acciones/métodos disponibles
para ambientes Web con JSP's y Servlets :
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 9/16
LENGUAJE DE PROGRAMACION II
9 Ing. Alberto Moreno C.
Interfase Método(s) Significado
ServletContextListenercontextInitialized(
),
contextDestroyed()
Llamado al
crearse y
destruirse(respectivament
e) el contexto de
la aplicación
(WAR).
ServletContextAttributesListe
ner
attributeAdded(),
attributeRemoved(),attributeReplaced()
Invocado al
agregar, eliminar
o modificar
(respectivament
e) un atributo
del contexto dela aplicación.
HttpSessionListenersessionCreated(),sessionDestroyed()
Llamado al
crearse y
destruirse
(respectivament
e) una sesión de
usuario.
HttpSessionAttributesListener
attributeAdded(),
attributeRemoved(),attributeReplaced()
Invocado al
agregarse,
eliminarse o
modificarse
(respectivament
e) un atributo de
una sesión.
A continuación se describen una serie de Clases que hacen uso de estos
eventos así como un JSP que ejemplifica su uso practico :
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 10/16
LENGUAJE DE PROGRAMACION II
10 Ing. Alberto Moreno C.
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 gestión de datos
Son librerías que hay que
adicionar al proyecto como el
jdbc14, dbutils.jar y DataHelper
que nos van a facilitar la gestión
de datos
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 11/16
LENGUAJE DE PROGRAMACION II
11 Ing. Alberto Moreno C.
Se desea realizar la siguiente página:
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;
}
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 12/16
LENGUAJE DE PROGRAMACION II
12 Ing. Alberto Moreno C.
}
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 lógica 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);
}
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 13/16
LENGUAJE DE PROGRAMACION II
13 Ing. Alberto Moreno C.
Y la capa de Presentación o vista donde se hace el llamado de las clases elaboradasanteriormente.
<%@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>
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 14/16
LENGUAJE DE PROGRAMACION II
14 Ing. Alberto Moreno C.
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 laespecialidad y la lista de cursos lo que seleccione un alumnoEn 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.*;
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 15/16
LENGUAJE DE PROGRAMACION II
15 Ing. Alberto Moreno C.
public class Procesos {public List<Cursos> LisCur(String cod){
String sql="select c.idcurso, nomcurso, exp, exf from curso c, notas n wherec.idcurso=n.idcurso and idalumno='"+cod+"'";return DataHelper.getListOfBeans(Conexion.Conecta(), Cursos.class, sql);}public List<Alumno> LisAlu(String code){
String sql="select idalumno,apealumno, nomalumno from alumno whereidesp='"+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 presentación :
<%@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:<select name="cbe" onchange="submit()"><%
for(Especial x:obj.LisEsp()){if(x.getIdesp().equals(code))out.print("<option value="+x.getIdesp()+"
selected>"+x.getNomesp());elseout.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))
5/9/2018 Mode Lo Vista Control Ad Or - slidepdf.com
http://slidepdf.com/reader/full/mode-lo-vista-control-ad-or-559ca0be381bc 16/16
LENGUAJE DE PROGRAMACION II
16 Ing. Alberto Moreno C.
out.print("<option value="+x.getIdalumno()+"selected>"+x.getApeAlumno()+","+x.getNomAlumno());
elseout.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>