lunes, 7 de julio de 2008

Spring MVC

Nos descargamos el proyecto "eticom-libreria-hibernate-xml" y el "eticom-libreria-spring", que se basa en SPRINGFramework, y trabaja con SpringMVC. No hace falta trabajar con ambas herramientas.

En AppFuse.org, es una aplicación que genera un archivo Ant o un comando Maven para generar proyectos vacíos que emplean/integran otras herramientas, pero ya preparados.

Al arrancar la aplicación intentará arrancar Hibernate teniendo en cuenta una serie de archivos, como "src/main/resources/jdbc.properties", "src/main/webapp/WEB-INF/applicationContext-hibernate.xml" o "src/main/resources/import.sql".

En "applicationContext-hibernate.xml" le inidicamos los archivos de mapeo. Los mapeos pueden provenir de distintos lugares o proyectos. En este proyecto vemos como unos vienen de un paquete y otros.. (MP3).

Como he dicho, "src/main/webapp/WEB-INF/applicationContext-hibernate.xml" arranca con la aplicación, y genera el "dataSource" y el "sessionFactory".
Es Spring el que se encarga de crearlos.

El problema del MVC se soluciona mediante anotaciones. Para el controlador "@Controller". Por cada petición web, hay que poner una anotación "@RequestMapping("/libros.html")", al que le sigue un método public String solicitud(ModelMap model){}, que devuelve una lista (en este caso de libros).
Spring MVC también proporciona una serie de tags de librerías, que se encuentran en "taglibs.jsp":

<%@ taglib uri="http://www.springmodules.org/tags/commons-validator" prefix="v" %> <%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

También tenemos un escuchador/listener que se encarga de leer la configuración de Spring, es decir, arranca el SpringFramework (se encuentra en el "web.xml"):

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

Hay que indicar el lugar donde se van a encontrar los controladores, así como la forma de inyección de recursos. Ambos se harán mediante anotaciones:

<!-- Activates mapping of @Controller -->
<context:component-scan base-package="eticom.libreria.web"/>

<!-- Activates @Autowired for Controllers -->
<context:annotation-config/>

--------------------

Vamos a poner esto en práctica en el proyecto "eticom-libreria-web".

No hay comentarios: