Ab uno discent omnes

“De uno, aprenden todos” (Publio Virgilio Marón - Eneida)

Lucas Wolenczak

Publicado por Dende en Febrero 21, 2008

Leyendo los comentarios de una noticia sobre cine, he leido que el actor Jonathan Brandis que encarnaba al mítico “Hacker” Lucas Wolenczak en una de las series favoritas de mi infancia SeaQuest llevaba fallecido desde 2003.

La verdad es que la serie me engancho por este personaje. Un genio informático adolescente que era capaz de manejar el ordenador para acceder a todos los sistemas (cierto que es pura fantasía, pero realmente es la fantasía de más de uno jeje) y que vivía en una nave increíble llena de gadgets impresionantes.

Si que me había preguntado alguna vez que fue de la serie pero no sabía que no había pasado de la tercera temporada.

Lo dicho, es una pena. D.E.P

Publicado en Personal | Etiquetado: , , | 1 Comentario »

Please Wait…

Publicado por Dende en Febrero 20, 2008

Buenas a tod@s,

Escribo este post para que podáis ver que este Blog sigue vivo pero parado ya que ahora no dispongo de tiempo para dedicarle (el trabajo y más cosas).

Mi prioridad inmediata es terminar la traducción libre de Una pequeña aplicación en Spring paso a paso ya que sigo creyendo que es un ejemplo muy útil para iniciarse en los caminos de Spring.

Bueno pues nada más, gracias por la paciencia y un saludo a tod@s!

Publicado en General | Etiquetado: , , , | Sin Comentarios »

Una pequeña aplicación en Spring Paso a Paso - I

Publicado por Dende en Julio 18, 2007

Antes de nada, indicar que esta es una traducción libre al español y que no soy ni me considero un traductor profesional pero espero que sirva para la gente que no se lleva bien con el inglés

Esta es la primera parte de cuatro de un documento “Developing a Spring Framework MVC aplication setp-by-step” , escrito por Thomas Risberg, en el que se explica como desarrollar una pequeña aplicación usando Spring.

Esta es una guía paso a paso de como desarrollar una aplicación web desde cero usando Spring.

Pre requisitos:

  • Java SDK (Actualmente usando la versión 1.4.2)
  • Ant (usando la versión 1.6.2)
  • Apache Tomcat (usando la versión 5.0.28)

Se recomienda tener algo de experiencia con las herramientas arriba mencionadas.

No voy a usar demasiada información o teoría en este artículo, para ello existen multitud de libros que lo abarcan en profundidad. En cambio abarcaremos el desarrollo de la aplicación en profundidad.

Paso 1 – Directorio de desarrollo

Vamos a necesitar un lugar en el que guardar todo el código fuente y los demás ficheros que iremos creando, yo he creado un directorio llamado ’springapp’. Puedes crear ese directorio en tu directorio home o en cualquier otra localización. Yo he creado el mio en el directorio ‘projects’ que ya tenía creado en el directorio ‘home’ con lo que mi ruta completa será ‘/users/trisberg/projects/springapp’. Dentro del directorio he creado un directorio llamado ’src’ para almacenar el código fuente Java. Después he creado otro directorio llamado ‘war’. Este directorio almacenará todo aquello que irá dentro del fichero WAR, el cual vamos a usar para desplegar la aplicación. Todos los archivos fuente que no sean Java, como JSPs y ficheros de configuración, irán en este directorio.

Paso 2 – index.jsp

Empezaremos creando una página JSP llamada ‘index.jsp’ en el directorio ‘war’. Será el punto de entrada para nuestra aplicación.

springapp/war/index.jsp
<html>
	<head>
		<title>Ejemplo :: Aplicación con Spring</title>
	</head>
	<body>
		<h1>Ejemplo - Aplicación con Spring</h1>
		<p>Esta es mi prueba.</p>
	</body>
</html>
				

Para tener una aplicación web completa, creo el archivo web.xml en el directorio ‘WEB-INF’ que he creado como subdirectorio del directorio war.

springapp/war/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>

</web-app>

Paso 3 – Desplegando la aplicación en Tomcat

A continuación creo un script Ant que usaré a lo largo de este documento. Contiene tareas para la construcción y el desplegado de la aplicación. Otro script de construcción contiene las tareas especificas del servidor. También hay tareas para controlar la aplicación bajo Tomcat.

springapp/build.xml
<?xml version="1.0"?><project name="springapp" basedir="." default="usage">

    <property file="build.properties"/>

