Академический Документы
Профессиональный Документы
Культура Документы
Introduccin
En esta aplicacin web MVC se utiliza Spring Framework. Permite al usuario introducir su nombre en un campo de texto,
y al digitar en OK, el nombre se regresa y se muestra en una segunda pgina con un saludo de bienvenida.
El Framework Spring es un conjunto de aplicaciones de cdigo abierto que facilita el desarrollo de Java EE. Consiste en
un contenedor, un ambiente para la gestin de componentes, y un conjunto de servicios para las interfaces de usuario web,
transacciones y persistencia. El Spring Web MVC es una parte de Spring, un framework MVC extensible para la creacin
de aplicaciones web.
El IDE proporciona soporte integrado para Spring 4.x y 3.x. Las bibliotecas se incluyen con el IDE y se agregan
automticamente al classpath del proyecto cuando se selecciona Spring. Se incluyen los valores de configuracin, como
el nombrado y la asignacin del DispatcherServlet de Web Spring MVC. La biblioteca JSTL se puede registrar
opcionalmente en la creacin del proyecto. Tambin se proporciona soporte para los archivos de configuracin del bean
XML de Spring, incluyendo las siguientes funcionalidades:
Completado de cdigo. Es invocado en los archivos de configuracin de Spring XML para las clases de Java, as
como las referencias del bean.
Navegacin. Hiperenlaces de las clases y propiedades de Java mencionadas en las definiciones del bean de Spring, as
como hiperenlaces a otras referencias del bean de Spring.
Refactorizacin. Renombrado de las referencias a las clases de Java en los archivos de configuracin de XML de
Spring.
Spring
Pgina 1
3. En el paso mencionado 3: Server and Settings, deshabilitar la opcin Enable Contexts and Dependency
Injection, ya que no se trabaja con la especificacin JSR-299.
4. Confirmar que el servidor GlassFish est seleccionado en la lista desplegable Server. Clic en Next. La versin
Java EE depende de la versin del servidor que se haya seleccionado. La versin predeterminada de Java EE es
Java EE 7 Web cuando el servidor seleccionado es GlassFish Server 4.0.
Spring
Pgina 2
Nota: El IDE permite aadir la biblioteca Spring 4.x al proyecto, pero en este ejercicio se utiliza
SimpleFormController que no es compatible en Spring 4.x. Adems, cuando se selecciona el Spring Web MVC,
notar que biblioteca JSTL (JavaServer Pages Standard Tag Library) se aade al classpath durante la creacin del
proyecto de forma predeterminada. Deshabilitar esta opcin, ya que no se requiere JSTL para este ejercicio.
7. Clic en la pestaa Configuration y observar que el asistente permite especificar el nombre y la asignacin del
servlet Dispatcher de Spring.
8. Clic en Finish. El IDE crea un proyecto para toda la aplicacin, incluyendo todos los metadatos, as como el
script del Ant de construccin del proyecto, que se puede inspeccionar desde la ventana Files (Ctrl-2). Se puede
ver la estructura de la plantilla en la ventana Projects. Verificar los cuatro archivos abiertos de forma
predeterminada en el editor del IDE:
dispatcher-servlet.xml, applicationContext.xml, redirect.jsp, y index.jsp.
9. En la ventana Projects, expandir el nodo Libraries del nuevo proyecto y verificar que los archivos JAR de Spring
se incluyen en el classpath del proyecto.
Spring
Pgina 3
Se inicia el navegador predeterminado del IDE y se muestra el contenido de la pgina de bienvenida (/WEBINF/jsp/index.jsp).
Nota. Cuando se ejecuta el proyecto en el IDE, el proyecto se compila y se implanta en el servidor, y luego se abre en el
navegador predeterminado. Por otra parte, el IDE proporciona la caracterstica Deploy on Save, que
predeterminadamente se activa para proyectos web. Al guardar archivos en el editor, el proyecto se vuelve a compilar y
desplegar en el servidor de forma automtica. Para ver los cambios, simplemente se pueden refrescar las pginas en el
navegador.
Para entender lo que se realiz, se empieza por examinar el descriptor de despliegue del proyecto ( web.xml). Para abrir
este archivo en el editor, clic derecho en el nodo WEB-INF > web.xml en la ventana Projects y seleccionar Edit. El
punto predeterminado de entrada de la aplicacin es redirect.jsp:
<welcome-file-list>
<welcome-file>redirect.jsp</welcome-file>
</welcome-file-list>
Dentro de redirect.jsp, existe un enunciado de redireccin que dirige todas las solicitudes a index.htm:
<% response.sendRedirect("index.htm"); %>
En el descriptor de despliegue, observar que todas las solicitudes de patrones de URL que coincidan con *.htm se
mapean o asignan al DispatcherServlet de Spring.
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
El
nombre
completo
del
servlet
despachador,
como
se
muestra
arriba,
es
org.springframework.web.servlet.DispatcherServlet. Esta clase est contenida en la biblioteca de
Spring, que se aadi al classpath del proyecto cuando ste se cre. Se puede verificar esto en la ventana Projects
buscando en el nodo de Libraries. Localizar el spring-webmvc-3.1.1.RELEASE.jar, luego expandirlo para
encontrar org.springframework.web.servlet > DispatcherServlet.
Spring
Pgina 4
El DispatcherServlet controla las solicitudes entrantes en funcin de los valores de configuracin que se
encuentran en dispatcher-servlet.xml. Abrir el dispatcher-servlet.xml seleccionado su pestaa en el
editor. Observar el siguiente cdigo.
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/index.htm">indexController</prop>
</props>
</property>
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<bean name="indexController"
class="org.springframework.web.servlet.mvc.ParameterizableViewController"
p:viewName="index" />
2. Revisin de la aplicacin.
La aplicacin se compone de dos pginas JSP (que se conocen como vistas en la terminologa MVC). La primera vista
contiene un formulario HTML con un campo de entrada que solicita el nombre del usuario. La segunda vista es una
pgina que simplemente muestra un mensaje de saludo conteniendo el nombre del usuario.
Las vistas son administradas por un controlador, que recibe las solicitudes para la aplicacin y decide cul de ellas
considera regresar. Tambin pasa a las vistas cualesquier informacin que necesiten mostrar (esto se denomina un
modelo). El controlador de la aplicacin se denomina HelloController.
En una aplicacin web compleja, la lgica de negocio no est contenida directamente en el controlador. En cambio, otra
entidad, denominada service, es utilizada por el controlador cada vez que necesita realizar una lgica de negocio. En esta
aplicacin, la lgica de negocio se limita a procesar el mensaje de saludo, y para ello se crea un HelloService.
3. Implantacin de un servicio.
Ahora que el entorno est configurado correctamente, se puede empezar a ampliar el esqueleto del proyecto de acuerdo a
las necesidades. Iniciar con la creacin la clase HelloService.
1. Clic en el botn New File en la barra de herramientas del IDE.
2. Seleccionar la categora Java, a continuacin seleccionar Java Class y clic en Next.
3. En el asistente New Java Class que se, ingresar HelloService como nombre de la clase, e ingresar
service en el nombre de paquete para crear un nuevo paquete de la clase.
4. Clic en Finish. El IDE crea la nueva clase y la abre en el editor.
La clase HelloService desempea un servicio muy sencillo. Toma un nombre como parmetro, y prepara y regresa un
String que incluye el nombre. En el editor, crear el siguiente mtodo sayHello() para la clase (cambios en negritas).
Spring
Pgina 5
Nota: El IDE de NetBeans proporciona plantillas para diversos artefactos de Spring, incluyendo el archivo de
configuracin XML de Spring, el AbstractController y el SimpleFormController.
2. Clic en Next.
3. Ingresar el nombre de la clase HelloController y crear un nuevo paquete ingresando controller en el
campo de texto Package. Clic en Finish. El IDE crea la nueva clase y la abre en el editor.
4. Especificar las propiedades del controlador eliminando los comentarios de los mtodos setter que se muestran
de forma predeterminada en la plantilla de la clase. Para eliminar los comentarios del fragmento de cdigo,
marcar el cdigo como se indica en la imagen de abajo, y enseguida digitar Ctrl-/.
Spring
Pgina 6
La configuracin del FormView permite establecer el nombre de la vista que se utiliza para mostrar el formulario. Esta
es la pgina que contiene el campo de texto que permite a los usuarios introducir su nombre. La configuracin de
SuccessView asimismo permite establecer el nombre de la vista que se debe mostrar en un envo exitoso. Cuando se
establece el CommandName se define el nombre del comando en el modelo. En este caso, el comando es el objeto
formulario con los parmetros de la peticin unidos a l. La configuracin de CommandClass permite establecer el
nombre de la clase del comando. Se rellena una instancia de esta clase y se valida en cada solicitud.
Observar que se muestra una bandera de error para Name en el mtodo setCommandClass():
Ahora se debe crear la clase Name como un bean sencillo para guardar la informacin de cada solicitud.
6. En la ventana Projects, clic derecho en el nodo del proyecto y seleccionar New>Java Class. Se muestra el
asistente New Java Class.
7. Ingresar Name en el nombre de la clase, y para el paquete seleccionar controller de la lista desplegable.
Spring
Pgina 7
10. En el cuadro de dilogo que se muestra, seleccionar la opcin value:String, luego clic OK. Los mtodos
getValue() y setValue () se aaden a la clase Name:
Spring
Pgina 8
11. Digitar Ctrl-Tab y seleccionar HelloController para volver a la clase HelloController. Observar que
la bandera de identificacin de error anterior ha desaparecido ya que ahora existe la clase Name.
12. Eliminar el mtodo doSubmitAction() y eliminar los comentarios del mtodo onSubmit(). El mtodo
onSubmit() permite crear su propio ModelAndView, que se requiere aqu. Realizar los siguientes cambios:
@Override
protected ModelAndView onSubmit(
HttpServletRequest request,
HttpServletResponse response,
Object command,
BindException errors) throws Exception {
Name name = (Name) command;
ModelAndView mv = new ModelAndView(getSuccessView());
mv.addObject("helloMessage", helloService.sayHello(name.getValue()));
return mv;
Como se indic arriba, el command se reconvierte a un objeto Name. Se crea una instancia de ModelAndView, y se
obtiene la vista de xito usando un getter en SimpleFormController. Por ltimo, el modelo se rellena con datos.
El nico elemento en el modelo es el mensaje de saludo obtenida del HelloService creado anteriormente. Se utiliza el
mtodo addObject() para agregar el mensaje de saludo al modelo con el nombre HelloMessage .
13. Corregir los errores de importacin digitando clic derecho en el editor y elegir Fix Imports (Ctrl-Shift-I).
Pgina 9
14. Clic en OK. El siguiente enunciado import se aade a la parte superior del archivo:
import org.springframework.web.servlet.ModelAndView;
Como se indica en la documentacin de la API, esta clase representa un modelo y la vista regresada por un manejador,
que es resuelto por un DispatcherServlet La vista puede tomar el formulario de un nombre de la vista String que
tendr que ser resuelta por un objeto ViewResolver; alternativamente un objeto View se puede especificar
directamente. El modelo es un Map, lo que permite el uso de mltiples objetos con clave por su nombre.
Observar que en esta etapa, no todos los errores son corregidos porque la clase todava no puede identificar la clase
HelloService, ni hacer uso de su mtodo sayHello().
15. Dentro de HelloController, declarar un campo privado HelloService:
private HelloService helloService;
Por ltimo, clic derecho en el editor y seleccione Fix Imports (Ctrl-Shift-I). El siguiente enunciado se agrega en la parte
superior del archivo:
import service.HelloService;
Nota: Spring permite incluir en el IDE el completado de cdigo en los archivos de configuracin XML para las clases de
Java, as como las referencias a beans. Para invocar el completado de cdigo, digitar Ctrl-Space cuando se trabaje en el
editor:
Spring
Pgina 10
<title>Hello</title>
</head>
<body>
<h1>${helloMessage}</h1>
</body>
4. Crear otra pgina JSP en la misma forma, pero con el nombre nameView.
5. En el editor, agregar la siguiente declaracin de biblioteca de etiquetas de Spring a nameView.jsp.
Lo anterior importa la biblioteca de etiquetas de Spring, que contiene etiquetas tiles cuando se implantan las vistas como
pginas JSP.
6. Cambiar el contenido de las etiquetas <title> y <h1> para leer: Enter Your Name.
7. Escriba el siguiente cdigo debajo de las etiquetas <h1>:
<spring:nestedPath path="name">
<form action="" method="post">
Name:
<spring:bind path="value">
<input type="text" name="${status.expression}" value="${status.value}">
</spring:bind>
<input type="submit" value="OK">
</form>
</spring:nestedPath>
spring:bind le permite enlazar una propiedad de bean. La etiqueta bind proporciona un estado de enlace y valor, que se
utiliza como el nombre y el valor del campo de entrada. De esta manera, cuando se enva el formulario, Spring sabr
cmo extraer el valor enviado. Aqu, la clase del comando (controller.Name) posee una propiedad value, por lo
tanto, se establece path a value.
spring:nestedPath permite anteponer una ruta especfica a un bean . Por lo tanto, cuando se utiliz spring:bind como se
muestra arriba, la ruta hacia el bean se convierte en: name.value. Se debe recordar que el nombre del comando
HelloController es name. Por lo tanto, esta ruta se refiere a la propiedad value de un bean de nombre name en el
mbito de la pgina.
8. Cambiar el punto de entrada relativa de la aplicacin. En la actualidad, el punto de entrada del proyecto sigue
siendo index.htm que, como se describe en la seccin anterior Ejecucin del Esqueleto del Proyecto, se
redirige a WEB-INF/jsp/index.jsp. Se puede especificar un punto de entrada para el proyecto cuando se
despliega y se ejecuta. En la ventana Projects, clic derecho en el nodo del proyecto y seleccionar Properties. Se
muestra el cuadro de dilogo Project Properties. En Categories, seleccionar Run. En el campo Relative URL,
ingresar /hello.htm, y a continuacin clic en OK.
En este momento se puede preguntar en donde se encuentra la asignacin de hello.htm a HelloController.
No se ha aadido una asignacin al bean urlMapping , como es el caso de index.htm, la pgina de bienvenida del
esqueleto del proyecto. Esto es posible con un poco de magia de Spring proporcionada por la siguiente definicin de
bean en el dispatcher-servlet.xml:
<bean
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMa
pping"/>
Este beam es responsable de crear automticamente un mapeo de URL para todos los controladores registrados en el
archivo. Toma el nombre completo de la clase del controlador (en este caso, controller.HelloController) y
toma el nombre del paquete y el sufijo Controller, a continuacin, utiliza el resultado como un mapeo a una URL.
Por lo tanto, crea una asignacin hello.htm para HelloController. Esta magia sin embargo no funciona para los
controladores que se incluyen en el Framework Spring, como ParameterizableViewController. Se requiere una
asignacin explcita.
9. En la ventana Projects, clic derecho en el nodo del proyecto y seleccionar Run. El proyecto se compila, implanta
y ejecuta. Se abre el navegador predeterminado, mostrando el hello.htm como el nameView del proyecto.
Spring
Pgina 11
Spring
Pgina 12