0% au considerat acest document util (0 voturi)
6 vizualizări55 pagini

Spring Notes PDF

Framework-ul Spring este o platformă Java open source, lansată în 2003, care oferă soluții pentru probleme comune în dezvoltarea aplicațiilor. Comparativ cu alte cadre precum Struts, Spring permite dezvoltarea aplicațiilor web și independente, având o arhitectură modulară și suport pentru injecția de dependență. Principalele sale caracteristici includ gestionarea tranzacțiilor, programarea orientată pe aspecte (AOP) și o interfață consistentă pentru integrarea datelor.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
6 vizualizări55 pagini

Spring Notes PDF

Framework-ul Spring este o platformă Java open source, lansată în 2003, care oferă soluții pentru probleme comune în dezvoltarea aplicațiilor. Comparativ cu alte cadre precum Struts, Spring permite dezvoltarea aplicațiilor web și independente, având o arhitectură modulară și suport pentru injecția de dependență. Principalele sale caracteristici includ gestionarea tranzacțiilor, programarea orientată pe aspecte (AOP) și o interfață consistentă pentru integrarea datelor.

Tradus de

ScribdTranslations
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Primăvară

Framework-ul este o bucată de software. Acest lucru rezolvă problemele care apar în mod frecvent ș i repetat.
probleme în multiple proiecte.
Framework-ul Spring este o platformă Java open source ș i a fost scris iniț ial de Rod
Johnsonand a fost lansat pentru prima dată sub licenț a Apache 2.0 în iunie 2003.

Spring is more flexible framework when we compared with struts. By using Struts 1.3
ș i 2.3 putem dezvolta doar aplica ț ii bazate pe web. Dar folosind Spring putem
dezvoltă aplicaț ii web, precum ș i aplicaț ii independente.
Putem folosi oricare dintre următoarele cadre pentru a dezvolta aplicaț iile bazate pe web.

Ele sunt :
Struts [Link] [Link] [Link]ă web [Link]
Framework-ul Spring este o bucată de software care conț ine soluț ii pentru problemele comune.
probleme care au avut loc repetat în mai multe proiecte.

Următoarele sunt avantajele cadrelor de lucru precum Struts ș i Spring:-


Framework-urile rezolvă problemele identificării arhitecturii. Fiecare
un framework precum Struts ș i Spring este livrat cu arhitectura MVC2.
Dacă folosim Servlete ș i Jsps, trebuie să ne dezvoltăm proprii Controlere. Dacă folosim
framework-uri precum Struts ș i Spring au venit intern cu Controlere
Exemplu:
ActionServeltin Struts

DispatcherServlet în Spring
Atunci când folosim un cadru, nu avem nevoie să folosim codul RequestDispatcher.
deoarece nu trebuie să codificăm numele căilor resurselor. Folosind aceste cadre
putem să le configurăm în fiș ierele de configurare.
Dacă folosim JDBC, Servlete, Jsps pentru a dezvolta aplicaț ii bazate pe formulare, trebuie să
scrie o cantitate mare de cod pentru a avea grijă de validările de server ș i de afiș are
erori în aceeaș i formă.
By using JDBC, Servlets, Jsps we have to provide huge amount of code to develop
aplicaț iile I18n. (Programele care afiș ează ieș irea în funcț ie de client)
limbi regionale
Framework-urile precum Struts ș i Spring au fost livrate cu un set de etichete predefinite.
biblioteci. Dacă folosim Servlete ș i JSP-uri, trebuie să dezvoltăm propria noastră bibliotecă de etichete.
ceea ce este dificil.

Când folosim cadrele precum Struts ș i Spring, putem folosi pdf/velocity/jsf


ca componente de vizualizare.

Cei mai mulț i dintre băieț ii experimentaț i dezvoltă noile framework-uri.

Fiecare companie î ș i folose ș te propriile cadre pentru a dezvolta proiectele. Toate acestea
framework-urile utilizează intern celelalte framework-uri.

Beneficiile utilizării cadrelor Spring:

Următoarea este lista câtorva dintre marile avantaje ale utilizării Spring Framework:

Spring le permite dezvoltatorilor să dezvolte aplicaț ii de clasă enterprise folosind POJO-uri.


Beneficiul utilizării doar a POJO-urilor este că nu aveț i nevoie de un produs container EJB
cum ar fi un server de aplicaț ii, dar ai opț iunea de a folosi doar un robust
container de servlet, cum ar fi Tomcat sau un produs comercial.
Primăvara este organizată într-o manieră modulară. Chiar dacă numărul de pachete
ș i cursurile sunt substanț iale, trebuie să te îngrijorezi doar de cele de care ai nevoie ș i
ignora restul.

Primăvara nu reinventează roata, ci foloseș te cu adevărat unele dintre


tehnologii existente precum mai multe cadre ORM, cadre de jurnalizare, JEE,
Timere Quartz ș i JDK, alte tehnologii de vizualizare.

Testarea unei aplica ț ii scrise cu Spring este simplă deoarece mediu-


codul dependent a fost mutat în acest cadru. În plus, folosind JavaBean-
stil POJOs, devine mai uș or să foloseș ti injecț ia de dependenț ă pentru a injecta datele de test.

Frameworkul web Spring este un framework web MVC bine conceput, care oferă
o alternativă excelentă la cadrele web precum Struts sau alte soluț ii supra-inginerizate
framework-uri web mai puț in populare.

Spring oferă o API convenabilă pentru a traduce excep ț iile specifice tehnologiei
(generat de JDBC, Hibernate sau JDO, de exemplu) într-o stare consistentă, necontrolată
excepț ii.
Containerele LightweightIoC tind să fie uș oare, în special atunci când sunt comparate cu
Containere EJB, de exemplu. Acest lucru este benefic pentru dezvoltarea ș i implementarea
aplicaț ii pe calculatoare cu memorie ș i resurse CPU limitate.
Spring oferă o interfaț ă consistentă de gestionare a tranzacț iilor care poate scala.
la o tranzacț ie locală (folosind o singură bază de date, de exemplu) ș i a creș te la
transacț ii globale (utilizând JTA, de exemplu).

Caracteristica principală a primăverii este IOC.

Ce este IOC?
IOC reprezintă Inversiunea Controlului. O persoană 'x' acț ionează aș a cum ar trebui să facă o muncă în schimb.
acelei persoane a realizat sarcinile, iar cealaltă persoană 'y' a finalizat sarcina ș i
rezultatul este savurat de persoana 'X'. Vom numi aceasta Inversarea Controlului.

Spring suportă AOP. AOP înseamnă Programare Orientată pe Aspecte.


The advantages of Aop are all the common code is place in aspect before the business
metoda logică este executată primăvara apelând Aspectul. Aspectul a apelat intern afacerea
metodă logică.
Conform primăverii, ei au furnizat aspectul managerului de tranzacț ii. El se va ocupa.
despre gestionarea tranzacț iilor în Spring.
Spring framework urmează arhitectura mVc2 ș i este un software cu sursă deschisă.

Framework-ul Spring este împărț it în câteva module. Avantajul acestei abordări este
putem include doar modulele necesare în proiectul nostru.

Modulul este o colecț ie de clase, interfeț e ș i enumerări.


Framework-ul Spring este împărț it în ș ase module:

Ei sunt:
[Link] [Link] [Link] [Link] [Link] [Link]

Uneori, în proiect, vom folosi doar core, orm, aop doar.

Următoarea este arhitectura spring 2.0


module spring 2.0

Următorul este diagrama modulelor Spring 3.0:

Modul de bază:
Ca parte a modulului de bază avem IOC.

Containerul de bază constă din nucleu, boabe, context ș i limbaj de expresie


module ale căror detalii sunt următoarele:
ModuleCore oferă părț ile fundamentale ale cadrului, inclusiv
Caracteristici IoC ș i Injection de Dependenț ă.

Moduleul Bean oferă BeanFactory, care este o implementare sofisticată


al modelului de fabrică.