<property name="src.dir" value="src"/>

    <property name="web.dir" value="war"/>

    <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>

    <property name="name" value="springapp"/>

<path id="master-classpath">

        <fileset dir="${web.dir}/WEB-INF/lib">

            <include name="*.jar"/>

        </fileset>

        <!-- We need the servlet API classes:        -->

        <!--   for Tomcat 4.1 use servlet.jar        -->

        <!--   for Tomcat 5.0 use servlet-api.jar    -->

        <!--   for Other app server - check the docs -->

        <fileset dir="${appserver.home}/common/lib">

            <include name="servlet*.jar"/>

        </fileset>

        <pathelement path="${build.dir}"/>

    </path>

<target name="usage">

        <echo message=""/>

        <echo message="${name} build file"/>

        <echo message="-----------------------------------"/>

        <echo message=""/>

        <echo message="Available targets are:"/>

        <echo message=""/>

        <echo message="build     --> Construye la aplicación"/>

        <echo message="deploy    --> Despliega la aplicación como un directorio"/>

        <echo message="deploywar --> Despliega la aplicación como un fichero WAR"/>

        <echo message="install   --> Instala la aplicación en Tomcat"/>

        <echo message="reload    --> Recarga la aplicación en Tomcat"/>

        <echo message="start     --> Inicia la aplicación Tomcat"/>

        <echo message="stop      --> Para la aplicación Tomcat"/>

        <echo message="list      --> Lista las aplicaciones de Tomcat"/>

        <echo message=""/>

    </target>

<target name="build" description="Compile main source tree java files">

        <mkdir dir="${build.dir}"/>

        <javac destdir="${build.dir}" target="1.3" debug="true"

               deprecation="false" optimize="false" failonerror="true">

            <src path="${src.dir}"/>

            <classpath refid="master-classpath"/>

        </javac>

    </target>

<target name="deploy" depends="build" description="Deploy application">

        <copy todir="${deploy.path}/${name}" preservelastmodified="true">

            <fileset dir="${web.dir}">

                <include name="**/*.*"/>

            </fileset>

        </copy>

    </target>

<target name="deploywar" depends="build" description="Deploy application as a WAR file">

        <war destfile="${name}.war"

             webxml="${web.dir}/WEB-INF/web.xml">

            <fileset dir="${web.dir}">

                <include name="**/*.*"/>

            </fileset>

        </war>

        <copy todir="${deploy.path}" preservelastmodified="true">

            <fileset dir=".">

                <include name="*.war"/>

            </fileset>

        </copy>

    </target>

<!-- ============================================================== -->

<!-- Tareas de Tomcat - borralas si no tienes instalado Tomcas      -->

<!-- ============================================================== -->

<taskdef name="install" classname="org.apache.catalina.ant.InstallTask">

        <classpath>

            <path location="${appserver.home}/server/lib/catalina-ant.jar"/>

        </classpath>

    </taskdef>

    <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">

        <classpath>

            <path location="${appserver.home}/server/lib/catalina-ant.jar"/>

        </classpath>

    </taskdef>

    <taskdef name="list" classname="org.apache.catalina.ant.ListTask">

        <classpath>

            <path location="${appserver.home}/server/lib/catalina-ant.jar"/>

        </classpath>

    </taskdef>

    <taskdef name="start" classname="org.apache.catalina.ant.StartTask">

        <classpath>

            <path location="${appserver.home}/server/lib/catalina-ant.jar"/>

        </classpath>

    </taskdef>

    <taskdef name="stop" classname="org.apache.catalina.ant.StopTask">

        <classpath>

            <path location="${appserver.home}/server/lib/catalina-ant.jar"/>

        </classpath>

    </taskdef>

<target name="install" description="Instala la aplicación en Tomcat">

        <install url="${tomcat.manager.url}"

                 username="${tomcat.manager.username}"

                 password="${tomcat.manager.password}"

                 path="/${name}"

                 war="${name}"/>

    </target>

<target name="reload" description="Recarga la aplicación en Tomcat">

        <reload url="${tomcat.manager.url}"

                 username="${tomcat.manager.username}"

                 password="${tomcat.manager.password}"

                 path="/${name}"/>

    </target>

<target name="start" description="Iniciar la aplicación Tomcat">

        <start url="${tomcat.manager.url}"

                 username="${tomcat.manager.username}"

                 password="${tomcat.manager.password}"

                 path="/${name}"/>

    </target>

