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.
-
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
-
Un DispatcherServlet con su correspondiente fichero de configuración springapp-servlet.xml.
-
Un controlador con funcionalidad limitada springappController.java – simplemente redirige un ModelAndView a un ViewResolver. Por ahora tenemos un modelo vacio pero lo arreglaremos pronto.
-
Una vista extremadamente básica hello.jsp. Pero la configuración funciona y estamos listos para añadir más funcionalidad.