Modulul TheContext se bazează pe fundaț ia solidă oferită de Core ș i Beans.


module ș i este un mediu pentru a accesa orice obiecte definite ș i configurate. The
Interfaț a ApplicationContext este punctul focal al modulului Context.
Modulul de limbaj TheExpression oferă un limbaj de expresie puternic pentru
interogarea ș i manipularea unui grafic de obiecte în timpul execuț iei.

Acces/Integrare Date:

Stratul de Acces/Integrare a Datelor constă din JDBC, ORM, OXM, JMS ș i Tranzacț ie
module care au detaliile următoare:
ModululDAO: Când folosim modulul DAO, putem reduce mult codul în
proiect. Modul DAO rezolvă toate problemele legate de erorile specifice bazei de date.

Modulul JDBC oferă un strat de abstractizare JDBC care elimină necesitatea de a face
programare legată de JDBC plictisitoare.

TheORMmodule provides integration layers for popular object-relational


API-uri de mapare, inclusiv JPA, JDO, Hibernate ș i iBatis.
Avantajul Spring ORM este că, dacă avem cunoș tinț e într-un ORM, putem lucra cu oricare.
alt modul ORM u ș or
Modulul OXM oferă un strat de abstractizare care suportă Object/XML
implementări de mapare pentru JAXB, Castor, XMLBeans, JiBX ș i XStream.
Modulul Java Messaging Service (JMS) conț ine caracteristici pentru producerea ș i
consumarea mesajelor.

Modulul de tranzacț ii suportă tranzacț ii programatice ș i declarative


management pentru clasele care implementează interfeț e speciale ș i pentru toate POJO-urile tale.

Web:

Stratul Web constă din Web, Web-Servlet, Web-Struts ș i Web-Portlet


module care au următoarele detalii:
ModuleWeb oferă caracteristici de integrare de bază orientate către web, cum ar fi
funcț ionalitatea de încărcare a fiș ierelor multiparte ș i iniț ializarea containerului IoC utilizând
listeneri servlet ș i un context de aplicaț ie orientat pe web.
Modulul TheWeb-Servlet conț ine modelul-controller-vizualizare (MVC) al Spring.
implementare pentru aplicaț ii web.
Modulul TheWeb-Struts conț ine clasele de suport pentru integrarea unui classic
Struts web tier within a Spring application.
Modulul Web-Portlet oferă implementarea MVC care poate fi utilizată într-un
mediu portlet ș i reflectă funcț ionalitatea modulului Web-Servlet.
Miscellaneous:

Există câteva module importante precum AOP, Aspects, Instrumentaț ie, Web ș i
Module de test al căror detaliu este următorul:

AOP:
AOP reprezintă programarea orientată pe aspecte. Aceasta rezolvă problema ...
Ups.(moș tenire între clasele multiple)
Grupul de oameni din sursa deschisă vine cu un model de programare numit AOP.
software-ul AspectJ a urmat Aop ș i a dezvoltat modulul Aop. Tipii de la Spring
has developed some classes which follows the aop module.
Modulul AOP oferă o implementare a programării orientate pe aspecte
permiț ându-vă să definiț i interceptori de metode ș i puncte de tăiere pentru a decupla clar
cod care implementează funcț ionalitate care ar trebui să fie separată.

Modulul Aspectsmodule oferă integrare cu AspectJ, care este din nou un instrument puternic.
ș i un cadru de programare orientată pe aspecte (AOP) matur.

Modulul Instrumentaț ie oferă suport pentru instrumentaț ia claselor ș i clasă


implementări ale loader-ului care urmează să fie utilizate în anumite servere de aplicaț ii.

ModululTest susț ine testarea componentelor Spring cu JUnit sau TestNG


structuri.

Modul JEE în spring2.0:


JEE reprezintă mediu Java pentru întreprinderi.

Ca parte a modulului jee, echipa spring a suportat EJB ș i MailAPI.


DepencyLookup:

Dacă resursa aplicaț iei caută ș i adună valorile sale dependente din alte
resursele aplica ț iei sunt numite căutarea dependen ț elor. În căutarea dependen ț elor
resursele extrag valorile din alte resurse.
Dacă valorile sunt asignate variabilelor doar după ce metoda este apelată explicit, este denumită
cercetarea dependenț ei. Modul în care aplicaț ia client adună referinț a obiectului DataSource de la
software-ul de registru se numeș te căutare a dependenț elor.

Injecț ia de dependenț ă:

Dacă containerul, cadrul, serverul sau mediul de execuț ie de bază este dinamic
atribuirea valorilor dependente resurselor aplicaț iei este denumită Dependenț ă
injecț ie sau IOC.
În injec ț ia de dependen ț ă, containerul/frameworkul de bază împinge dinamic
valori către resurse..
De exemplu: Modul în care ActionServlet scrie datele formularului în obiectul clasei FormBean se încadrează în
Injectarea dependenț ei.

Spring suportă trei tipuri de injecț ii de dependenț ă:


1. Injectare prin setatori (Prin utilizarea metodelor setXxx(xxx))
2. Injec ț ia constructorului (prin utilizarea constructorilor)
3. Injec ț ia de Interfa ț ă (prin implementarea interfe ț elor speciale)

Orice clasă Java predefinită sau definită de utilizator poate fi numită bean Spring.

Clasa Java care conț ine doar logică de persistenț ă ș i separă această logică de altele.
logica aplicaț iei se numeș te DAO.
Spring suportă clasa POJO. Clasa POJO nu este nimic altceva decât o clasă care nu extinde sau
orice altă clasă sau interfaț ă.
Procedura de configurare a primei aplicaț ii Spring:
Paș i:
1. Creează un spa ț iu de lucru pentru aplica ț ia spring.
2. Creează proiectul java.
3. Adăuga ț i bibliotecile Spring la proiect prin selectarea adăugării capacită ț ilor Spring în
MyEclipse. Ș i adaugă biblioteca utilizatorului în IDE-ul Eclipse în următorul mod:
Proiect-- proprietăț i---------- JavaBuildpath--------- Adaugă bibliotecă-----
BibliotecaUtilizator nou oferi nume pentru lib (spring) Adăugaț i borcane--
Apoi adaugă toate fiș ierele jar Spring.

Pentru a dezvolta o aplicaț ie Spring, trebuie să creaț i următoarele clase:

Clasă de bean Spring


2. Clasa de configura ț ie a bean-urilor Spring
3. Aplica ț ie client pentru a ob ț ine obiectul clasei bean

Dezvoltarea clasei de bean Spring:

We have created the Address class with three properties