<target name="stop" description="Parar la aplicación Tomcat">

        <stop url="${tomcat.manager.url}"

                 username="${tomcat.manager.username}"

                 password="${tomcat.manager.password}"

                 path="/${name}"/>

    </target>

<target name="list" description="Listar aplicaciones de Tomcat">

        <list url="${tomcat.manager.url}"

                 username="${tomcat.manager.username}"

                 password="${tomcat.manager.password}"/>

    </target>

<!-- Fin de las tareas Tomcat -->

</project>

El script ahora contiene todo lo necesario para hacer nuestra tarea de desarrollo más sencillas. No voy a explicar el script en detalle ya que la mayor parte de él es estandar de Ant y Tomcat. Puedes simplemente copiar el archivo y ponerlo en el directorio raiz de desarrollo. Tambien necesitaremos crear un fichero build.properties que debes personalizar para que se ajuste a la instalación de tu servidor. Este fichero deberá estar en el mismo directorio que el fichero build.xml.

springapp/build.properties
# Propiedades ANT para construir la aplicación Spring
appserver.home=${user.home}/jakarta-tomcat-5.0.28

deploy.path=${appserver.home}/webappstomcat.manager.url=http://localhost:8080/manager

tomcat.manager.username=admin

tomcat.manager.password=tomcat

Si te encuentras en un sistema del cual no eres administrador de Tomcat debes pedir al administrador que te proporcione acceso completo al directorio ‘webapps’ o que cree un nuevo directorio llamado ’springapp’ en el directorio ‘webapps’ y que te de permisos completos para desarrollar en el nuevo directorio. En linux utilizar el comando chmod a+rwx springapp para dar a todo el mundo permisos completos sobre este directorio.

Si estás usando un servidor de aplicaciones web diferente puedes eliminar la parte de tareas específicas de Tomcat al final del fichero de construcción. Puedes usar el desplegado en “caliente” de tu servidor o bien parar e iniciar tu aplicación manualmente.

Ejecutamos Ant para asegurarnos que todo está trabajando correctamente. Debes colocarte en el directorio ’springapp’ antes de ejecutar Ant.

[trisberg@localhost springapp]$ ant

Buildfile: build.xml

 

usage:

 

     [echo] springapp build file

     [echo] ———————————–

 

     [echo] Available targets are:

 

     [echo] build     –> Build the application

     [echo] deploy    –> Deploy application as directory

     [echo] deploywar –> Deploy application as a WAR file

     [echo] install   –> Install application in Tomcat

     [echo] reload    –> Reload application in Tomcat

     [echo] start     –> Start Tomcat application

     [echo] stop      –> Stop Tomcat application

     [echo] list      –> List Tomcat applications

 

 

BUILD SUCCESSFUL

Total time: 2 seconds

La última acción es desplegar. Simplemente ejecuta Ant especificando la orden ‘deploy’ o ‘deploywar’.

[trisberg@localhost springapp]$ ant deploy

Buildfile: build.xml

 

build:

    [mkdir] Created dir: /Users/trisberg/projects/springapp/war/WEB-INF/classes
deploy:

     [copy] Copying 2 files to /Users/trisberg/jakarta-tomcat-5.0.28/webapps/springapp


BUILD SUCCESSFUL

Total time: 2 seconds

Paso 4 – Probando la aplicación

Iniciamos Tomcat y nos aseguramos que podemos acceder a la aplicación. Usa la tarea ‘list’ de Ant para ver si Tomcat a reconocido la nueva aplicación.

[trisberg@localhost springapp]$ ant list

Buildfile: build.xml

 

list:

     [list] OK - Listed applications for virtual host localhost
     [list] /admin:running:0:/Users/trisberg/jakarta-tomcat-5.0.28/server/webapps/admin


     [list] /webdav:running:0:/Users/trisberg/jakarta-tomcat-5.0.28/webapps/webdav


     [list] /servlets-examples:running:0:/Users/trisberg/jakarta-tomcat-5.0.28/webapps/servlets-examples


     [list] /springapp:running:0:/Users/trisberg/jakarta-tomcat-5.0.28/webapps/springapp

     [list] /jsp-examples:running:0:/Users/trisberg/jakarta-tomcat-5.0.28/webapps/jsp-examples


     [list] /balancer:running:0:balancer


     [list] /tomcat-docs:running:0:/Users/trisberg/jakarta-tomcat-5.0.28/webapps/tomcat-docs


     [list] /:running:0:/Users/trisberg/jakarta-tomcat-5.0.28/webapps/ROOT


     [list] /manager:running:0:/Users/trisberg/jakarta-tomcat-5.0.28/server/webapps/manager

 

 

