16
 LENGUAJE DE PROGRAMACION II 1 Ing. Alberto Moreno C. Modelo ± Vista ± Controlador (MVC) Aplicaciones JAVA Desde hace mucho tiemp o, se utiliza MVC para las aplicaciones JAVA. y en esta ocacion tratare de mostrarle con plabras sencillas, ³La idea genera l 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 qu e al momento de cambiar el Modelo, la vista redibujara la parte efectada para reflejar los cambios.  MVC (Modelo-Vista-Controlador), en palabras simples, es la forma(Patron de Disenio) que utilizamos los programadores para implementar nuestras aplicaciones, además permite separar nuestra aplicacion en un modelo, una vista y con controlador. este patron fue introducido por primera vez en el lenguaje ³ Sm al lta lk´. 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 a cceso a nu estra Base de Dat os, agregando q tiene las funciones que controlan la integridad del sistema.

Mode Lo Vista Control Ad Or

Embed Size (px)

Citation preview

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>