Clasa publică Adresă {

Ș ir de stradă;
String oraș ;
String stare;

//setter ș i getter pentru clasa de mai sus ca urmează


Public void setStreet(String street){
[Link] = street;
}
public String getStreet(){
returnează stradă;

am creat un obiect de clasă Address astfel


Adresa objAddress = noua Adresă();
am apelat o metodă [Link]("srnagar") când acest setter este apelat avem
am creat un obiect String ș i am furnizat inputul furnizat acelei metode. Ș i acesta furnizează valoarea
de exemplu variabilă.

[Link](“srnagar”);
[Link]("hid");

[Link]("ap");

Din diagrama de mai sus am observat că objAddress este dependent de obiectele String.
Semnificaț ia acestui lucru este că obiectul Address foloseș te obiectul String.

când setStreet() este executat, stabilizează dependen ț a între String ș i


Obiect adresă. Pe măsură ce metoda Setter() stabile ș te dependen ț a între două
obiecte, noi numim aceasta injectare asSetter.

În loc să creeze un obiect ș i să stabilească dependenț a, containerul Spring va lua


îngrijirea creării obiectelor ș i stabilizarea dependenț elor sau injectarea dependenț elor.
vom numi aceasta Inversarea Controlului sau injectarea dependenț ei.

Conform documentaț iei Spring, Ioc este numit injecț ie de dependenț ă.


În primăvară vom dezvolta clasa pojo sau clasa bean Spring. Dacă containerele Spring vor dori să preia
îngrijirea lui Ioc
atunci trebuie să configurăm asta în configura ț ia Spring
file.([Link])
Următoarea este un exemplu de fiș ier de configurare a bean-urilor Spring:

<boabe>
<beanid="" class="" lazy-init="">
<proprietate> </proprietate>

</bean>
<boabe>
Procedura de configurare a bean-ului spring în fiș ierul de configurare Spring în MyEclipse:
Framework-ul Spring MVC
Spring MVC ajută la construirea de aplicaț ii web flexibile ș i slab legate.
Model-vizionare-controlerul ajută la separarea logicii de afaceri,
logica de prezentare ș i logica de navigare. Modelele sunt responsabile pentru encapsularea
datele aplicaț iei. Vederile redau răspunsul utilizatorului cu ajutorul
model obiect. Controlerele sunt responsabile pentru primirea cererii de la utilizator
ș i apelând serviciile de back-end.

Figura de mai jos arată fluxul de solicitare în cadrul Spring MVC Framework.

Când o cerere este trimisă către cadrul Spring MVC, următoarea secvenț ă de
evenimentele se întâmplă.

DispatcherServlet primeș te mai întâi cererea.


DispatcherServlet consultă HandlerMapping ș i invocă
controlerul asociat cu cererea.
Controllerul procesează cererea apelând metodele de serviciu corespunzătoare
ș i returnează un obiect aModeAndView la DispatcherServlet.
Obiectul ModeAndView conț ine datele modelului ș i numele vederii.
DispatcherServlet trimite numele vederii unui ViewResolver pentru a găsi
actualView pentru a invoca.
Acum, DispatcherServlet va trimite obiectul model la View pentru a-l reda.
rezultat.
TheView cu ajutorul datelor modelului va reda rezultatul înapoi la
utilizator.
Pentru a înț elege framework-ul Spring MVC, vom crea acum un simplu salut.
exemplu mondial folosind Eclipse IDE. Folosesc Eclipse IDE 3.4, Spring IDE
plugin, Tomcat 6.0 ș i Spring 3.0 pentru a demonstra acest exemplu.

Mergi la Fisier -> Nou -> Proiect Web Dinamic, pentru a crea un proiect web.

Introduceț i numele proiectului ș i faceț i clic pe butonul Finalizare.


Faceti clic dreapta pe folderul proiectului ș i selectaț i Spring Tools -> Adăugaț i proiect Spring
Natură, pentru a adăuga capabilităț i Spring la proiectul web. Această funcț ionalitate va fi disponibilă
odată ce instalezi Spring IDE.
Creează un nou pachet [Link] în directorul src. Controlerul Spring
clasa extinde [Link]. Pentru
create a new controller class right click thesrcdirectory and create a new java
clasă, introduceti numele clasei controller ș i numele superclasei ș i butonulFinish.
Copiaț i următorul cod în interiorul clasei HelloWorldController.
vizualizaț i sursa

tipăriț i?

[Link] [Link];

[Link];

03.

[Link];
[Link];

06.

[Link] {

08.

09.ș irPrivat mesaj;

10.

11.@Override

[Link] handleRequestInternal(HttpServletRequest request,


HttpServletResponse răspuns) aruncă Excepț ie {

[Link] newModelAndView("welcomePage","welcomeMessage", message);

14.}

15.

[Link] void setMessage(String mesaj) {

[Link] = message;

18.}

19.

20.
DispatcherServlet, după cum sugerează numele, este un servlet unic care gestionează
întreaga procesare a cererilor. Când o cerere este trimisă către
DispatcherServlet-ul deleghează sarcina prin invocarea controlerelor corespunzătoare
pentru a procesa cererea. Ca orice alt servlet, DispatcherServlet trebuie să fie
configurat în descriptorul de desfăș urare web, aș a cum este arătat.
vizualizaț i sursa

tipăriț i?

01.<?xml version="1.0" encoding="UTF-8"?>

02.<web-app xmlns:xsi="[Link]
instanț ăxmlns=[Link]
com/xml/ns/javaee/web-
app_2_5.xsdxsi:schemaLocation=[Link]
[Link]/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID"version="2.5">

03.<servlet>

04.<numele-servletului>dispatcher</numele-servletului>

05.<servlet-class> [Link] </servlet-class>


clasă>

06.<load-on-startup>1</load-on-startup>

07.</servlet>

08.<mapare-servlet>

09.<nume-servlet>dispatcher</nume-servlet>

10.<pattern-url>*.htm</pattern-url>

11.</servlet-mapping>

12.<lista-fiș ierelor-de-binevenit>

13.<welcome-file>[Link]</welcome-file>

14.</welcome-file-list>
15.</web-app>

Aici numele servletului este dispatcher. Implicit, DispatcherServlet va căuta


un fiș ier numit [Link] pentru a încărca configuraț ia Spring MVC. Acest fiș ier
numele este format din concatenarea numelui servlet-ului ("dispatcher") cu "-
[Link]". Aici folosim patternul-url ca ".htm" pentru a ascunde
tehnologii de implementare pentru utilizatori.
[Link] va fi invocat primul atunci când executăm aplicaț ia web Spring.
Acesta este singurul fiș ierjsp din afara directoruluiWEB-INF ș i este aici pentru a oferi un
redirecț ionaț i către theDispatcherServlet. Toate celelalte vizualizări ar trebui să fie stocate sub
directorul WEB-INF astfel încât să poată fi invocat doar prin intermediul controller-ului
proces.
Pentru a crea un fiș ier de configurare pentru bean, faceț i clic dreapta pe folderul WebContent ș i
selectaț iNou -> Altul. Următoarea fereastră de dialog apare.
Selectaț i fiș ierul de configurare a bean-ului Spring ș i faceț i clic pe Următorul.

Introdu numele fiș ierului ca "[Link]" ș i apasă pe butonul Finalizare.


Acum că fiș ierul de configurare a bean-ului Spring a fost creat, trebuie să configurăm
clasele Controller ș i ViewResolver. Codul următor arată cum să faci
acesta.
vizualizaț i sursa

print?

01.<bean id="viewResolver"

[Link]ă=" [Link].
InternalResourceViewResolver

03.<property name="prefix">
04.<value>/WEB-INF/jsp/</value>

05.</property>

06.<property name="suffix">

07.<valoare>.jsp</valoare>

08.</proprietate>

09.</bean>

10.

11.<bean name="/[Link]" class="[Link]">

12.<property name="message"value="Hello World!"/>

13.</bean>

14.

15.</beans>

Mai întâi să înț elegem cum să configurăm controlerul.

1.<bean name="/[Link]" class="[Link]">

2.<property name="message"value="Hello World!"/>

3.</bean>

Aici, atributul name al elementului bean indică modelul URL pentru a mapa
cererea. Deoarece atributul id nu poate conț ine caractere speciale precum "/" , noi
specificaț i modelul URL utilizând atributul thename al elementului beanel. În mod implicit
DispatcherServlet foloseș te BeanNameUrlHandlerMapping pentru a mapa
cerere intrare. TheBeanNameUrlHandlerMapping foloseș te numele bean-ului ca
Model URL. Deoarece BeanNameUrlHandlerMapping este folosit în mod implicit, trebuie
nu faceț i nicio configurare separată pentru asta.
Setăm atributul mesaj al clasei HelloWorldController prin setter
injection. Clasa HelloWorldController este configurată exact ca o altă
Clasa JavaBean în contextul aplicaț iei Spring, aș a că, ca orice alt JavaBean, noi
poate seta valori pentru acesta prin Injectarea de Dependenț ă (DI).
[Link] va redirecț iona cererea către DispatcherServlet, care la rândul său
consultă cu theBeanNameUrlHandlerMapping ș i invocă
ControllerulHelloWorld. Metoda handleRequestInternal() în
Clasa HelloWorldController va fi invocată. Aici returnăm proprietatea mesajului
under the namewelcomeMessageand the view namewelcomePageto
theDispatcherServlet. As of now we only know the view name, and to find the
pentru a invoca vizualizarea actuală, avem nevoie de un aViewResolver.

ViewResolver este configurat folosind următorul cod.


vizualizaț i sursa

tipăriț i?

01.<bean id="viewResolver"

[Link]ă="
[Link]

03.<property name="prefix">

04.<value>/WEB-INF/jsp/</value>

05.</property>

06.<property name="suffix">

07.<value>.jsp</value>

08.</property>

09.</bean>

Aici, InternalResourceViewResolver este folosit pentru a rezolva numele vederii în


vederea actuală. Valoarea prefixului + numele vederii + valoarea sufixului va oferi vederea actuală
locaț ie. Aici locaț ia reală a vederii este /WEB-INF/jsp/[Link]
Următoarele fiș iere de bibliotecă sunt necesare pentru a rula exemplul.

vizualizaț i sursa
print?

[Link]-runtime-3.0

[Link]-logging-1.0.4

[Link]-3.0.0.M3

[Link]-3.0.0.M3

[Link]-3.0.0.M3

[Link]-3.0.0.M3

[Link]-3.0.0.M3

[Link]-3.0.0.M3

[Link]-3.0.0.M3

[Link]-3.0.0.M3

Pentru a executa exemplul, rulaț i fiș ierul [Link]. Următoarea pagină va fi


afiș at.
1) Introducere
ThePrimăvaraMVC oferă funcționalitate bogată pentru crearea aplicațiilor web robuste și este disponibil.
ca un modul separat în Distribuție. Ca o condiție preliminară, cititorii sunt sfătuiți să parcurgă
articol introductiv despre Framework-ul SpringIntroducere în Spring Framework. Spring MVC
Frameworkul este conceput ș i proiectat într-un mod în care fiecare bucată de logică ș i funcț ionalitate este
foarte configurabil. De asemenea, Spring se poate integra fără efort cu alte framework-uri web populare
likeStruts,WebWork,Java Server Facesși Tapestry. Aceasta înseamnă că poți chiar să-i instruiești
Spring poate utiliza oricare dintre cadrele web. Mai mult decât atât, Spring nu este strâns legat de
Servlets sau Jsp pentru a reda Viziunea către Clienți. Integrarea cu alte tehnologii de Viziune
likeVelocity, Freemarker, Excel sau Pdf este acum posibil. Acest articol oferă o introducere
peste diversele componente disponibile în Spring MVC pentru nivelul Web. Specific,
componentelor de bază majore precum Dispatcher Servlet, Handler

Mapări, Controler, Model, Vedere ș i Rezolvator de Vederi împreună cu API-ul corespunzător sunt
discutat pe scurt. În cele din urmă, articolul va concluziona prin prezentarea unei aplicații de exemplu.
citeș te de asemenea:

Întrebări de interviu pentru Spring

Cărț i despre Framework-ul Spring(recomandat)

Întrebări de interviu JSF


Introducere în Spring MVC

2) Fluxul de lucru de primăvară

Înainte de a analiza diversele componente care sunt implicate în cadrul Spring MVC.
să aruncăm o privire asupra stilului Spring Web Flow.
Clientul solicită o resursă în aplicația web.
2. Controllerul Principal de Primăvară, care este implementat ca un Servlet, va intercepta Cererea și
atunci voi încerca să găsesc mapările handler-ului potrivit.
3. Mapele de gestionare sunt folosite pentru a mapa o solicitare de la Client la obiectul său Controller navigând

peste diferitele Controlere definite în fișierul de Configurare.


4. Cu ajutorul adaptoarelor de handler, servletul Dispatcher va trimite cererea la
Controler.
5. Controlerul procesează cererea clientului și returnează Modelul și Vederea sub formă
Obiectul ModelAndView se întoarce la Controlerul Principal.

6. Front Controller-ul încearcă apoi să rezolve View-ul actual (care poate fi Jsp, Velocity sau Free)
marker) consultând obiectul View Resolver.
7. Apoi, Viziunea selectată este redată înapoi Clientului.
Să examinăm diversele Componente de Bază care alcătuiesc Stratul Web Spring. Următoarele sunt
componentele acoperite în secțiunile următoare.

