mvc

16
Ingenio DS Programando Soluciones http://ingeniods.wordpres.com MAURO GOMEZ MEJIA IX SEMESTRE INGENIERIA DE SISTEMAS 05-2010

Upload: mauro-gomez-mejia

Post on 29-Jun-2015

11.359 views

Category:

Technology


1 download

DESCRIPTION

Implementación de MVC en JSP

TRANSCRIPT

Page 1: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

MAURO GOMEZ MEJIA

IX SEMESTRE INGENIERIA DE SISTEMAS

05-2010

Page 2: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

En JSP existe una forma muy practica de programar usando el patrón MVC

(modelo-vista-controlador), donde se separan aun mas las capas, no es la

intención explicar el patrón MVC, sino explicar su aplicación en JSP.

En mi corta experiencia he visto varias formas de aplicar este patrón a aplicaciones

de las cuales he hecho mi propia implementación utilizando cosas de la una y de la

otra.

Modelo Vista Controlador

- Beans

- Action

- Actions

- Model

- WebModel

- Paginas

JSP/HML

- Controller

Page 3: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

Las clases que interviene las representamos en el siguiente diagrama

- Bean Departamento

- Bean Empleado

- Model utiliza a Empleado

- Model utiliza a Departamento

- WebModel extiende de Model

- Action utiliza a Model

- AgregarEmpleado es una Action

- AgregarDepartamento es una Action

- Controller utiliza a Action (o cualquier clase

que extiende de ella)

Page 4: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

La manera en que inicia la aplicación

web.xml

•Guarda la

configuración

para conectarse

a la base de

datos.

•Guarda la

configuración

(mapeo) del

servlet.

InitModel.jsp

• Carga la

configuración de

la BD y se

conecta.

• Inicializa

(controller, baseurl,

absoluteurl).

index.jsp

• Carga a

InitModel.jsp

Page 5: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

La manera de interactuar de la aplicación es

pagina.jsp

• Muestra información .

• Llamado a servlets.

Controller.class

• Atender y re-direccionar los

llamados a un Action.

• Buscar en memoria o

cargar en memoria las

Actions

Action.class

• Encapsular los métodos

necesarios para permitir

seteo de parámetros (como

servlet).

• Encapsular los métodos

necesarios para permitir

ejecución (doGet, doPost)

•Re-direccionar.

2

31

3

1. Al ocurrir un evento, este

(dependiendo, de los parámetros

de mapeo) será direccionado al

Controller.

2. El Controller cargará la Action

correspondiente seteará y

ejecutará.

3. La Action se ejecuta y re-

direcciona a una pagina o en

algunos casos a otro Action.

Page 6: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

La manera de interactuar de la aplicación es

index.jsp

•Carga la información de la

configuración.

• Incluye las otras paginas.

•Hace los llamados

RegistarDepartamento y

RegistrarEmpleado.

Controller

• Atender y re-direccionar los

llamados a un

RegistarDepartamento y

RegistrarEmpleado..

• La primera vez los

inicializa, la segunda los

busca en memoria.

RegistarDepartamento

RegistrarEmpleado

• Realizan una operación.

•.Re-direccional la pagina al

index.

2

31

Page 7: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

El archivo de configuración web.xml

El tipo de XML

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

La configuración realmente se encuentra dentro de las etiquetas

<web-app> y </web-app>

Nombre y descripción solo etiquetas informativas

<display-name>EJERCICIO 13 MODELO-VISTA-CONTROLADOR</display-name>

<description> XML de configuración para aplicar el patrón MVC en jsp</description>

Page 8: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

El archivo de configuración web.xml

Los parámetros o variables de contexto

<context-param> (declaramos un parámetro/variable de contexto )

<param-name>nombre</param-name> (le damos un nombre)

<param-value>valor</param-value> (le damos un valor)

</context-param> (cerramos la declaración)

De la forma anterior declaramos 5 parámetros

• JdbcDriver = com.mysql.jdbc.Driver;

• databaseURL= jdbc:mysql://localhost:3306/ejercicios;

• databaseUser= root;

• databaseKey=;

• ABSOLUTEURL = http://localhost:8181/ejercicio13/;

Los parametros los usamos para:

• JdbcDriver = la clase driver que usaremos para conectarnos a la BD;

• databaseURL= URL de la base de datos;

• databaseUser= nombre de usuario a la base de datos;

• databaseKey=; clave para la base de datos

• ABSOLUTEURL = dirección a nuestra aplicación;

Page 9: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

El archivo de configuración web.xml

Definición y mapeo del servlet

Esto hace referencia a la configuración del servlet quien responderá los llamados a los servlets

<servlet>(abrimos la etiqueta para describir un servlet)

<servlet-name>controlador</servlet-name>(que llamaremos controlador)

