PDF de programación - Sesión 3: Spring MVC

<<>>
Imágen de pdf Sesión 3: Spring MVC

Sesión 3: Spring MVCgráfica de visualizaciones

Publicado el 22 de Enero del 2019
929 visualizaciones desde el 22 de Enero del 2019
488,3 KB
32 paginas
Experto Universitario Java Enterprise

Spring

Sesión 3: Spring MVC



Experto Universitario Java Enterprise

Indice

• Procesamiento de una petición
• Configuración básica
• Caso 1: petición sin entrada de datos
• Caso 2: petición con datos de entrada y

validación

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

2



Experto Universitario Java Enterprise

Procesamiento de una petición

Anotaciones o XML

En el web.xml

Código java con
anotaciones

En el fichero de beans

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

JSP (y otros)

Spring MVC

3



Experto Universitario Java Enterprise

Indice

• Spring MVC vs. Struts
• Procesamiento de una petición
• Configuración básica
• Caso 1: petición sin entrada de datos
• Caso 2: petición con datos de entrada y

validación

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

4



Experto Universitario Java Enterprise

Configuración básica
• En el web.xml

• En el archivo nombre_del_servlet-servlet.xml (aquí dispatcher-servlet.xml)



definiremos los beans de la capa web.
Los de negocio y DAOs (los que tengamos en otros ficheros de beans) son
accesibles desde él automáticamente

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

5

<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.do</url-pattern></servlet-mapping>

Experto Universitario Java Enterprise

Enfoque que vamos a seguir
• Spring ofrece muchas posibilidades distintas
• Mejor que ver las cosas sistemáticamente (imposible en 2

horas), vamos a ver dos casos particulares y sin embargo muy
típicos
• 1: Petición HTTP para recuperar datos (ej: datos de un

pedido, lista de todos los clientes, todos los libros,…)

• 2: Petición HTTP con entrada de datos y obtención de

resultados (vale, en realidad eso son 2 peticiones, pero en
Spring se hace todo “en el mismo código”).

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

6



Experto Universitario Java Enterprise

Indice

• Procesamiento de una petición
• Configuración básica
• Caso 1: petición sin entrada de datos
• Caso 2: petición con datos de entrada y

validación

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

7



Experto Universitario Java Enterprise

Caso 1: petición sin formulario
• Ver “ofertas del mes X”

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

8