3) Servlet Dispecer
Servletul Dispatcher, reprezentat de [Link],
urmează modelul de design Front Controller pentru gestionarea cererilor clienților. Asta înseamnă că orice
Url vine de la Client, acest Servlet va intercepta Cererea Clientului înainte de a o transmite.
Obiect la Contoller. Fișierul de configurare TheWeb ar trebui să fie definit într-un mod astfel încât să
acest Dispatcher Servlet ar trebui să fie invocat pentru cererile clientului.

Următoarea este definiția dată în [Link] pentru a invoca Servletul Dispatcher al Spring.
[Link]
1 <?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4">
2

3
<servlet>
4
<servlet-name>dispatcher</servlet-name>
5
<clasa-servlet>
6
[Link]
7
</clasă-servlet>
8 <load-on-startup>2</load-on-startup>

9 </servlet>
10

11 <mapare-servlet>

12 <servlet-name>dispatcher</servlet-name>

<url-pattern>*.*</url-pattern>
13
</servlet-mapping>
14

15
</web-app>
16

17

Uitați-vă în definiția tag-ului servlet-mapping. Aceasta spune că indiferent de cererea clientului


(reprezentat prin *.* înseamnă orice URL cu orice extensie), invocă Servletul prin
numele 'dispatcher'. În cazul nostru, servletul „dispatcher” nu este altceva decât o instanță de
tip'[Link]'.
Termenul asociat cu Dispatcher Servlet este Contextul aplicației. O aplicație
Contextul reprezintă de obicei un set de Fiș iere de Configurare care sunt folosite pentru a oferi Configurare

Informații pentru aplicație. Contextul aplicației este un fișier Xml care conține variateBean
Definiț ii. În mod implicit, servletul Dispatcher va încerca să caute un fiș ier după numele <servlet-name>-
[Link] în directorul WEB-INF. Așadar, în cazul nostru, Servletul va căuta un fișier numit
fișierul [Link] în directorul WEB-INF.
Este înțelept uneori să împărțiți toate informațiile de Configurare în mai multe Fișiere de Configurare. În
într-un astfel de caz, trebuie să ne bazăm pe un Servlet Listener numit Context Loader.
[Link].
1
<aplicaț ie-web>
2

3 <ascultător>

4 <listener-class>

5 [Link]

6 </casa-de-audiente>

</listener>
7

8
9 </web-app>

În mod implicit, acest Context Listener va încerca să caute Fișierul de Configurare după nume.
'[Link]'in the'/WEB-INF'directory. But with the help of the
parametru 'contextConfigLocation' locația implicită poate fi suprascrisă. Chiar și mai multe
Fișierele de configurare, fiecare conținând o bucată separată de informație, sunt de asemenea posibile.

[Link]
1
<?xml version="1.0" encoding="UTF-8"?>
2
<web-app version="2.4">
3

4
<ascultător>
5 <listener-class>

6 [Link]

7 </listener-class>

8 </ascultător>

10 <parametru-context>

<param-name>contextConfigLocation</param-name>
11
<param-value>/WEB-INF/[Link], /WEB-INF/[Link]</param-value>
12
</context-param>
13

14
</web-app>
15

The above definition instructs the Framework to look and load for the Configuration Files by
numiți '[Link]' și '[Link]' în directorul WEB-INF.

4) Mapările Handler
Când cererea clientului ajunge la Servletul Dispatcher, Servletul Dispatcher încearcă să găsească
appropriateHandler MappingObject to map between the Request and the Handling Object.
Maparea Handler oferă un mod abstract de a spune cum trebuie să fie mapat URL-ul Clientului la
Manipulatoare. Patru variante concrete ale mapării manipulatoarelor sunt disponibile. Acestea sunt definite după cum urmează
Mapare Handler Url NumeFasole
CommonsPathMap HandlerMapping
NumeleClaseiDeControler MappareHandler
SimpleUrl HandlerMapping
Toate obiectele de mapping pentru handler menționate mai sus sunt reprezentate