BUILD SUCCESSFUL

Total time: 1 second

Si no aparece, usa la opción ‘install’ de Ant para instalar la aplicación en Tomcat.

[trisberg@localhost springapp]$ ant install

Buildfile: build.xml

 

install:

  [install] OK - Installed application at context path /springapp

 

 

BUILD SUCCESSFUL

Total time: 2 seconds

Abrimos el navegador y probamos con la url http://localhost:8080/springapp/index.jsp.

Paso 5 – Descargando la distribución SpringDownload Spring distribution

Si no has descargando todavía Spring, ahora es el momento de hacerlo. Actualmente estoy usando ’spring-framework-1.2-with-dependencies.zip’ que he descargado de www.springframework.org/download.html. Descomprimo el archivo en mi directorio ‘home’. Vamos a usar bastantes ficheros de ello más tarde.

Esto completa la configuración del entorno necesaria, ahora podemos empezar a desarrollar nuestra aplicación con Spring.

Paso 6 – Modificación del web.xml en el directorio WEB-INF

Nos colocamos en el directorio ’springapp/war/WEB-INF’ . Modificamos el archivo ‘web.xml’ que creamos anteriormente. Ahora lo modificaremos para ajustarlo a nuestras necesidades. Definimos un DispatcherServlet que se encargará de controlar el enrutado de nuestras ‘request’ basándose en la información que vamos a introducir en el siguiente punto. Tambien posee un sistema de mapeo de servlet para asignarle las urls que utilizaremos. Yo dejé que cualquier url con un ‘.htm’ sea dirigida al dispatcher de ’springapp’.

springapp/war/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>

  <servlet>

    <servlet-name>springapp</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>springapp</servlet-name>

    <url-pattern>*.htm</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

    <welcome-file>

      index.jsp

    </welcome-file>

  </welcome-file-list>

</web-app>

Lo siguiente es crear un fichero llamado ’springapp-servlet.xml’ en el directorio ’springapp/war/WEB-INF’ (puedes obtener un ejemplo de este fichero de la distribución de Spring en el directorio ’sample/skeletons/webapp-minimal’). Este es el fichero donde las definiciones usadas por el DispatcherServlet han de ser introducidas. Debe llamarse basandose en la nombre del servlet usado en el web.xml con ‘-servlet’ al final. Esta es una convención estandar de nombrado usada en Spring. Ahora, añadimos un registro de un bean llamado springAppController y hacemos la clase SpringAppController. Esta define el controlador que nuestra aplicación usará. También necesitamos añadir el mapeo de url para que el DispatcherServlet conozca que controlador debe ser invocado para las diferentes urls.

springapp/war/WEB-INF/springapp-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><!--

  - Application context definition for "springapp" DispatcherServlet.

  -->

<beans>

     <bean id="springappController" class="SpringappController"/>

     <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

        <property name="mappings">

            <props>

                <prop key="/hello.htm">springappController</prop>

            </props>

        </property>

     </bean>

</beans>

Paso 7 – Copia de los Jars en WEB-INF/lib

Primero crea el directorio ‘lib’ dentro del directorio ‘war/WEB-INF’. Despues, desde el directorio donde descomprimimos Spring, copia spring.jar (spring-framework-1.2/dist/spring.jar) al directorio recien creado ‘war/WEB-INF/lib’. Tambien copia los Jars de commons-logging al directorio ‘war/WEB-INF/lib’ (spring-framework-1.2/lib/jakarta-commons/commons-logging.jar). También vamos a necesitar el jar de log4j. Copia log4j-1.2.9.jar al directorio ‘war/WEB-INF/lib’ (spring-framework-1.2/lib/log4j/log4j-1.2.9.jar). Estos Jars serán desplegado por el servidor y tambien son usados durante el proceso de compilación.

Paso 8 – Crear tu controlador

He nombrado el mio como SpringappController.java y lo he colocado en el directorio ’springapp/src’.

springapp/src/SpringappController.java
import org.springframework.web.servlet.mvc.Controller;

import org.springframework.web.servlet.ModelAndView;import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

public class SpringappController implements Controller {
     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        return new ModelAndView("");
    }
}

Este es un controlador básico. Lo ampliaremos más tarde, incluso ampliaremos algunas implementaciones abstractas que tenemos. El Controlador (controller) ‘maneja’ la petición (request) y devuelve un ‘ModelAndView’. Todavía no hemos definido ninguna Vista, pero por ahora no vamos a hacer ninguna.

