Resum

Hem fet servir Maven com a eina que dóna estructura als projectes i permet baixar les llibreries que cal fer servir des de repositoris centrals a partir de la configuració de dependències.

Hem introduït el procés petició-resposta de Spring MVC, així com a l’arquitectura que dóna suport. Hem creat dues aplicacions Spring MVC amb la mateixa estructura, és a dir, una part de vistes .jsp, la configuració del Servlet Dispatcher (o Front Controller) i la classe que fa de controlador per manegar les peticions i que retorna l’objecte ModelAndView.

Hem seguit l’estructuració de codi recomanada per a aplicacions web amb Spring MVC, amb les capes:

  • presentació (Presentation)
  • domini (Domain)
  • serveis (Services)
  • persistència (Persistence)

Hem vist que la capa de presentació la conformen les vistes jsp i les classes controladores. A més, mitjançant fitxers de configuració i anotacions, Spring MVC afegeix altres classes necessàries, com el Dispatcher Servlet i View Resolvers.

Hem desenvolupat la persistència amb objectes repositoris que dialoguen amb les dades. En el nostre cas no accedim a una base de dades perquè no és l’abast d’aquesta unitat, i treballem amb dades creades en memòria.

Hem creat la capa de domini com la representació del nostre model de dades, una classe per a cada entitat. En el nostre cas, una única classe Medicament.

Hem acabat amb la capa de servei, que implementa les regles de negoci. En el nostre cas, un moviment d’estoc.

Hem fet injecció de dependències mitjançant interfícies per aconseguir un acoblament feble entre les capes que permetrà un millor manteniment i una adaptació futura.

Per tot això, “Estoc de medicaments” fa servir anotacions de Spring MVC:

  • @Controller, @Repository i @Service, que defineixen el tipus d’objecte Spring.
  • @RequestMapping, que caça l’URL definit i executa el mètode que el segueix.
  • @Autowired, que injecta l’objecte que segueix.

Aprofundint en els controladors hem aconseguit gestionar URL amb variables simples mitjançant l’anotació @RequestMapping(”/{variable}”). També hem resolt la utilització de variables matriu, és a dir, conjunts de parells clau=valor a la l’URL mitjançant l’anotació @RequestMapping(”/filter/{ByCriteria}”) i l’ús de Map<String, List<String».

Hem continuat amb l’acceptació i la utilització de variables en el cos de la petició, atenent peticions amb URL del tipus urlbase/…?var1=valor1&var2=valor2&…&varn=valorn mitjançant l’anotació @RequestParam(“variable”) String variableInterna.

Per veure com es genera i manega a Spring MVC un flux de dades des de la vista fins al model hem afegit el formulari per crear medicaments.

Al controlador, al mètode que desencadena mostrar el formulari, es crea un atribut que passarà a la resposta amb un domain object (Medicament) buit. A la vista, a l’etiqueta form:form, mitjançant l’atribut d’etiqueta modelAttribute, es relacionen els camps del formulari amb les propietats de l’objecte. Canvis en el valors del formulari provoquen els canvis en l’objecte, i per això s’anomena form-backing bean.

El mètode que gestiona el Post del formulari, amb l’anotació

@ModelAttribute("newMedicament") Medicament newMedicamentToAdd

està recollint l’objecte form-backing bean i el podrà fer servir amb la variable declarada (newMedicamentToAdd).

Hem afegit una llista de propietats (Whitelist) per obviar un dels camps del model (stockInOrder). Ho hem aconseguit amb l’anotació @InitBinder i la implementació del mètode que la segueix al controlador específic.

Hem fet servir Spring Security, un framework que permet configurar i personalitzar l’autenticació i el control d’accés en aplicacions Spring. Per usar el framework hem desenvolupat la pàgina de login, afegint l’arxiu de configuració de la seguretat security-context.xml, on hem definit els usuaris i el comportament de la nostra aplicació respecte a la seguretat (per exemple, quines pàgines necessitaran autenticació i quines pàgines han de mostrar-se per login, logout i error).

Finalment, hem fet que la nostra aplicació tingui internacionalització (i18n). Hem externalitzat missatges ajudats pels fitxers de propietats i etiquetes específiques als jsp (spring:message) i hem configurat la internacionalització amb els beans necessaris a nivell de web application context: SessionLocaleResolver i LocaleChangeInterceptor.

Anar a la pàgina següent:
Resultats d'aprenentatge