asBeanNameUrlHandlerMapping, CommonsPathMapHandlerMapping, ControllerClassNa


meHandlerMappingandSimpleUrlHandlerMappingin
pachetul [Link] respectiv. Să vedem funcționalitățile
și diferențele în utilizare, una câte una.
4.1) BeanNameUrl HandlerMapping

Aceasta este cea mai simplă dintre Mapările Handler și este folosită pentru a mapa Url-ul care vine de la
Clienți direct la Obiectul Bean. În secțiunea următoare, vom vedea că Bean-ul nu este nimic altceva decât o
Obiect de control. De exemplu, considerați că următoarele sunt URL-urile valide într-o aplicație web care
o aplicație client poate solicita.
1 [Link]

3 [Link]

6 [Link]

Rețineți că Url-ul (excluzând Contextul Aplicației) în cazurile de mai sus


sunt 'showAllMails', 'composeMail' și 'deleteMail'. Aceasta înseamnă că Framework-ul va
caută definițiile bean-urilor cu identificatori „showAllMails”, „composeMail” și „deleteMail”. Ia în considerare
următorul fragment de cod XML din fișierul de Configurare,
<fasole>
1

2
<bean name="/[Link]"
3
clasa="[Link]">
4
</bean>
5
6 <bean name="/[Link]"

7 clasa="[Link]">

</bean>
8

9
<bean name="/ [Link]"
10
clasa="[Link]">
11
</bean>
12

13
</beans>
14

15

So, inBeanNameUrl Handler Mapping, the Url of the Client is directly mapped to the Controller. To
activează acest tip de mapare a handler-ului în aplicație, fișierul de configurare ar trebui să aibă un conținut similar

o definiție de genul celui următor,


1 <boabe>

3 …

4 <bean id="beanNameUrl"

5 class="[Link]"/>

6 …

7
</beans>
8

4.2) CommonsPathMap HandlerMapping

Aceasta este o mapare de Handler rar utilizată în care, numele URL-ului la care controlerul are
a fi mapat este specificat direct în fișierul sursă al Controlerului. Având în vedere ce a fost spus anterior

example, if we want to map „showAllMails‟, „composeMail‟ and „deleteMail‟ to Controllers


anumeAratăToateEmailurileController,ComposeMailControllerșiDeleteMailController
atunci informațiile de mapare trebuie specificate sub formă de meta-date în fișierele sursă din interior
comentariile Javadoc. Considerați următoarele definiții de controler,
1
/**
2
*@@ [Link].
3
*PathMap("/[Link]")
4
*/
5
public class ShowAllMailsController {
6
}
7

8 /**

9 *@@ [Link].

10 *CaleMap("/[Link]")

11 */

12 publicclassComposeMailController{

}
13

14
/**
15
*@@ [Link].
16
*PathMap("/[Link]")
17
*/
18
publicclassDeleteMailController {
19 }

20

Atributul trebuie să indice


[Link]. Prin
Definind controlerele în acest mod, este necesar un pas suplimentar de compilare. Adică, pentru a face
disponibilitatea acestui atribut în fișierele de clasă, acestJavaSursa trebuie compilată cu theCommons
Compilerul de atribute care vine împreună cu distribuț ia Spring. Ca ș i înainte, pentru a activa acest tip de
maparea, fișierul de configurare ar trebui să aibă o intrare similară cu aceasta,
1 <boabe>

3 <bean id="metaHandlerMapping"class="[Link].

4 [Link]"/>

6 </beans>

4.3) NumeleClaseiController MappareHandler

În acest tip de mapare a handler-elor, numele controlerului este preluat direct din URL-ul în sine cu
modificări ușoare. De exemplu, să presupunem că cererea Clientului se termină cu Url-ul așa cum este arătat
mai jos

1 [Link]

3 [Link]

Și astfel, avem o definiție a Controller-ului numit ShowController, după cum urmează,

[Link]
1 publicclassShowController{

2 }

De asemenea, fișierul de configurare este creat pentru a activa acest tip de mapare a handler-ului prin efectuarea următoarelor

definiție

1 <boabe>

3 <bean id="controllerClassName" class="[Link].


4 [Link]"/>

6 </beans>

Primul lucru pe care îl face Framework-ul este să parcurgă lista de controale definite în
Fișier de configurare și efectuează aceste acțiuni. Pentru Controller ShowController, apoi Cadru
va elimina șirul Controller și apoi va transforma prima literă în litera mică. În cazul nostru, șirul acum
devine show. Acum, orice Cerere de Client se potrivește cu pattern-ul/show*, atunci
ControlerulShowva fi invocat.

4.4) SimpleUrl HandlerMapping

Aceasta este cea mai simplă dintre toate mapările de handler, deoarece mapează direct cererea clientului la ceva

Obiectul controller. Considerați următorul fișier de configurare,

1
<bean id="simpleUrlMapping"
2
clasa="[Link]">
3

4 <property name="mappings">

5 <props>

6 <prop key="/[Link]">showController</prop>

7 <prop key="/[Link]">composeController</prop>

8 <prop key="/[Link]">deleteController</prop>

</props>
9
</property>
10

11
</bean>
12

Setul de mapări este încapsulat în eticheta 'property' cu fiecare definit într-un element 'prop'
cu atributul 'cheie' fiind Url, valoarea fiind Identificatorul Obiectelor Controlerului. Notă
că boabele pentru identificatorii de mai sus ar trebui să fie definite undeva în fișierul de configurare.
5) Adaptori de manipulare
Este important să înțelegem că Spring Framework este suficient de flexibil pentru a defini ce
Componentele ar trebui să fie delegate cererea odată ce Servletul Dispatcher găsește
Maparea handler-ului adecvat. Acest lucru se realizează sub forma adapterilor de handler. Dacă îți amintești

în secțiunea Flux de lucru Spring, se menționează odată ce Servletul Dispatcher alege


Mapping-ul handler-ului corespunzător, cererea este apoi redirecționată către obiectul Controller care este definit
în fișierul de configurare. Aceasta este cazul implicit. Și acest lucru se întâmplă pentru că Handlerul Implicit
Adapterul este un handler de controler simplu (reprezentat
[Link]), care va
efectuează sarcina de a trimite cererea de la Dispatcher la obiectul Controller.
Alte tipuri de adaptoare de handler sunt Controlerul de tip Aruncare

HandlerAdapter([Link]
pter) ș i SimpleServlet
HandlerAdapter([Link]).
HandlerAdapter-ul TheThrowaway Controller, de exemplu, transportă cererea de la Dispatcher.
Servlet către Controllerul de Aruncare (discutat mai târziu în secțiunea despre Controlere) și Simplu
Adaptorul Handler Servlet va transmite cererea de la Servletul Dispatcher la un Servlet
astfel făcând ca metoda [Link]() să fie invocată.
Dacă, de exemplu, nu doriți adaptorul de gestionare a controlerului defaultSimple, atunci trebuie să
redefine fișierul de configurare cu informații de același tip ca cele prezentate mai jos,
1 <bean id="throwawayHandler" class="[Link].

2 ThrowawayControllerHandlerAdapter"/>

4 sau

6 <bean id="throwawayHandler" class="[Link].

SimpleServletHandlerAdapter"/>
7

De asemenea, este posibil să scrii un Adapter de Handler personalizat implementând

theHandlerAdapterinterface available in [Link].


6) Controler
Controlerele sunt componente care sunt apelate de Servletul Dispatcher pentru a efectua orice fel de
Logica de afaceri. Distribuția Spring vine deja cu o varietate de componente Controller fiecare
îndeplinind un scop specific. Toate componentele Controller în Spring implementează

interfața [Link]. Această secțiune a avut ca scop să