Paso 9 – Compilando la aplicación

Ejecuta la tarea Ant ‘build’ del fichero build.xml, Run the ‘build’ task of the build.xml. Esperamos que compile todo bien.

[trisberg@localhost springapp]$ ant build

Buildfile: build.xml

 

build:

    [javac] Compiling 1 source file to /Users/trisberg/projects/springapp/war/WEB-INF/classes

 

BUILD SUCCESSFUL

Total time: 2 seconds

Paso 10 – Copiar y modificar el log4j.properties

Spring usa log4j para crear logs por lo que tenemos que crear el fichero de configuración para log4j. Copiamos el archivo de ejemplo log4j.properties de una aplicación de ejemplo (spring-framework-1.2/samples/petclinic/war/WEB-INF/log4j.properties) al directorio ‘war/WEB-INF/classes’ (este directorio deberemos crearlo antes). Ahora descomentamos o modificamos la propiedad log4j.rootCategory, cambiamos el nombre y la ubicación donde se ubicará el log. Yo lo he puesto donde se encuentran los logs de Tomcat.

springapp/war/WEB-INF/classes/log4j.properties
# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!

# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.

log4j.rootLogger=INFO, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

log4j.appender.logfile.File=/Users/trisberg/jakarta-tomcat-5.0.28/logs/springapp.loglog4j.appender.logfile.MaxFileSize=512KB

# Keep three backup files.

log4j.appender.logfile.MaxBackupIndex=3

# Pattern to output: date priority [category] - message

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

Paso 11 – Desplegado de la aplicación

Ejecutamos la tarea ‘deploy’ y después ejecutamos las tareas ’stop’ y ’start’ del build.xml. Esto forzará la recarga de la aplicación. Comprobamos los logs de Tomcat por si se refleja algún error de desplegado. Este es un ejemplo de como debería ser. (/Users/trisberg/jakarta-tomcat-5.0.28/logs/springapp.log)

2005-04-24 14:58:18,112 INFO [org.springframework.web.servlet.DispatcherServlet] - Initializing servlet ’springapp’

2005-04-24 14:58:18,261 INFO [org.springframework.web.servlet.DispatcherServlet] - FrameworkServlet ’springapp’: initialization started

2005-04-24 14:58:18,373 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from ServletContext resource [/WEB-INF/springapp-servlet.xml]

2005-04-24 14:58:18,498 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Bean factory for application context [WebApplicationContext for namespace 'springapp-servlet']: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [springappController,urlMapping]; root of BeanFactory hierarchy

2005-04-24 14:58:18,505 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - 2 beans defined in application context [WebApplicationContext for namespace 'springapp-servlet']

2005-04-24 14:58:18,523 INFO [org.springframework.core.CollectionFactory] - JDK 1.4+ collections available

2005-04-24 14:58:18,524 INFO [org.springframework.core.CollectionFactory] - Commons Collections 3.x available

2005-04-24 14:58:18,537 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Unable to locate MessageSource with name ‘messageSource’: using default [org.springframework.context.support.DelegatingMessageSource@8dacb]

2005-04-24 14:58:18,539 INFO [org.springframework.web.context.support.XmlWebApplicationContext] - Unable to locate ApplicationEventMulticaster with name ‘applicationEventMulticaster’: using default [org.springframework.context.event.SimpleApplicationEventMulticaster@5674a4]

2005-04-24 14:58:18,549 INFO [org.springframework.ui.context.support.UiApplicationContextUtils] - No ThemeSource found for [WebApplicationContext for namespace 'springapp-servlet']: using ResourceBundleThemeSource

2005-04-24 14:58:18,556 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [springappController,urlMapping]; root of BeanFactory hierarchy]

2005-04-24 14:58:18,557 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating shared instance of singleton bean ’springappController’

2005-04-24 14:58:18,603 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - Creating shared instance of singleton bean ‘urlMapping’

2005-04-24 14:58:18,667 INFO [org.springframework.web.servlet.DispatcherServlet] - Using context class [org.springframework.web.context.support.XmlWebApplicationContext] for servlet ’springapp’

2005-04-24 14:58:18,668 INFO [org.springframework.web.servlet.DispatcherServlet] - Unable to locate MultipartResolver with name ‘multipartResolver’: no multipart request handling provided

2005-04-24 14:58:18,670 INFO [org.springframework.web.servlet.DispatcherServlet] - Unable to locate LocaleResolver with name ‘localeResolver’: using default [org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@318309]

