El Modelo MVC de JAVA

Embed Size (px)

Citation preview

  • 5/16/2018 El Modelo MVC de JAVA

    1/16

    09/03/12 EI modelo MVC de JAVA

    El R incon del G uille

    El m odelo MVC de JAVA

    Las aplicaciones Web estan organizadas siguiendouna arquitectura de 3 capas, donde la capa cliente,implementada mediante paginas Web, tiene comomiston la captura de datos del usuario y su envlo a lacapa intermedia, asi como la presentacion deresultados procedentes de esta. Es la capa intermediala que constituye el verdadero nucleo de la aplicacionWeb, encargandose del procesamiento de los datosdel usuario y de la generacion y envio de lasrespuestas a la capa cliente. Durante este proceso, lacapa intermedia debera tnteracctonar con las capa dedatos para el almacenamiento y recuperacicn de lainformacion manejada por la apucacton.Uno de los esquemas y, con toda seguridad , el masutilizado por los desarrolladores que utilizan J2EE, esla arquitectura Modelo Vista Controlador(MVC), la cualproporciona una clara separacion entre las distintasresponsabilidades de la apucacton.Cuando hablamos de arquitectura Modelo VistaControlador nos referimos a un patron de diseiio queespecifica como deber ser estructurada unaaplicacion, las capas que van a componer la misma yla funcionalidad de cada una.

    Segun este patron, la capa intermedia de unaaplicacion Web puede ser divididad en tres grandesbloques funcionales:1 C t l d

    buscar

    El R incon delGuilleEl Rincon d el G u ille

    ArchivoJulio 200 9 (1)

    Categoriasjava

    SuscrfbeteRSS I Atom

    ContactoContac tar

  • 5/16/2018 El Modelo MVC de JAVA

    2/16

    09/03/12 EI modelo MVC de JAVA

    CONTROLADOR

    Se puede decir que el controlador es el que dirige laaplicacion. Todas las peticiones a la capa intermediaque se realicen desde el cliente son dirigidas alcontrolador, cuya miston es determinar las acciones arealizar para cada una de estas peticiones e invocaral resto de los componentes de la aplicacion (Modelo yVista) para que realicen las acciones requeridas encada caso, encargandose tarnbten de la coordinacionde todo el proceso.

    Ventajas

    1. Hace que el desarrollo sea mas sencillo y limpio2. Facilita el posterior mantenimiento de la aplicactonhaciendola mas escalable.3. Facilita la deteccion de errores en el codtgo,En aplicaciones J2EE el Controlador es implementadomediante un Servlet central que, dependiendo de lacantidad de tipos de peticiones que debe gestionar,puede apoyarse de otros servlets auxiliares paraprocesar cada peticion.

    VISTA

    Es la encargada de generar las respuestas (XHTML)que deben ser enviadas al cliente. Cuando estarespuesta tiene que incluir datos proporcionados porel Controlador, el codigo XHTML de la pagtna no serafijo si no que debera ser generado de formadinarnica, por 1 0 que su irnplementacion correra acargo de una pagina JSP.

    Las pagtnas JSP resultan mucho mas adecuadas parala generacion de las vistas de los servlets pues, al serdocumentos de texto, resulta sencilla la inclusion debloques estattcos XHTML y pueden ser facilmentemantenibles por diseftadores Web con escasosconocimientos de prograrnacton.

    Cuando la informacion que se va a enviar es estatica,es decir, no depende de datos extraidos de unalmacenamiento externo, podra ser implementadapor una pagina 0 documento XHTML.

    MODELO

    En la arquitectura MVC la logica de negocio de laIi io i I d I I d t

  • 5/16/2018 El Modelo MVC de JAVA

    3/16

    09/03/12 EI modelo MVC de JAVAnegocio independenientes deLControLador y LaVista,permitiendo asi su reutitizacton y eLdesacopLamientoentre Lascapas.

    En una aplicacion J2EE eLmodele puede serimpLementado mediante clases estandar Java 0traves de Enterprise JavaBeans.

    ,COMO FUNCIONA UNA APLICACION MVC?

    AnaLizemos Losprocesos que tienen Lugar en Lacapaintermedia desde que Uega Lapeticion procedente deLacapa cliente hasta que se genera Larespuesta:

    1. Captura de la peticion en el controlador: Comohemos dicho, todas Laspeticiones que se reciben enla apltcacton son centralizadas en el ControLador, elcual a partir de LaURL de la solicitud determina eltipo de Laoperacion que quiere llevar a cabo elcliente. Normalmente, esto se hace analizando elvalor de algun pararnetro que se envfa anexando a LaURL de Lapeticion y que se utiliza con esta finalidad:

    url?operacion=validar

    Otra opcion es utilizar la propia URL para codificar laoperacion a realizar, en este caso, se utilizarfa eLpath info de Ladtreccion como indicativo deL tipo deaccton. En este sentido, La figura 4 nos muestra Lasdistintas partes en Lasque se puede descomponer LaURL completa asociada a una peticion.

    http://www.dominajava.net!aplicacion/url_servlet!info

    1. http://www.miservidor.com: Servidor2. aplicacion: url de Laaplicacion (context path)3. url_servlet: url del servlet (servlet path)4. info: informacion adicional (path info)

    Por ejemplo, si en un servidor de nombre de dominiowww.tiendaOnline.net!tenemos desplegada unaapucacton lLamada "accesorios", cuyo ControLador esun servlet que tiene como url pattern el valor"I control", LaURL asociada a Laoperacion de validarpodrfa ser:

    www.tiendaOnline.net!accesorios Icontrol/validar

    Otra operacion podria ser:www.tiendaOnline.net!accesorios/controL/buscaraccesorio

    http://www.dominajava.net%21aplicacion/url_servlet!infohttp://www.miservidor.com/http://www.tiendaonline.net%21tenemos/http://www.tiendaonline.net%21accesorios/http://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/http://www.tiendaonline.net%21tenemos/http://www.miservidor.com/http://www.dominajava.net%21aplicacion/url_servlet!info
  • 5/16/2018 El Modelo MVC de JAVA

    4/16

    09/03/12 EI modelo MVC de JAVAgetPathlnfo() deL A PI servLet para determ inar Lao pe ra cio n a re aL iz ar.R e alizar un controLador que genere n-peticiones enun a aplicacion Web dependera de m apear eL servLet.Los pasos para m apear La UR L de un servLet son Lossiguientes:Vamos a crear nuestro primer S ervLet y Lovamos allam ar paqjspservLets.H oLaS e rvLet. E ste S e rvLet va apertenecer a una aplicacion 0 con texte L Lamad oprojspservLets. S i este S ervLet esta hospedado en unservidor Java EE e n nuestro ordenador , y Lollam am os desde un navegador tam bien des de nuestropropio ordenador escrib irem os La siguiente U R L.h ttp :/ /L oc aLhost :8 084 /p ro js ps erv Le ts I paqjs ps erv Le ts . HoLaSe rv Le t

    I pro jsp servL ets e s e L nomb re d e L aa plicacio n 0contexteI pa qjsp se rv Le ts .H oL aSe rv Le t e s L a sig na tu ra c ompLe tad eL S e rvL et, e s d ecir e L nomb re d eL S e rvL et ju ntame ntec on e L p a qu ete a L cu aL p erte ne cePues bien, esta form a antigua de LLam ara un S ervLetLa vam os a m odificar por esta otra form a actuaLhttp://LocaLhost:8084/projspservLets/hoLa

    IhoLa en vez de escrib ir en eL path de La UR L Lasignatura com pLeta deL S e rvLet, Lo que hacem os esutilizar un aLias para que de esta form aLa U R L sea m as cortay para que podam os cam biar eL nom bre deL S e rvLet ydeL p aquete libremente en un futuro sin que Losusuarios se vean afectados por eL cam bio de nom bre,ya qu e eL Lo sse gu ira n utiliza ndo e L aL iasA esta accton se Le llama m apear La UR L de unS ervLet. Para poder llevar a cabo este m apeo LosC ontenedores W eb continen para cada aplicacion 0contexte un documento XM L a modo de Descriptor deDes plie gu e (D ep Lo yment D es crip to r) L Lamadoweb.xmL .La Labor deL C ontenedor W eb es Leer (parsear) eLd ocume nto w eb .xm L pe rte ne cien te a La ap ltca cto n 0

    a d L L

    http://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesoriohttp://www.tiendaonline.net%21accesorios/controL/buscaraccesorio
  • 5/16/2018 El Modelo MVC de JAVA

    5/16

    09/03/12 EI modelo MVC de JAVA

    Este es el aspecto del fichero web.xmlholaServletpaqjspservlets. HolaServlet< / servlet-class>

    holaServlet /hola< furl-pattern>

    30< / session-ti meout>index.jsp

    Descripcton del fichero Web.xml

  • 5/16/2018 El Modelo MVC de JAVA

    6/16

    09/03/12 EI modelo MVC de JAVAclass> indica el Servlet que se va a ejecutar en elContenedor Web una vez se ha realizado el mapeouna aphcacton puede tener cero 0 mas mapeos deServlets/hola el Contenedor Webbusca en el fichero web.xml en este caso el alias/hola y cuando lo encuentra lee el valor delsubelemento que en este caso esholaServlet entonces se encarga de buscar el mismocontenido, en este caso holaServlet en elsubelemento del elemento

    2. Procesamiento de la peticion

    Una vez que el Controlador determine la operacton arealizar, procedee a ejecutar las accionespertinentes, invocando para ello a los diferentesrnetodos expuestos por el Modelo.

    Dependiendo de las acciones a realizar (por ejemplo,un alta de un usuario en el sistema), el Modelonecesitara manejar los datos enviados por el clienteen la peticion, datos que le seran proporcionados porel controlador. De la misma manera, los resultadosgenerados por el Modelo (por ejemplo la informacionresultante de una busqueda seran entregadosdirectamente al controlador).

    Para facilitar este intercambio de datos entre elControlador y Modelo y , posteriormente, entreControlador y Vista, las aplicaciones MVC suelen haceruso de JavaBeans. Un JavaBean no es mas que unaclase que encapsula un conjunto de datos conrnetodos de tipo set/get para proporcionar un accesoa los mismos desde el exterior. El siguiente listadorepresenta un JavaBean de ejemplo que permiteencapsular una serie de datos asocioados a unapersona.

    public class Persona {private String nombre;private String apellido;private int edad;

    public void setNombre(String nombre) {this.nombre = nombre;

  • 5/16/2018 El Modelo MVC de JAVA

    7/16

    09/03/12 EI modelo MVC de JAVAreturn this.nombre;}public void setApellido(String apellido) {this.apellido = apellido;}public String getApellido() {return this. apellido;}public void setEdad(String edad) {this.edad = edad;}publicintgetEdad() {return this.edad;}3. Generaci6n de respuestas

    Los resultados devueltos por el Modelo al Controladorson depositados por este en una variable de peticion,seston 0 apticacion, segun el alcance que debantener. A continuacion, el Controlador invoca a lapagina JSP que debe encargarse de generar la vistacorrespondiente, esta pagina accedera a la variablede ambito donde esten depositados los resultados ylos utitizara para generar dtnamtcamente la respuestaXHTML que sera enviada al cliente.CASO pRACTICO

    Se desarrollara una aplicacion Web que consistlra enun sencillo sistema de envio y visualiacion demensajes a traves de la Web, cuyas paginas sernostraran en una navegador Web. Cada mensajeestara formado por un destinatario, un remitente yun texto.

    La pagina de inicio muestra dos enlaces con lasopciones del usuario, la de visualizacion de mensajesle llevara a otra pagina ("mostrar.htm"), donde se lesolicitara el nombre del destinatario cuyos mensajesquiere vizualizar. En caso de tener mensajesasociados se le enviara a una pagina donde se lernostrara una tabla con todos sun mensajes,indicando para cada uno de ellos el remitente y elcontenido del mensaje. Por otro lado, la opcion deenvio de mensajes le t levara a una pagina en la quese le soucttaran los datos del mensaje que quiere

    d l ie d l del aid iii

  • 5/16/2018 El Modelo MVC de JAVA

    8/16

    09/03/12 EI modelo MVC de JAVADESARROLLO

    Los mensajes manejados por la aplicacion seranalmacenados en una tabla cuya estructura se indica.

    Hombre del campo Tipo de datos

    remientedestinatariotexto

    cadena de textocadena de textocadena de texto

    El desarrollo de esta aplicacion se reattzara siguiendoel patron MVC, donde tendremos un servlet llamado"controlador" en el que se centralizaran todas laspeticiones procedentes desde el diente.

    El Modelo estara implementado mediante una dase ala que llamaremos Operaciones que dispondra de dosrnetodos: grabarMensaje(), encargado de almacenaren la base de datos los datos de un mensaje, yobtenerMensajes(), cuya fundon sera la de recuperarla lista de mensajes asociados al destinatario que seproporciona como para metro.Los mensajes seran manipulados mediante una claseJavaBean llamada Mensaje, que encapsutara los tresdatos asociados a un determinado mensaje.

    En cuanto a la vistas, seran implementadas mediantecinco pagtnas, dos XHTML(inicio.htm y mostrar.htm),y tres JSP(envio.jsp, ver.jsp, nomensajes.jsp).Utilizando el pararnetro "operacion" insertando en laURL, la pagina inicio.htm, mostrar.htm yenvio.jsptndicaran al servlet controlador el tipo de accton quese debe llevar a cabo en cada peticion.

    Listados - A continuadon se presenta el codigo decada uno de los elementos de la apltcacion.Clase Mensaje

    package javabeans;

    public class Mensaje {private String remite;private String destino:private String texto;public Mensaje(){}Ilconstructor que permite crear un objetoIIMensaje a partir de los datos del mismobli M j (St i it St i d ti St i

  • 5/16/2018 El Modelo MVC de JAVA

    9/16

    09/03/12 EI modelo MVC de JAVAthi s.desti no-des ti no;thi s.texto=texto;}public void setRemite(String remite){this. remite=remite;}public String getRemiteO{return this. remite;}public void setDestino(String destino){thi s.desti no-des ti no;}public String getDestinoO{return this.destino;}public void setTexto(String textoj]thi s.texto=texto;}public String getTextoO{return this. texto;}}

    Clase controladorpackage servlets;import javax.servlet. *;import javax.servlet.http. *;import java. io. *;import java. util. *;import javabeans. *;import modelo. *;public class Controlador extends HttpServlet {public void service(HttpServletRequest request,HttpServletResponse response) throwsServletException, IOException {String op=request. getParameter("operacion");/ /acceso a la pagina de envio de mensajesif(op.equals ("envio"))response.sendRedirect("envio.jsp") ;/ /grabacicn de un mensajeif(op.equals ("grabar") HMensaje men=(Mensaje )request. getAttri bute(" mensa");Operaciones oper=new Operaciones();oper.grabaMensaje(men);response.sendRedirect("inicio. htrn"):}/ /acceso a la pagina de solicitud de mensajesif(op.equals ("muestra"))

    dR di t(" t ht ")

  • 5/16/2018 El Modelo MVC de JAVA

    10/16

    09/03/12 EI modelo MVC de JAVAOperaciones oper=new Operaciones();ArrayListmensajes=oper. obtenerMensajes (request. getParameter(" nombre"));request.setAttribute("mensajes", mensajes);RequestDispatcherrd=request. getRequestDispatcher(" Iver.jsp");rd. forward(request,response);}}}Clase Operacionespackage modelo;import java.sql. *;import javabeans. *;import java. util. *;public class Operaciones {I Imetoda cornun para la obtenci6nIIde conexionespublic Connection getConnection(){Connection en-null:try{Class.forName("sun. j dbc.odbc.JdbcOdbcDriver");cn=DriverManager.getConnection("jdbc:odbc:mensajes");}catch(Exception eHe.printStackTrace();}return cn;}public ArrayList obtenerMensajes(String destino){Connection cn=null;ArrayList mensajes=null;Statement st;ResultSet rs;try{cn=getConnection() ;st=cn.createStatement();String tsql;tsql="select * from mensajes wheredesti natario-" -destino-'?";rs=st.executeQuery(tsql);mensajes=new ArrayList();IIpara cada mensaje encontrado crea un objetoIIMensaje y lo anade a la colecci6n ArrayListwhi le(rs.next() HMensaje rn=newMensaje(rs. getString ("remitente"), rs.getString(" destinatario"), rs.getString ("texto"));mensajes.add(m);}cn.close();}

    t h(E ti H tSt kT () }

  • 5/16/2018 El Modelo MVC de JAVA

    11/16

    09/03/12 EI modelo MVC de JAVApublic void grabaMensaje(Mensaje m){Connection cn;Statement st;ResultSet rs;try{cn=getConnection() ;st=cn.createStatement();String tsql;Iia partir de los datos del mensaje construyelila cadena SQL para realizar su tnsertontsql="lnsert into mensajes values("';tsql+=m. getDestino( l+"."+m. getRemite( )+"', '"+m. getTexto( )+"')";st. execute(tsql);cn.close();}catch(Exception e){e.printStackTrace();}}}

    VISTAS DE LA APLICACION

    inicio.htm



    Enviar mensaje

    Leer mensajes

    mostrar. htm

  • 5/16/2018 El Modelo MVC de JAVA

    12/16

    09/03/12 EI modelo MVC de JAVAenvio.jspenvio< Ititle>

    Introduzca remitente :

    Introduzca texto :

  • 5/16/2018 El Modelo MVC de JAVA

    13/16

    09/03/12 EI modelo MVC de JAVA

  • 5/16/2018 El Modelo MVC de JAVA

    14/16

    09/03/12 EI modelo MVC de JAVAControlador< / servlet- name>servlets. Controlador< / servlet-class>Controlador< / servlet- name> / controlador< furl-pattern>30index.jsp

    Bibliografia1. STRUTS,Antonio J. Martin Sierra, EditorialAlfaomega RA-MA, Ano 2008.2. Manual de Referencia JSP, Phil Hanna, Mc GrawHill, Osborne Media.Escrito por guil.lermoarreola el27/07/2009 23:10 I

    Comentarios (7)

    Comentar iosGracias man, este codigo me ayudabastante.Un saludo.Escrito por Hill 23/08/2009 21:31

    Hola, tengo hecho el mismo ejemplo que tudel mismo libro pero no lo puedo ejecutar.Me falla a la hora de recibir la peticion elcontrolador ya que me dice que"/controlador?operacion=ver" no estadisponible ese servicio 0 algo parecido.Me gustarfa que me ayudaras si es posible.

  • 5/16/2018 El Modelo MVC de JAVA

    15/16

    09/03/12 EI modelo MVC de JAVAGraciasEscrito por Adrian 07/10/200918:09

    Muy buen material, me ayudo muchisimo,los conceptos daros y sencillos y el ejemploes bien practico y facH de entender.Saludos...Escrito por Ruben 08/10/2009 19:38

    todo bien explicado pero sale.."/controlador?operacion=ver" no estadisponible ese servicio 0 algo parecido.lo mismo que HillEscrito por mario 12/11/200920:04

    xD!! !...MHGracias esto esta muy dare yconcreto ... sin mas que pedir ... :)Escrito por Angel Atencio 26/021201018:24

    IIEscrito por jhkj 24/04/201006:10

    esta super en serio m ayudaron a hacer facHy rapi do mi tareagraxxiasEscrito por laura 24/0512011 06:54

    Anadir un Comentario:Tu Nombre:

    T u Em ail:

    Cornentario:

  • 5/16/2018 El Modelo MVC de JAVA

    16/16

    09/03/12 EI modelo MVC de JAVA

    Inserta aqui el c6digo de verificaci6n que Yesen la imagen.

    Enviar comentario