oferiți Ctrlerele utilizate frecvent în cadrul Spring Framework. Următoarele sunt Controller
Componente disponibile în Distribuția Spring.
ControllerDeFormularSimplu
AbstractController
AbstractCommandController
CancellableFormController
AbstractCommandController
MultiActionController
Controller de Vizualizare Parametrizabil
ServletForwardingController
ServletWrappingController
UrlFilenameViewController
Secțiunea următoare acoperă doar
onAbstractController, AbstractCommandController, SimpleFormController ș i Can
controllerulFormeiCelulareîn detaliu.

6.1) Controler abstract

Dacă cineva doreș te să implementeze un Component de Control Personalizat direct de la zero, atunci în loc de
implementarea interfeței Controller, extinderea AbstractController poate fi preferată deoarece aceasta

oferă suportul de bază pentru metodele GET și POST. Se recomandă ca doar pentru simplu
scop, acest tip de extensii ar trebui folosit. Scopul poate fi la fel de simplu ca returnarea unei
resursa pentru Client la cerere fără a fi necesar să examineze Parametrii Cererii sau
alte lucruri. De exemplu, considerați următorul cod,
[Link]
1 publicclassMySimpleController extindeAbstractController{

3 public void handleRequestInternal(HttpServletRequest request,

4 HttpServletResponse răspuns){
5

6 returnează un nou model ș i o vedere (myView);

8 }

}
9

Rețineți că Dispatcher Servlet va apela metoda handleRequest() prin transmiterea cererii


și parametrii răspunsului. Implementarea returnează pur și simplu aModelAndView (discutat mai târziu)
obiect cu myView fiind numele logic al vederii. Există Componente numite View
Resolvers ale căror sarcini sunt de a oferi o asociere între Numele Viziunii Logice și
Locația fizică actuală a resursei de vizualizare. Deocamdată, presupuneți că într-un fel,
myView este mapat la [Link]. Așadar, de fiecare dată când Servletul Dispatcher invocă acesta

Obiectul MySimpleController, în cele din urmă [Link] va fi redat înapoi clientului.

6.2) Controler Abstract de Comenzi

Conceptul de Controler de Comandă intră în discuție atunci când Logica de Afaceri depinde de
valorile care sunt trimise de utilizator. În loc să depindă de Servlet Api pentru a obține
Valorile parametrilor de cerere și alte obiecte de sesiune, ne putem baza pe această comandă abstractă
Controler pentru a prelua acele informaț ii. De exemplu, luaț i în considerare următorul fragment de cod.
care are o logică de afaceri simplă care spune că, în funcție de existența numelui de utilizator, afișează
formulã[Link]
[Link]
1 public class MySimpleController extinde AbstractCommandController {

3 publicMySimpleController(){

4 setCommandClass([Link]);

5 }

7 publicvoidhandle(HttpServletRequest request, HttpServletResponse response,

Obiect comanda){
8

9
10 UserInfo userInfo = (UserInfo)comand;

11 if(exists([Link]){

returnează noulModelȘ iVedere("succes");


12
}else{
13
returneazăModelulNouȘ iViziunea("eș ec");
14
}
15
}
16

17
privatebooleanexits(String numeutilizator){
18 // Unele logici aici.

19 }

20 }

21

Rețineți că Parametrii Clientului (nume de utilizator, în acest caz) sunt encapsulați într-o clasă simplă
informațiile utilizatorului apelat, care sunt date mai jos. Valoarea dată de Client pentru câmpul numelui de utilizator va fi

mapează direct la proprietatea numită username din UserInfo. În Constructorul de


în clasa MySimpleController, am menționat numele Clasei de Comandă care este
va reține Parametrii Cererii Clientului apelând metoda thesetCommandClass(). De asemenea
notați că în cazul Controlerului de Comandă, metoda care va fi apelată de Servletul Dispatcher
va trata() care este transmis cu obiectul Command în afară de Request și
Obiecte de răspuns.
[Link]
1 publicclassUserInfo{

3 privateString numeUtilizator;

4 // Obtine si seteaza aici.

6 }
6.3) Controler simplu de formulare

Solicitarea utilizatorului de a completa un formular care conține diverse informații și trimiterea formularului în mod normal

se întâmplă în aproape fiecare aplicație web. Controlerul Simplu de Formulare este folosit exact pentru asta

scop. Să ne dăm un exemplu simplu pentru a ilustra acest lucru. Să presupunem că, la cererea clientului, o pagină
se numește [Link] și este redat clientului conținând câmpurile empName, empAge și empSalary.
La finalizarea cu succes, o pagină Jsp numită [Link] este afișată înapoi clientului.
Acum să vedem cum putem folosi Controlerul de Formulare Simple pentru a obține acest tip
funcționalitate.
Primul lucru este că, pentru a colecta valorile de intrare ale clientului, este necesar un obiect Command care conține

getteri și setteri trebuie definiți. Urmând scheletul clasei numită EmpInfo.


[Link]
1 publicclassEmpInfo{

3 privateString empName;

4 privateintempAge;

5 private double empSalary;

7 // Getters ș i setters pentru proprietăț ile de mai sus.

8
}
9

Următorul pas este să scrieți o clasă care extinde SimpleFormController. Dar de data aceasta,
metoda thedoSubmitAction() ar trebui să fie suprascrisă. Aceasta este metoda care va fi apelată când
Clientul trimite formularul. Următoarea este definiția clasei Controller.
[Link]
1 publicclassEmpFormController extendsSimpleFormController{

3 publicEmpFormController(){

4 setCommandClass([Link]);

5 }
6

7 publicvoiddoSubmitAction(Object command){

8 EmpInfo info = (EmpInfo)comand;

procesează(info);
9
}
10

11
privat void procesare(EmpInfo info) {
12
//Executaț i câteva procese cu acest obiect.
13
}
14
}
15

16

Așa cum am menționat anterior, formularul care colectează informații de la Client este [Link] și
după trimiterea cu succes, pagina [Link] ar trebui să fie afişată. Aceste informaţii sunt

externalizat din clasa Controller și este menținut în Fișierul de Configurare, ca urmează,


1
<bean id = "empForm" class="EmpFormController">
2

3 <property name="formView">

4 <value>empInfo</value>

5 </property>

7 <property name="successView">

8 <value>empSuccess</value>

</property>
9

10
</bean>
11
Observați cele două nume de proprietate 'formView' și 'successView' împreună cu

valorile 'empInfo' ș i 'empSuccess'. Aceste proprietăț i reprezintă Vederea iniț ială care va fi afiș ată
și vizualizarea finală (după trimiterea cu succes a formularului) să fie redată Clientului.

6.4) FormController anulabil

Dacă observi cu atenție, odată cu implementarea Controlerului de Formulare Simple, există modalități de a oferi
Viziunea inițială și cea de succes pentru clienți. Dar ce se întâmplă când formularul este anulat de
Utilizatorul? Cine va procesa operațiunea de anulare a formularului?

Problemele de mai sus pot fi rezolvate imediat cu utilizarea Controlerului de Formulare Cancelabil.
The good thing is that Cancellable FormController extendsSimpleForm Controllerso that all the
funcționalitățile sunt vizibile și pentru acest Controler. Să presupunem că utilizatorul apasă butonul de anulare,
Frameworkul va verifica în parametrul Request dacă există o cheie cu numele 'cancelParamKey'. Dacă este
așadar, atunci va apela metoda onCancel(). Considerați următoarea definiție,
[Link]
1 publicclassMyCompleteFormController extendsCancellableFormController{

3 publicModelAndView peAnulare(){

4 returneazănewModelAndView("cancelView");

5 }

}
6

7) Model și Vedere
Modelul ș i Viziunea (reprezentate de)
[Link]) este returnat de Controler
obiect înapoi la Dispatcher Servlet. Această clasă este doar o clasă Container pentru a reține Modelul și
informațiile Vizualizare. Obiectul Mod reprezintă o bucată de informație care poate fi folosită de către
Vedere pentru a afișa informațiile. Ambele aceste obiecte sunt date cu un grad înalt de abstractizare în
Framework-ul Spring.
Orice fel de tehnologie View ([Link]) poate fi integrată
în cadrul Cadru cu ușurință. De exemplu, Excel, Jasper Reports, Pdf, Xslt, Free Marker, Html,
Module, Viteza etc. sunt cadrele acceptate până acum. Obiectul Model (reprezentat
[Link]) este mentinut intern ca o hartă pentru stocarea
Informații.
Următoarele sunt modalitățile de a construi modelul și obiectul View.