2005-04-24 14:58:18,675 INFO [org.springframework.web.servlet.DispatcherServlet] - Unable to locate ThemeResolver with name ‘themeResolver’: using default [org.springframework.web.servlet.theme.FixedThemeResolver@c11e94]

2005-04-24 14:58:18,681 INFO [org.springframework.web.servlet.DispatcherServlet] - No HandlerAdapters found in servlet ’springapp’: using default

2005-04-24 14:58:18,700 INFO [org.springframework.web.servlet.DispatcherServlet] - No ViewResolvers found in servlet ’springapp’: using default

2005-04-24 14:58:18,700 INFO [org.springframework.web.servlet.DispatcherServlet] - FrameworkServlet ’springapp’: initialization completed in 439 ms

2005-04-24 14:58:18,704 INFO [org.springframework.web.servlet.DispatcherServlet] - Servlet ’springapp’ configured successfully

Paso 12 – Crear una vista

Es el turno de crear nuestra primer vista. Yo usaré una página JSP que llamaré hello.jsp. La colocaré en el directorio war para empezar.

springapp/war/hello.jsp
<html>

<head><title>Example :: Spring Application</title></head>

<body>

<h1>Hello - Spring Application</h1>

<p>Greetings.</p>

</body>

</html>

Ahora modificaremos el SpringappController para redirigirlo a esta vista.

springapp/src/SpringappController.java
import org.springframework.web.servlet.mvc.Controller;

import org.springframework.web.servlet.ModelAndView;import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

public class SpringappController implements Controller {

    /** Logger para esta clase y subclases */

    protected final Log logger = LogFactory.getLog(getClass());
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
         logger.info(”SpringappController - devolviendo la vista hello”);
         return new ModelAndView(”hello.jsp“);
    }
}

Mientras modificaba la clase he añadido un logger para poder verificar que lo hemos conseguido. Los cambios han sido resaltados en rojo. El modelo al que vuelve esta clase es resuelto por un ViewResolver. Puesto que no hemos especificado ninguno, usaremos el de por defecto que simplemente nos redireccionara a la url que case con el nombre de la vista especificado. Esto se modificará más adelante.

Ahora compilamos y desplegamos la aplicación. Después paramos y arrancamos Tomcat para que todo quede recargado.

Ponemos en el navegador la siguiente url http://localhost:8080/springapp/hello.htm y nos deberá aparece lo siguiente, (Podemos comprobar el log y ver como el controlador ha sido invocado y ha redireccionado a la vista hello.):

(/Users/trisberg/jakarta-tomcat-5.0.28/logs/springapp.log)

2005-04-24 15:01:56,217 INFO [org.springframework.web.servlet.DispatcherServlet] - FrameworkServlet ’springapp’: initialization completed in 372 ms

2005-04-24 15:01:56,217 INFO [org.springframework.web.servlet.DispatcherServlet] - Servlet ’springapp’ configured successfully

2005-04-24 15:03:57,908 INFO [SpringappController] - SpringappController - returning hello view

Resumen

Echemos un vistazo rapido a las partes de nuestra aplicación que hemos creado por ahora.

  1. Una página de introducción index.jsp que no hace nada util. Simplemente ha sido usada para probar nuestra configuración. En un futuro cambiaremos esto para obtener un link en nuestra aplicación

  2. Un DispatcherServlet con su correspondiente fichero de configuración springapp-servlet.xml.

  3. Un controlador con funcionalidad limitada springappController.java – simplemente redirige un ModelAndView a un ViewResolver. Por ahora tenemos un modelo vacio pero lo arreglaremos pronto.

  4. Una vista extremadamente básica hello.jsp. Pero la configuración funciona y estamos listos para añadir más funcionalidad.

Publicado en J2EE | 5 Comentarios »

Uno de tantos…

Publicado por Dende en Junio 20, 2007

Buenos días a tod@s,

Me presento ante tod@s como un aficionado a la informática y a la vez trabajador en el sector.

A lo largo de mi corta pero intensa carrera, me he visto envuelto en multitud de situaciones en las que gracias al trabajo y persistencia de otras personas, fundamentalmente, he conseguido superar esos obstáculos o aprender el uso de esta o aquella herramienta.

Ahora me gustaría devolver el favor publicando en este humilde blog todos los descubrimientos, soluciones, mejoras, etc que voy recopilando para que gente que se encuentre ante un obstáculo pueda aprovechar mi experiencia para seguir adelante.

Espero que mucha gente salga beneficiada de este blog.

Publicado en General | Sin Comentarios »