public class Oferta { private BigDecimal precio; private Date fechaLimite; private TipoHabitacion tipoHab; private int minNoches; //..aquí vendrían los getters y setters} @Servicepublic class GestorOfertas implements IGestorOfertas { public List<Oferta> getOfertasDelMes(int mes) { ... } public List<Oferta> buscarOfertas(int precMax, TipoHabitacion t) { ... }}

Experto Universitario Java Enterprise

El Controller
• Es un POJO con anotaciones

• @Controller: indica que la clase es un controlador
• @RequestMapping: mapeo URL -> controlador

• Además en el dispatcher-servlet.xml hay que decirle a

Spring que autodetecte las anotaciones

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

9

package es.ua.jtech.spring.mvc;import es.ua.jtech.spring.negocio.IGestorOfertas; @Controller@RequestMapping("/listaOfertas.do")public class ListaOfertasController { @Autowired private IGestorOfertas miGestor; ...}<context:component-scan base-package="es.ua.jtech.spring.mvc"/><mvc:annotation-driven/>

Experto Universitario Java Enterprise

El trabajo del controller
Cierto método (¿cuál?) del controller deberá:
• Obtener los parámetros HTTP (si los hay)
• Mediante anotaciones podemos asociar parámetros java a

parámetros HTTP

• Disparar la lógica de negocio
• Colocar el resultado en un ámbito accesible a la vista

y cederle el control
• El interface Model permite almacenar varios objetos asignándole a

cada uno un nombre, accesibles a la vista

• Si devolvemos un String eso es el nombre lógico de la vista (como

en JSF)

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

10



Experto Universitario Java Enterprise

El trabajo del controller:
Asociar petición con método a ejecutar
• Se puede mapear la URL con la clase (todos los métodos

responderán a la misma) o bien mapear cada método por
separado a distintas URL

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

11

@Controller@RequestMapping("/listaOfertas.do")public class ListaOfertasController { @Autowired private IGestorOfertas miGestor; @RequestMapping(method=RequestMethod.GET) public String procesar(HttpServletRequest req) { int mes = Integer.parseInt(req.getParameter("mes")); ... }}

Experto Universitario Java Enterprise

El trabajo del controller:
Asociar petición con método a ejecutar (II)
• Se puede mapear la URL con la clase (todos los métodos

responderán a la misma) o bien mapear cada método por
separado a distintas URL

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

12

@Controllerpublic class OfertasController { @Autowired private IGestorOfertas miGestor; @RequestMapping("/listaOfertas.do”) public String listar(HttpServletRequest req) { int mes = Integer.parseInt(req.getParameter("mes")); ... } @RequestMapping("/getOferta.do”) public String getOferta(HttpServletRequest req) { int id = Integer.parseInt(req.getParameter("id")); ... }}

Experto Universitario Java Enterprise

El trabajo del controller:
1. obtener parámetros HTTP
• @RequestParam asocia y convierte un parámetro

HTTP a un parámetro java

• Si el parámetro no existe generará un error (HTTP status 400)

• Para hacerlo opcional

Spring

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

13

@Controllerpublic class ListaOfertasController { @RequestMapping(value= "/listaOfertas.do", method=RequestMethod.GET) public String procesar(@RequestParam("mes") int mes) { ... }} public String procesar(@RequestParam(value="mes",required=false) int mes) { ...}

Experto Universitario Java Enterprise

El trabajo del controller:
2 y 3. Disparar la lógica y colocar el resultado
• El interface Model permite compartir objetos con la vista,



asignándoles un nombre
“Inyección implícita”: cuando pasamos un parámetro de
tipo Model, se asocia automáticamente con el de la
aplicación

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

14

@RequestMapping(method=RequestMethod.GET)public String procesar(@RequestParam("mes") int mes, Model modelo) { modelo.addAttribute("ofertas", miGestor.getOfertasDelMes(mes)); return "listaOfertas"; }

Experto Universitario Java Enterprise

Más “inyección automática”
• También pasa con otros tipos, como HttpServletRequest,

HttpSession, … consultar la documentación

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

15

@Controller@RequestMapping("/logout")public class LogoutController public String logout(HttpSession sesion) { sesion.invalidate(); return "index" }}

Experto Universitario Java Enterprise

Resolver el nombre de la vista
• El String retornado es el nombre lógico, no el físico
• El encargado de mapearlo es un ViewResolver, de los que
hay varias implementaciones en Spring. Uno de los más
sencillos es el InternalResourceViewResolver

• En este caso, por ejemplo, “result” /jsp/result.jsp”

En el dispatcher-servlet.xml

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

16

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/></bean>

Experto Universitario Java Enterprise

La vista (JSP)
• No tiene por qué tener nada especial de Spring

• Aunque hay etiquetas propias, útiles sobre todo para

formularios

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

17

<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%> ...<c:forEach items="${ofertas}" var="o"> Habitación ${o.tipoHab} un mínimo de ${o.minNoches} noches por solo ${o.precio}eur./noche</c:forEach>

Experto Universitario Java Enterprise

Indice

• Procesamiento de una petición
• Configuración básica
• Caso 1: petición sin entrada de datos
• Caso 2: petición con datos de entrada y

validación

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

18



Experto Universitario Java Enterprise

Caso 2: petición con procesamiento de
datos de entrada

• Ejemplo: buscar ofertas por precio y tipo de habitación
• Hay 2 acciones

• Mostrar formulario con valores por defecto
• Validar datos, disparar lógica de negocio y saltar al resultado

• Posibilidades de implementación:

• Un controller por cada acción
• El mismo controller para las dos. Mapear un método para GET y

otro para POST

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

19



Experto Universitario Java Enterprise

JavaBean para almacenar datos de
formulario

• En Spring se conoce como command. No tiene nada de

especial, es simplemente un JavaBean estándar

Spring

© 2012-2013 Depto. Ciencia de la Computación e IA

Spring MVC

20

package es.ua.jtech.spring.mvc;import es.ua.jtech.spring.dominio.TipoHabitacion; public class BusquedaOfertas { private int precioMax; private TipoHabitacion tipoHab; //..ahora vendrían los getters y setters }

Experto Universitario Java Enterprise

El trabajo del controller ahora es doble
1. Mostrar el formulario

• Rellenarlo con datos por defecto

2. Procesar el formulario
• V
  • Links de descarga
http://lwp-l.com/pdf14953

Comentarios de: Sesión 3: Spring MVC (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad