180 likes | 539 Views
Modulis 2E Spring :a MVC. MVC paraugs Konfigurēšana URL attēlojumi ( URL resolving ) Kontrolieri Skatu attēlojumi ( View resolving ) Skatu tehnoloģiju pārskats. MVC ir OO arhitektūras paraugs ( architecture pattern ) Pirmsākumi valodā Smalltalk (Xerox), 70-tie gadi.
E N D
Modulis 2ESpring:aMVC • MVC paraugs • Konfigurēšana • URL attēlojumi (URL resolving) • Kontrolieri • Skatu attēlojumi (View resolving) • Skatu tehnoloģiju pārskats
MVC ir OO arhitektūras paraugs (architecture pattern) Pirmsākumi valodā Smalltalk (Xerox), 70-tie gadi Modelis,Skats,Kontrolieris (MVC) 2 izmainastāvokli 1 Modelis (Model) Glabā aplikācijas stāvokli Aplikācijas "biznesa" funkcijas Paziņo skatiem par izmaiņām Kontrolieris (Controller) Attēlo notikumus par modeļa izsaukumiem Izvēlas skatu atbildes attēlošanai Dažādas funkcijas var realizēt dažādi kontrolieri notikums izvēlasskatu 3 4 aptaujāmodeli Skats (View) Attēlo modeļa datus Aptaujā modeli par izmaiņām Ietver sevī notikumus kontrolierim 5 atbilde
Priekšējā kontroliera paraugs • Spring:a MVC papildus izmanto priekšējo kontrolieri (Front Controller) • Par modeli Spring:ā sauc nevis aplikācijas stāvokli ar "biznesa" metodēm, bet asociatīvu masīvu, ko kontrolieris piegādā skatam. Kontrolierisapstrādā notikumu un izveido modeli deleģē pieprasījumu 2 1 3 modelis Priekšējais kontrolieris(DispatcherServlet) 4 modelis 6 attēlo atbildi Skata šablonskombinē saturu un formu 5 Servletu konteiners
Spring:a MVC kā UML diagramma Vienkāršota UML diagramma, kur attēlota kontrolieru un skatu atrisināšana (resolving)
MVC Web aplikācijas gadījumā • Ienākošais notikums – HTTP pieprasījums • Kontrolieris – Manto no Spring:a interfeisa Controller • Skats – JSP, XSLT, Velocity vai Freemarker, utml. • Modelis – Javas objekti asociatīvā masīvā (piemēram, java.util.HashMap)
Spring:a konfigurēšana web.xml • Iekš web.xml deklarē jaunu DispatcherServlet, un attēlo to uz kādu URL saimi, izmantojot regulāras izteiksmes paraugu • Ja DispatcherServlet'u web.xml sauc par "dsname", tad tā konfigurācijas fails ir dsname-servlet.xml (apakšdirektorijā WEB-INF - līdzīgi kā web.xml).
Spring MVC konfigurēšana Ko var konfigurēt Spring:a MVC DispatcherServlet:am? Ir 2 būtiskākie objekti (HandlerMapping un ViewResolver) un daudz visa kā cita • org.springframework.web.servlet.HandlerMapping • kā doto URL attēlot par kontrolieri • org.springframework.web.servlet.ViewResolver • kā no kontroliera atgrieztā skata nosaukuma iegūt skatu • org.springframework.web.servlet.LocaleResolver • pēc kura algoritma noteikt lokāli • org.springframework.web.multipart.MultipartResolver • kā apstrādāt augšupielādējamus failus • org.springframework.web.servlet.HandlerExceptionResolver • ko darīt ar izņēmumiem • org.springframework.web.servlet.ThemeResolver • papildus mehānisms CSS, JSP, attēlu atrašanai priekš noteiktas "tēmas"
HandlerMapping - kontroliera izvēles algoritms Dota URL adrese, izlemj kuru kontrolieri izsaukt • SimpleUrlHandlerMapping • definē attēlojumu ar Map vai Properties objektu • BeanNameUrlHandlerMapping • bean komponentiem piešķir vārdus, kas sakrīt ar URL fragmentu ("name" nevis "id" atribūts) • CommonsPathMapHandlerMapping • Lietot Commons Attributes attēlojuma noteikšanai
Skatu atrašana (view resolving) Pēc viewName (stringveida vārda) inicializē skata objektu ar arbilstošu šablonu • BeanNameViewResolver • skata vārdu attēlo par statiski konfigurētu Spring:a komponenti • UrlBasedViewResolver • skata vārds attēlojas par URL adresi • ResourceBundleViewResolver • skatus atrod resursu failā (noderīgi lokalizācijai, kam ir dažādi skati dažādiem • XmlViewResolver - attēlojumus meklē atsevišķā XML failā • FreeMarkerViewResolver - UrlResourceViewResolver priekš FreeMarkerView • VelocityViewResolver - UrlResourceViewResolver priekš VelocityView
Skatu klases Spring MVC satur šādus View apakštipus: • JstlView • attēlo viewName par JSP lapu, kurā uzstādīti arī JSTL tagu bibliotēkām vajadzīgie mainīgie, piemēram, lokalizācija. • RedirectView • Veic HTTP Redirect • TilesView, TilesJstlView • integrācija ar Tiles • VelocityLayoutView, VelocityToolboxView, VelocityView • Velocity skati ar vai bez papildu objektiem, ko konfigurē toolbox.xml • FreeMarkerView • FreeMarker skati • JasperReportsView, JasperReportsMultiFormatView, JasperReportsMultiFormatView, JasperReportsPdfView, JasperReportsXlsView • Jasper Report:u atbalsts
Lokalizācija • Lokāli var uzstādīt manuāli, ņemt no pārlūka konfigurācijas vai fiksēt. • AcceptHeaderLocaleResolver - izmantot HTTP "Accept-language" hederi lokāles atrašanai • CookieLocaleResolver - noglabāt lietotāja izvēlēto lokāli (pastāvīgā) sīkdatnē • FixedLocaleResolver - vienmēr lietot to pašu lokāli • SessionLocaleResolver - noglabāt lokāli sesijā
Dažādas kontrolieru klases Spring:a MVC parasti nemanto interfeisu Controller, bet pārdefinē kādu specializētu kontroliera klasi: • AbstractController • var definēt kešošanas politiku, HTTP metodi (get/set/post/head) • ParameterizableViewController • vienmēr izvēlas to pašu skatu • UrlFileNameViewController • skatu iegūst no URL adreses (http://blah/foo.html -> foo) • SimpleFormController • formu apstrādei (t.i. noteikta Javas objekta apstrādei), var pievienot validatoru. • AbstractWizardFormController • notikumu apstrādei, kas balstās uz stingrā secībā skatāmām formām • ServletWrappingController • deleģē izpildi servletam
Formu apstrāde • Uzstādīt komandas objektu (jebkurš Javas objekts) • Uzstādīt validatoru (mantots no klases org.springframework.validation.Validator) • Uzstādīt tālākos skatus (form, success, failure, error) • Izmanto GET/POST kritēriju, lai atšķirtu tukšas formas pieprasījumu no formas apstrādes pieprasījuma
Daudzekrānu formas (wizards) • Līdzīgasformām, bet validāciju veic pa daļām - uz katra ekrāna savu daļu • Vienskontrolieris atbild par secīgu virzīšanos cauri lapām. • Formas apstrāde parasti ir pašās beigās • Formas ievadi atlikt (cancel) var jebkurā ekrānā.
Pārtvērēji (interceptors) • Daži HandlerMappings ļauj pirms kontroliera izsaukt pārtvērēja kodu, ja šie pārtvērēji atbilstoši konfigurēti • Var pārbaudīt sesijas noildzi, pievienot jaunus objektus pieprasījumam vai sesijai. • Ļauj veidot aspektorientācijas efektus kontrolieriem
Izņēmumu apstrāde • Spring:a aplikācijās vairums izņēmumu ir RuntimeException apakštipi - tos nevajag metodēs ķert vai deklarēt. • Ja vajadzīga īpaša apstrāde kontrolieru kļūdu gadījumos, var konfigurēt un lietot ExceptionHandler.
Tēmas (themes) • Viegli konfigurējamas un izpildes laikā nomaināmas aplikācijas "ādas". • Dažādām tēmām var konfigurēt atšķirīgus css, jsp, bilžu failus.
Literatūra • http://www.springframework.org • http://www.zabada.com/technology/Wiki.jsp?page=SpringRecipes • http://www.springframework.org/docs/reference/mvc.html - Spring'a MVC • http://java.sun.com/blueprints/patterns/MVC-detailed.html - MVC un citi J2EE arhitektūras paraugi • http://www.springframework.org/docs/reference/ - oficiālā Spring:a rokasgrāmata • C. Walls, R.Breidenbach. Spring in Action • R.Harrop, J. Machacek. Pro Spring • R. Johnson, J. Holler. J2EE Without EJB