<servlet-class>org.Controller</servlet-class>(y la clase es org.Controller)

</servlet>(cerramos definicion del servlet)

<servlet-mapping>(el mapeo del servlet)

<servlet-name>controlador</servlet-name>(el servlet que se llama controlador)

<url-pattern>/servlet/*</url-pattern>(responderá los llamados que tengan esta estructura /servlet/*)

</servlet-mapping>(cerramos mapeo del servlet)

O sea que nuestro servlet responderá cualquier url a la que llamemos que tenga

algo_aqui/servlet/cualquier_cosa_aqui

Page 10: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

InitModel.jsp

Inicializando la conexión a la BD

<jsp:useBean id="model" scope="session" class="org.WebModel">

<%model.init(application);%>

</jsp:useBean>

1. Declaramos un bean de tipo WebModel que se llama modelo y que solo será visto en la session.

2. Dicho bean hereda de Model, pero tiene métodos para que funcione en entorno web (será capaz de

sacar los parámetros que declaramos en el web.xml).

<%

String BASEURL=request.getContextPath();(sacamos la URL base en este caso “/ejercicio13”)

String CONTROLLER=BASEURL+"/servlet“;(para los servlets en este caso “/ejercicio13/servlet”)

String ABSOLUTEURL=application.getInitParameter("ABSOLUTEURL");

(ABSOLUTEURL en este caso será http://localhost:8181/ejercicio13/)

(Los guardamos para que puedan ser vistos pr toda la aplicación)

application.setAttribute("CONTROLLER",CONTROLLER);

application.setAttribute("BASEURL",BASEURL);

application.setAttribute("ABSOLUTEURL",ABSOLUTEURL);

%>

Page 11: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

LA PARTE JAVA

Controller.java

Controller específicamente es un servlet, con 3 métodos

doPost(): se ejecuta cuando en el formulario que lo llama el method=“post”, este método invoca al método

ejecutar().

doGet(): se ejecuta cuando en el formulario que lo llama el method=“get” o cuando es llamado por medio

de un enlace, este método invoca al método ejecutar().

ejecutar(): ejecutar en algunas convecciones doRequest() o run(), este método tiene que cargar a la acción

especifica que se quiere invocar.

En la session se van guardando las acciones a medida que se van cargando.

Page 12: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

LA PARTE JAVA

Controller.java

/*llamamos a la session*/

/*sacamos el mapa de acciones de la session*/

/*si aun no exite*/

/*lo inicializamos*/

/*Sacamos el contexto de la aplicacion*/

/* obtenemos la ruta (Accion) a ejecutar*/

/*si la ruta es null*/

/*lanzamos una exception*/

/*declaramos una accion, y la cargamos de mapa de acciones*/

/*si la accion no se encuentra en el mapa*/

/* la ruta viene en el formato "Accion/Bean" */

/* la ruta viene en el formato "Palabra1/Palabra2" */

/*dividimos la ruta en 2 justo por el caracter '/' */

/*si el numero de partes es diferente de 2 hubo algún error */

/*lanzamos una excepcion*/

/*tenemos la parte uno de la Accion */

/*tenemos la parte dos de la Accion */

/*nombre de la clase de la Accion= parte uno + parte dos */

/*Cargamos la clase*/

/*la instanciamos */

/*la guardamos en el mapa de acciones*/

/*guardamos el mapa de acciones en la session*/

/*si no se encontro la clase*/

/* o no se pudo instansiar la clase*/

/*o hubo un acceso no autorizado*/

/*lanza una excepcion*/

/*sacamos el model de la session*/

/*si el model == null*/

/*lanza una excepcion*/

/*seteamos los parámetros de la accion*/

/*y la ejecutamos*/

/*atrapamos cualquier excepcion */

/*Pasamos el mensaje a una ServletException*/

Para tener una idea mas clara mirar los

comentarios en la clase

Page 13: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

LA PARTE JAVA

Action.java

Esta clase es un “molde” para las acciones esta clase se encarga de declaras 4 variables y

sus métodos sets y aparte un método abstracto run. Todas las Acciones heredan de esta

clase.

Para mas detalles ver el código en la aplicación.

Page 14: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

VISTA

MODELO

CONTROLADOR

BASE DE

DATOS

ACCIONESACCIONES

ACCIONES

Page 15: MVC

Ingenio DSProgramando Soluciones

http://ingeniods.wordpres.com

ACCIONESACCIONES

ACCIONES

BASE DE

DATOS

MODELO

-Model

-WebModel

-Beans

-Clases de la lógica de

negocio

VISTA

- Paginas para presentación

-Clases para presentación

(todo lo que interactué con el

usuario).

CONTROLADOR

-Controller

(re-direccionamiento de

peticiones)

Page 16: MVC

Ingenio DSProgramando Solucioneshttp://ingeniods.wordpres.com