You are on page 1of 13

Cómo Funciona Spring MVC Basado en consulta URL de http, el DispatcherServlet llama al controlador correspondiente.

Una vista es renderizada y enviada a la respuesta http. Declaración de Spring Servlet En 'WEB-INF/web.xml', se le declaran las URLs Spring DispatcherServlet y mapa '*.html':
<?xml version="1.0" encoding="UTF-8"?> <web-app version= "2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > <servlet> <servlet-name>springmvc</servlet-name> <servletclass>org.springframework.web.servlet.DispatcherServlet</servletclass> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> jsp/index.jsp </welcome-file> </welcome-file-list> </web-app>

Configuración de Spring Servlet Crear el archivo de configuracion Spring 'WEB-INF/springmvc-servlet.xml' (nombre basado en el nombre del servidor superior).
<?xml version= "1.0" encoding= "UTF-8"? > <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd > <bean name="/hello_world.html" class="springmvc.web.HelloWorldController"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolv er"> <property name="viewClass"

html al controlador HelloWorldController.JstlView" /> <property name="prefix" value="/jsp/"/> <property name="suffix" value=". Controlador Creación del controlador INF/src/springmvc/web/HelloWorldController.io.http.servlet. Declara resolución de vista: cuando la vista 'view_name' es llamada (desde el controlador).IOException.addObject("message".value="org.Controller.jsp' será usado. ModelAndView modelAndView = new ModelAndView("hello_world").servlet.springframework. HttpServletResponse response) throws ServletException.servlet. } } return modelAndView.ServletException. import javax.web. pasándole 'message'(como un atributo Struts).HttpServletResponse. modelAndView.springframework.ModelAndView.HttpServletRequest. 'WEB- Este controlador llama a la vista 'hello_world'. Vista Ahora la vista: 'jsp/hello_world.springframework.servlet.java' package springmvc.view. import javax. el archivo '/jsp/view_name.web. <%@ taglib prefix="c" uri="http://java. IOException { String aMessage = "Hello World MVC!".jsp'.http.mvc. aMessage). public class HelloWorldController implements Controller { public ModelAndView handleRequest(HttpServletRequest request.com/jsp/jstl/core" %> <html> <body> <p>This is my message: ${message}</p> </body> </html> . import org. import org.web.servlet.web.jsp"/> </bean> </beans> Mapear la URL /hello_world. import javax. import java.servlet.sun.

.Creamos un controlador y una vista.Creamos un archivo de configuración Spring.Muestra el atributo del mensaje anteriormente establecido en el controlador. . . donde mapeamos URL a un controlador y definir una forma de resolver las vistas.html Resumen Tu proyecto debe lucir así: . ant Volver a correr Tomcat y revisar si funciona. http://localhost:8180/springmvc/hello_world. Hacerlo funcionar Desde 'WEB-INF' tipo carpeta.xml.Declaramos servlet Spring en web.

. porque Spring no requiere el desarrollador para extender una base abstracta acciones / controladores de Struts. utilizando un <jsp:useBean/> donde la identificación corresponde al valor de la clave en el modelo (mapa). Tapestry. un beneficio adicional de usar Spring MVC es que otros Spring Beans pueden ser fácilmente inyectados en los controladores de red. ModelAndView .xml y se le asigna patrón(es) URL para ser manejada con Spring MVC. SimpleFormController . solicitud. y una cadena onSubmit para conveniencia primordial.el servlet principal que distribuye las solicitudes para los manejadores. Clases clave: DispatcherServlet . respuesta) Esta es la interfaz de controlador base. por ejemplo en un JSP.Debe implementar handleRequest ModelAndView (solicitud. Las implementaciones son responsables para representar el contenido. Interfaces clave: Controlador . Para completar el trío MVC. tenga en cuenta que el modelo se maneja normalmente como un java. tiene forma configurable y puntos de vista de éxito. Si los servicios inyectados en los controladores son interfaces. Vista . respuesta) Este es el punto de vista MVC para una interacción en la web.implementación básica de controlador para hacer envíos de formularios web estándar. etc) y todos tienen sus pros y sus contras.The Server Side. varias implementaciones de JSF.Definiciones El Spring MVC Framework ofrece una sencilla interfaz basada en infraestructura web para la entrega arquitecturas MVC. En la mayoría de los casos una aplicación de Spring MVC es muy comprobable. Este será normalmente conectado en su web. y exponer el modelo. comparable a la idea de una acción de Struts. Rod Johnson. “Spring es una tecnología dedicada para permitir consruir aplicaciones usanjo POJO’s…”. pero si usted ya está usando Spring Framework para otros servicios.Map que se devuelve con la vista y los valores están disponibles. entonces es muy fácil escribir implementaciones sencillas alternativas de las interfaces para el fin de probar sus controladores.Debe implementar void render (modelo. WebWork.Soporte tanto para modelo y vista en el marco web MVC. Hay muchas otros Frameworks web basados en Java por ahí (Struts.util.

abandonando el modelo clásico de arquitectura 2. etc. El propio Struts sólo se mantendrá y será mantenido por los que siguen interesados? en hacerlo. con sólo una versión de este escrito. Es uno de los primeros Framework MVC. Struts y JSF como Framework MVC. El PPL puntales están empezando un nuevo proyecto en struts-pizarra que se basan en totalmente diferente de los puntales JSF. Sus manzanas en bruto a comparación de manzanas sería J2EE. En la actualidad. basado en el paradigma Modelo Vista Controlador. las dos implementaciones principales JSF RI de Sun (Referencia de Aplicación) y Apache MyFaces. Spring MVC Similar al concepto de Struts. mientras que a los principales PPL se están concentrando en la pizarra ahora. y sólo para los primeros y PPL que están interesados? en la evaluación de él (Véase el sitio web). Sus naranjas en bruto a comparación de naranjas serían Spring MVC. en efecto. puede utilizar Spring para hacer su gestión de transacciones y AOP. bien pensado y para acabar con un montón de deficiencias y naturaleza engorrosa de Struts. no lo pueden rediseñar la forma en que se debe hacer). Esta versión se considera "relativamente estable". también se basa en el modelo de arquitectura 2 JSF JSF es un estándar oficial de Oracle. vamos ahora comparar manzanas con manzanas Spring MVC vs Struts vs JSF. Por lo tanto. orientada a aspectos de programación y otras cosas varias en una sola pila. Ahora también es parte de las especificaciones J2EE. JSF tiene una arquitectura y modelo de programación totalmente diferente. Esquisto en la actualidad es aún muy joven. Como Struts. pero optar por utilizar Spring MVC. Se trata de una especificación. habrá mucha competencia para ofrecer los lotes y lo mejor de las opciones. Spring es un Framework que integra la inyección de dependencia.Comparativa entre Spring MVC contra JSF Manzanas con naranjas. Velocity. pero mucho más elegante. Ambos se pueden utilizar distintas tecnologías de Vista (es decir. Facelets. para mezclar y combinar sus componentes con facilidad. Con ese entendido. JSF es una tecnología de capa de vista. Así pues. por lo tanto. En otras palabras. Algunos PPL dicen que ahora es un verdadero modelo MVC y el modelo 2 es una MVC aguada. JSP. cualquier fabricante que quiera ser compatible con J2EE se ve obligado a salir con una implementación JSF y proporcionar apoyo. Se adopta un . y por lo tanto muy complicado y "hacia atrás" para los estándares de hoy en día (debido a la necesidad de mantener la compatibilidad hacia atrás. Se confirma que no habrá una puntales 2. Struts Struts se va a convertir en obsoleto muy pronto.). tendrá un montón de implementaciones. La idea es que Spring le permite usar lo que quiera. y ambos integran muy bien en sus respectivas pilas.

00 1.00 0. Ahora pone oyentes en los enlaces y botones para activar eventos y organizar la distribución del uso de objetos de la presentación (por ejemplo.5 . sucio y mal código que una compañía genera. por supuesto).00 1. Usted tiene opciones.50 0.50 0. Su estilo de programación será similar a Swing.00 1.00 1.00 1. Tiene una configuración mucho menor que Struts.00 0.nuevo modelo similar al de ASP. Se siente mucho como modelo M $ 's lo único es que no será atrapado con una sola implementación / proveedor / empresa.00 0.50 1.00 1.00 1.00 1.50 1. elegir otro proveedor.00 1.00 0. como M$ Visual Studio).00 1.50 1. Se va a generar tablas y arreglar cosas para ti).00 1.00 1.net.00 1. incluso si codifica duramente código JSF sin constructores GUI (de forma correcta.00 16.50 1.50 1.00 1.00 0. objetos de cuadrícula de diseño como en Swing.00 1.50 1.00 17 JSF 2 0.00 0.00 1. Rating comparativo (puntuación por criterios): Criteria Developer Productivity Developer Perception Learning Curve Project Health Developer Availability Job Trends Templating Components Ajax Plugins or Add-Ons Scalability Testing i18n and l10n Validation Multi-language Support (Groovy / Scala) Quality of Documentation/Tutorials Books Published REST Support (client and server Mobile / iPhone Support Degree of Risk Totals Spring MVC 0.00 0.00 1. No se ve obligado a vivir con el feo.00 1.00 0.50 1.00 1.00 1.00 1. lo que hace que sea fácil para los constructores GUI WYSIWYG para generar páginas para usted (sí. Si una aplicación es pésima.

requiere librería 3rd-Party. o Comunidad de proyecto. URLs ni siquiera se consideran. o Futuro y Ruta de proyecto. Aceptable soporte IDE. necesita JRebel o Spring Roo. o Excelente soporte REST. utilizar ICEfaces y Ajax4JSF. Excel. o Permite usar Commons Validator. Se está volviendo bastante popular. o Está obteniendo más prensa. o Requiere una solución personalizada. montones de XML. pero fáciles de configurar. o Ciclo de vida para unión primordial. o Sin soporte Ajax. ¿Cómo elegir? Considerar: o El tipo de aplicación que se está construyendo. o Realiza POST para todo. o Inversión de Control facilita las pruebas. o Configuración intensiva. JSON. o Permite agregar parámetros a un redireccionamiento. Bastantes librerías de componentes. Free Marker. o Proceso de desarrollo no abierto. Tiles. no tiene controlador par común. mensajes i18n difíciles de ingresar en Beans de página.bastante demanda y trabajos. JSF Pros o o o o o o o o Arquitectura de componente.Spring MVC Pros o Fácil configuración con Anotaciones y Convenciones. o Casi demasiado flexible. Posee mensajes definidos poco gratos. mayormente por otras características del Framework. PDF. o Facilidad de desarrollo. Rápido y sencillo de desarrollar con iniciativa. una solución madura. o Se integra con varias opciones de Vista de forma similar: JSP/JSTL. o Permite completo control de URL. Velocity. necesita ser Spring Source. Gran cantidad de librerías y herramientas. . Contras o Recarga instantánea incorporada. Estándar Java EE. o No corre bien con REST o Seguridad. o No hay un recurso único para implementación. tanto en CPU/ memoria y curva de aprendizaje. Contras o Pesado. Validación. o Soporte Ajax no integrado. etc.

Permitir que su prototipo sea escrito con otros Frameworks. Elegir 3-4 Frameworks y hacer un enganche de 1 semana con cada uno. No temer a usar antiguos Frameworks. y añade datos al modelo. La vista puede ser una de varias tecnologías. El controlador también determina la vista que se va a mostrar. Spring Web MVC general Un cliente HTTP. . Calcular y escoger! Después de haber tomado la decisión o o o o o o Documentar las razones de su decisión.Map y se utiliza para almacenar los datos que se muestran al usuario. Priorizar una lista de características que sean importantes para su aplicación. normalmente un navegador. desarrollando la misma aplicación. que es una clase POJO anotada. hace una petición al servidor web. Documentar y jerarquizar cada Framework contra su lista de características. Permitir el desafío de los desarrolladores. El modelo es simplemente una extensión de un java.util. No temer probar nuevos Frameworks. No temer a mantener su Framework existente. realiza alguna lógica de negocio. recibe la solicitud.o Mantención. Un controlador. o Características técnicas. pero es normalmente una página JSP que accede a la modelo con JSTL y JSP lenguaje de expresión.

Programación orientada a aspectos POA Entre los objetivos que se ha propuesto la programación orientada a aspectos. Inversion of Control Es un método de programación en el que el flujo de ejecución de un programa se invierte respecto a los métodos de programación tradicionales. están principalmente el de separar conceptos y el de minimizar las dependencias entre ellos. La utilización de interfaces y la aparición de los frameworks han popularizado este término.La vista. De hecho es el concepto central del Framework de Spring. Típicamente sucede cuando la biblioteca es la que implementa las estructuras de alto nivel y es el código del usuario el que implementa las tareas de bajo nivel. ya que implementa un "Contenedor" que se encarga de gestionar las instancias (así como sus creaciones y destrucciones) de los objetos del usuario. está renderizada y los resultados se envían de vuelta al cliente. El flujo habitual se da cuando es el código del usuario quien invoca a un procedimiento de una biblioteca. Por tanto las aplicaciones que utilicen el framework de Spring (no Spring propiamente dicho) utilizarán Inversión de Control. La inversión de control sucede cuando es la biblioteca la que invoca el código del usuario. .

Es una unidad modular que se disemina por la estructura de otras unidades funcionales. por ejemplo el tejedor de Aspectos de AspectJ. Para que aspectos y componentes se puedan mezclar. Uno o varios lenguajes de aspectos. Un aspecto de programa o de código es una unidad modular del programa que aparece en otras unidades modulares del programa. el código de un aspecto se introduce en el de la clase. deben tener puntos comunes. Existe tanto en diseño como en la implementación. un tejedor de aspectos. Es decir. llamados puntos de enlace. ignorando otros que en determinado momento no sean importantes. . La separación de conceptos es una herramienta de ingeniería de software que reduce la complejidad de las aplicaciones a niveles manejables para las personas y permite a los desarrolladores centrarse en problemas concretos. Las clases y aspectos se pueden entrelazar de forma estática o dinámica. Un elemento es un lenguaje para definir la funcionalidad básica es el lenguaje base.Un aspecto es una unidad que se define en términos de información parcial de otras unidades. El primero implica modificar código fuente de una clase insertando sentencias en los puntos de enlace. El segundo necesita como requisito que los aspectos existan en forma explícita tanto en tiempo de compilación como en tiempo de ejecución.

. Validador: Responsable de asegurar que el valor ingresado por un usuario es aceptable. Los componentes UI generan eventos y se pueden registrar listeners para que manejen dichos eventos. También pueden contener referencias a componentes UI. Mensajes: Información que es mostrada al usuario.JSF Ahora algunos conceptos básicos: Componente UI: Un objeto mantenido en el servidor que provee funcionalidades para interactuar con el usuario final. Eventos y Listeners: JSF utiliza el modelo evento/listener (también utilizado por Swing). Son JavaBeans con propiedades. métodos y eventos. que es un árbol de componentes usualmente mostrados como una página. Un Renderer puede ser diseñado para trabajar con 1 o muchos componentes y un componente UI puede ser asociado con muchos diferentes Renderers (es una relación muchos a muchos). JSF tiene un poderoso sistema de navegación integrado con listeners especializados. Uno o más validadores pueden ser asociados con un solo componente UI. Navegación: La habilidad de moverse de una página a otra. Están organizados en una vista. Renderer: Responsable de mostrar el Componente UI y de traducir la entrada del usuario en un valor reconocido por el componente. Backing Beans: JavaBeans especializadas que colectan valores de componentes UI e implementan métodos que escuchen eventos (listeners). Casi cualquier parte de la aplicación puede generar mensajes de información u error que pueden ser mostrados al usuario.

Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos. para este tipo de persistencia. incluso con la persistencia de aplicación. En este caso los datos están en memoria. Hay muchos ejemplos. Esta capa se comunica únicamente con la capa de negocio. reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio. También se consideran aquí los programas de aplicación. dichos datos son transferidos a las propiedades del objeto. Cuando se instancia una referencia al . para recibir las solicitudes y presentar los resultados. La persistencia de objetos consiste en la inicialización de objetos con sus atributos por defecto. y con la capa de datos. un caso típico son los controles ActiveX. Capa de negocio: es donde residen los programas que se ejecutan. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse. le comunica la información y captura la información del usuario en un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). presenta el sistema al usuario. para solicitar al gestor de base de datos almacenar o recuperar datos de él. Otro objeto mantiene los datos que serán transferidos a las propiedades del nuevo objeto creado. el control es compilado junto al código se guarda una copia de los datos que el programador definió por defecto. se reciben las peticiones del usuario y se envían las respuestas tras el proceso. Esta capa se comunica con la capa de presentación. Persistencia de objetos La persistencia de objetos puede ser fácilmente confundida con la persistencia en memoria. Cuando. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos. Sobre un medio (de almacenamiento) fijo se guarda (cuando el objeto fue definido) un conjunto de datos que son recuperados cuando el tipo de objeto en cuestión es creado. Esto es posible con 2 maneras de proceder. También es conocida como interfaz gráfica y debe tener la característica de ser "amigable" (entendible y fácil de usar) para el usuario.PROGRAMACION POR CAPAS Capas y niveles Capa de presentación: es la que ve el usuario (también se la denomina "capa de usuario").

Supongamos que vamos a crear un avión con geometría 3D. por tanto es necesaria la persistencia de la primitiva. inicialmente podemos crear cada primitiva que compone el mismo. para recrear nuevos objetos basados en ella. se recurre a un mecanismo conocido como serializar que dispone en una secuencia de bytes todos los datos (o sólo aquellos que se desee) que definen el objeto. Si ahora quiero crear un nuevo modelo de avión posiblemente sea más sencillo modificar la primitiva definida que crear uno totalmente nuevo. Este objeto puede ahora ser guardado y ser utilizado en las próximas veces como una primitiva. un punto a partir del cual iniciar la creación de otros objetos más complejos basados en éste. . son las primitivas que se utilizan para recrear objetos 3D a partir del cual pueden crearse objetos más complejos. Otro ejemplo. se hace necesario guardar el objeto a disco. sin embargo a medida que el objeto crece y tiene más datos. éste lee del disco (donde está almacenada la librería asociada al control). los datos que definen configuran sus propiedades. el motor de la aplicación puede definir un nuevo objeto con las medidas que el usuario define y posicionado igualmente en las cordenadas que el usuario señala para crear el objeto. desde memoria. Las primitivas complejas se acoplan a la primera manera definida y las primitivas sencillas se ajustan a la 2ª manera definida. Para guardar los datos de objetos a disco.control.