1 View pdfView = ...;

2 Map modelData = newHashMap();

4 ModelAndView mv1 = newModelAndView(pdfView, modelData);

Ceea ce este deasupra construiește un obiect ModelAndView prin trecerea efectivă a obiectului View împreună cu

Obiect model. Acum considerați următorul cod,


1 ModelAndView mv1 = newModelAndView("myView", someData);

Observați, în exemplul de mai sus, un șir cu „myView” este trecut pentru View. Această modalitate de specificare

aView este numit aLogical View. Aceasta înseamnă că myView poate indica fie către ceva numit
[Link] sau [Link] sau [Link]. Locația Fizică a Vederii corespunzătoare
Viziunea logică poate fi configurabilă în fiș ierul de configurare.
8) Resolver de Vizualizare

În secțiunea anterioară, am vorbit despre Viziunea Logică și Locația Viziunii Fizice pentru
Viziunea logică. Asocierea între numele logic și locația viziunii fizice este gestionată.
de obiectul View Resolver. Fără nicio surpriză, Spring vine cu un set de Built-In Spring
Resolveri. Este chiar posibil să scrii Resolutori de Vedere Personalizată implementând
interfața [Link]. Următoarele sunt disponibile
Vizualizați rezolvatoarele în distribuția Spring.

BeanNameViewResolver
FreeMarkerViewResolver
InternalResourceViewResolver
JasperReportsViewResolver
ResourceBundleViewResolver
UrlBasedViewResolver
VelocityLayoutViewResolver
VelocityViewResolver
XmlViewResolver
XsltViewResolver
Secțiunea următoare se concentrează doar pe Resolverul de Vederi Intern și Numele Bean-ului
Rezolvator de vizualizări în detaliu.

8.1) Resolver de Vedere a Resurselor Interne

Resolverul de vizualizare a resurselor interne va încerca să mapeze numele logic al resursei așa cum este returnat

de către obiectul Controller sub forma obiectului ModelAndView către locația fizică a Viziunii. Pentru
example, consider the following class definition which returns different ModelAndView objects.
[Link]
1
publicclassMyController {
2

3
public void handle() {
4 dacă(condition1()){

5 returnează un nou model ș i vedere (myView1);

6 }else dacă(condition2()){

7 returnează unModelNouȘ iViziune("myView2");

8 }

returnează un nou model ș i vedere("myView3");


9
}
10
}
11

Să presupunem că, dacă cererea clientului satisface condition1(), atunci vizualizarea [Link] care este

prezent în folderul /WEB-INF ar trebui să fie afișat și pentru cererile clientului


satisfyingcondition2() și celălalt, [Link] și [Link] ar trebui să fie
afișat.
Pentru ca acest lucru să se întâmple, următoarea intrare trebuie făcută în fișierul de configurare,

1 <bean id="viewResolver"class="[Link].

2 InternalResourceViewResolver

4 <property name="prefix"><value>/WEB-INF/</value></property>
5 <property name="suffix"><value>.jsp</value></property>

7 </bean>

Acesta este modul în care Resolverul de Vizualizare a Resurselor Interne va map localiza Numele Vizualizării Logice la fizic

Locație. Atunci când numele vederii logice este myView1, atunci va construi un nume de vedere care este
sumarea prefixului + Numele Vederii Logice + sufixul, care va fi /WEB-
INF/[Link]. Aceeași situație este pentru [Link] și [Link].
8.2) Resolver de viziune bazat pe numele de bean

One of the dis-advantage of usingInternal Resource View Resolveris that the name of the View
fișierul (indiferent dacă este un fișier Jsp sau un fișier Pdf) trebuie să fie prezent în contextul aplicației web.

Fișierele de vizualizare generate dinamic s-ar putea să nu fie posibile. În acest caz, putem folosi numeleBean
Rezolvator de vizualizare care va genera dinamic Vizualizarea în formate Pdf sau Excel.
De exemplu, dacă obiectul ModelAndView reprezintă o Viziune numită „pdf” așa cum este arătat în
următorul fragment,
1 returneazăModelȘ iVedere("pdf")

Și, dacă vrem să generăm fișierul Pdf, atunci ar trebui să fi definit informațiile de configurare
în fișierul următor,

1 <bean id="beanNameResolver"

2 class="[Link]"/>

Codul de mai sus configurează Framework-ul pentru a utiliza BeanNameViewResolver. Deoarece numele logic
„pdf” trebuie să se rezolve la un nume de Bean, ar trebui să definim o intrare similară cu următoarea în
Fișier de Configurație. Rețineți că, în următoarea MyPdfGenerator poate fi sub-clasa
[Link] generating
Fișierul Pdf.
1 <bean id = " pdf" class="MyPdfGenerator"/>

9) Aplicație de probă
9.1) Introducere

Secțiunea finală a acestui articol detaliază o aplicație simplă de contact care are prevederi pentru crearea,
Ştergerea şi listarea obiectelor de contact. Scopul acestei aplicaţii este de a arăta diferitele utilizări ale
Componentele controller-ului, cum ar fi Controller-ul abstract, Controller-ul abstract de comenzi și Controller-ul de formular

împreună cu Informații de Configurare.

9.2) Fișierul Descriptor Web

După cum s-a menționat anterior, deoarece Dispatcher Servlet acționează ca un Interceptor pentru Client
Solicitare, o intrare pentru aceasta trebuie menționată în fișierul [Link]. Următorul este un fragment de cod
pentru același lucru,

[Link]
1 [Link]

3 <?xml version="1.0" encoding="UTF-8"?>

4<web-app version="2.4"xmlns="[Link]

5 xmlns:xsi="[Link]

xsi:schemaLocation="[Link]
6

7
[Link]
8

9
<servlet>
10
<servlet-name>dispatcher</servlet-name>
11
<clasa-servlet>
12
[Link]
13
</clasă-servlet>
14 <load-on-startup>2</load-on-startup>

15 </servlet>

16

17 <mapare-servlet>

18 <servlet-name>dispatcher</servlet-name>

<url-pattern>*.htm</url-pattern>
19
20 </mapare-servlet>

21

22 </web-app>

23

24

9.3) Fișier de configurare

Următoarele reprezintă Fișierul de Configurare pentru a reține diverse piese de Configurare


Information. The first thing to note is the type of Handler Mapping configured. In our case, it is the
Maparea handler-ului Url al numelui bean, ceea ce înseamnă că Url-ul clientului este strâns legat de
numele clasei Bean (Controler). Deoarece toate fișierele Jsp sunt întreținute în
directorul '/WEB/contacts' proprietatea 'prefix' se îndreaptă către '/WEB/contacts'.
Pentru operațiunile de Creare, Ștergere și Listare a Contactelor, există trei componente diferite de control.
au fost definite. Ele
areCreateContactController,DeleteContactControllerandListContactsControlle
respectiv.
[Link]
1 <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"


2
"[Link]
3
<boabe>
4

5
<bean id="beanNameUrlMapping" class="[Link].
6
MapareUrlBeanNameHandler"/>
7

8
<bean name = "/[Link]" class="[Link].
9 [Link]

10

11 <property name="formView">
12 <value>CreateContact</value>

13 </proprietate>

<property name="successView">
14
<value>ContactCreated</value>
15
</proprietate>
16

17
</bean>
18

19
<bean name = "/[Link]" class= "[Link].
20
[Link]
21 </bean>

22

23 <bean name = "/[Link]"class= "[Link].

24 [Link]

25 </bean>

26
<bean id="viewResolver" class="[Link].
27
InternalResourceViewResolver
28
<property name="prefix"value="/WEB-INF/contacts/"/>
29
<property name="suffix"value=".jsp"/>
30
</bbean>
31

32
</beans>
33

34

35
9.4) CreareContact și Fișiere Jsp ContactCreat

Următorul este codul pentru fișierul [Link].

[Link]
1
<html>
2
<head>
3
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4

5
<title>Create a Contact</title>
6
</cap>
7 <body>

9 <h1>Creează un Contact</h1>

10

11 <form name = "CreareContact" method = "get">

12 <input type="text" name="firstname"/>

<input type = "text" name = "lastname"/>


13
<br>
14
<input type="submit"name = "Create Contact"value = "Create Contact"/>
15
</form>
16

17
</body>
18
</html>
19

Rețineți că, deoarece aceasta este pagina care va fi afișată utilizatorului inițial, în fișierul de configurare,
proprietatea 'formView' este indicată către 'CreateContact'. Următorul este codul pentru

[Link]. Deoarece aceasta este Vista care va fi afișată după trimiterea formularului,
property'successView'is made to point to'ContactCreated'.
[Link]
1
<html>
2
<cap>
3 <meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8">

4 <title>Contact is Created</title>

5 </head>

7 <corp>

8
<h1>Contactul a fost creat cu succes</h1>
9

10
</body>
11
</html>
12

9.5) [Link]

Următoarea este lista completă pentru fișierul [Link]. Rețineți că acest fișier Jsp este mapat
controllertodeletecontactinfișierul de configurare.
[Link]
1
<html>
2 <head>

3 <meta http-equiv="Content-Type"content="text/html; charset=UTF-8">

5 <title>Delete Contact</title>

6 </head>

<corp>
7

8
<h1>Ș terge Contact</h1>
9
10

11 <form name = "DeleteContact" method = "get">

12 <input type="text" name="firstname"/>

<br>
13
<input type="submit"name = "DeleteContact"value = "Delete Contact"/>
14
</form>
15

16
</body>
17
</html>
18

9.6) [Link]

Această pagină este pentru a lista toate Contactele existente care au fost create anterior. Trebuie menționat că

Obiectul model care conține toate informațiile de contact sub formă de listă este disponibil în
ListContactsController. Modelul informației din Controller după ce a fost legat la
Scope-ul cererii este scos din vizualizare sub formă de limbaj de expresie.
Următoarea este lista pentru [Link]

[Link]
1
<html>
2 <head>

3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

5 <title>Showing All Contacts</title>

6 </cap>

<body>
7

8
<h1>Arătând Toate Contactele</h1>
9

10
11 <p> Următoarele sunt Contactele create </p>

12

13 <c:forEach items = "${allContacts}" var="contact">

${[Link]}<br>
14
${[Link]}<br>
15
</c:forEach>
16

17
</body>
18
</html>
19

20

9.7) [Link]

Următoarea este structura clasei pentru [Link] pentru încapsularea proprietăților firstname și
nume de familie.

[Link]
1
[Link];
2

3 publicclassContact {

5 privateString firstName;

6 privateString lastName;

8 publicContact() {

}
9

10
publicContact(String firstName, String lastName){
11
12 [Link] = firstName;

13 [Link] = lastName;

}
14

15
publicString getFirstName() {
16
returnfirstName;
17
}
18

19
publicvoidsetFirstName(String firstName) {
20
[Link] = firstName;
21 }

22

23 publicString getLastName() {

24 returnlastName;

25 }

26
publicvoidsetLastName(String lastName) {
27
[Link] = lastName;
28
}
29

30
publicinthashCode() {
31
[Link]() + [Link]();
32
}
33

34
public boolean equals(Object object) {
35 dacă (obiectul este o instanț ă de Contact){

36 Contact al doilea = (Contact)obiect;


37 return([Link]([Link]()) &&

38 [Link]([Link]()));

}
39
returnfalse;
40
}
41

42
publicString toString(){
43
[Prenume =
44
}
45 }

46

47

48

9.8) [Link]

Această clasă de serviciu simplă oferă funcționalități pentru crearea, ștergerea și listarea Contactului
informații. Toate componentele Controlerului folosesc această clasă pentru a-și atinge respectiv.
funcționalități.

[Link]
[Link];
1

2
import [Link].*;
3

4
publicclassContactService {
5

6
privatestaticMap contacte = newHashMap();
7

8
publicContactService() {
9 }

10

11 publicstaticContact creaContact(Contact contact){

[Link](newInteger([Link]()), contact);
12
returnează contactul;
13
}
14

15
publicstaticContact creaContact(String prenume, String numeDeFamilie){
16
returncreateContact(newContact(firstName, lastName));
17
}
18

19 publicstaticbooleandeleteContact(String firstName){

20 Iterator iterator = [Link]().iterator();

21 în timp ce([Link]()){

22 [Link] entry = ([Link])[Link]();

Contact contact = (Contact)[Link]();


23
if([Link]().equals(firstName)){
24
[Link](newInteger([Link]()));
25
returntrue;
26
}
27
}
28
returnfalse;
29 }

30

31 publicstaticList listContacts(){

32 returntoList(contacts);

33 }
34

35 privatestaticList toList(Map contacts){

36 List contactList = newArrayList();

Iterator iterator = [Link]().iterator();


37
în timp ce([Link]()){
38
[Link] entry = ([Link])[Link]();
39
Contact contact = (Contact)[Link]();
40
[Link](contact);
41
}
42 returneazăListaContactelor;

43 }

44 }

45

46

47

48

9.9) Clase Controller

Următoarea este lista pentru Controlerul CreateContact. Rețineți că, dat fiind informațiile despre model pentru

crearea unui contact (pentru care Clientul furnizează parametrii prenume și nume de familie) este
Clasa Contact, apelul a fost efectuat în Constructor pentru a seta setCommandClass() prin trecerea clasei

numele claseiContact.
[Link]
1 [Link]. contacte;

3 [Link];

5 publicclassCreateContactController extinsSimpleFormController{
6

7 publicCreateContactController() {

8 setCommandClass([Link]);

}
9

10
publicvoiddoSubmitAction(Object command){
11
Contact contact = (Contact)comandă;
12
[Link]ț iContact(contact);
13
}
14
}
15

Rețineți că metoda doSubmitAction() nu returnează nimic deoarece următoarea Viziune Logicală la


va fi afișat va fi preluat din fișierul de Configurare care este reprezentat de proprietatea
apelat 'successView'.
Următoarele două clase sunt componentele controler pentru ștergerea și listarea contactelor. Observați că în
cazul operațiunii de ștergere, o pagină Jsp ([Link]) conținând informații care spun
că Contactul a fost șters va fi afișat. Dar deoarece pentru operațiunea de listare a contactelor,
informațiile modelului care conțin o colecție de obiecte de contact trebuie transmise de la controller la
vizualizarea și același lucru este realizat în constructorul cu 3 argumente pentru ModelAndView.

[Link]
1 [Link];

3 [Link].*;

4 [Link];

5 import [Link];

6 [Link];

7
publicclassDeleteContactController extendsAbstractCommandController{
8

9
10 publicDeleteContactController(){

11 setCommandClass([Link]);

}
12

13
publicModelAndView handle(HttpServletRequest request,
14
HttpServletResponse răspuns, Obiect comanda, BindException erori)
15
throwsException {
16

17
Contact contact = (Contact)command;
18
[Link]([Link]());
19 returnareNouModelȘ iVedere("ContactSters");

20

21 }

22 }

23

Iată listarea pentru [Link].

[Link]
[Link];
1

2
importaț i [Link];
3
import [Link].*;
4 [Link];

5 [Link];

6
publicclassListContactsController se extinde dinAbstractController{
7

8
publicListContactsController() {
9
}
10

11
publicModelAndView handleRequestInternal(HttpServletRequest request,
12
HttpServletResponse răspuns) aruncă Excepț ie{
13

14
Listă allContacts = [Link]();
15 returnează noul model ș i vedere ("ListContacts", "allContacts", allContacts);

16

17 }

18 }

19

20

21

S-ar putea să vă placă și