1 / 27

Framework-uri Java

Framework-uri Java. Spring. Concepte.

spencer
Télécharger la présentation

Framework-uri Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Framework-uri Java Spring

  2. Concepte Inversion of Control (Injectia de dependinte). Separarea implementarii unei clase de constructia obiectelor din clasele dependente. Sarcina construirii obiectelor dependente este preluata de frameworkul Spring. Obiectele dependente sunt "injectate" automat in obiectul creat. Programarea orientata pe aspecte (Aspect Oriented Programing). Consta in separarea serviciilor intr-o aplicatie, in eliminarea din componentele unei aplicatii a codului care nu are legatura directa cu functionalitatea componentei.

  3. Definirea, configurarea si utilizarea bean-urilor În Spring gestionarea asocierilor dintre componete se realizeaza cu ajutorul unor containere de tip BeanFactory si ApplicationContext O clasa BeanFactoryeste o clasa a carei responsabilitate este sa creeze si sa elimine beanuri Implementari: org.springframework.beans.factory.xml.XmlBeanFactory care încarca bean-urile pe baza unor definitii continute într-un fisier XML Constructor: public XmlBeanFactory(Resource resource) throws BeansException; resource - un flux de citire dintr-un fisier XML Exemplu: BeanFactory factory = new XmlBeanFactory(new FileInputStream("beans.xml"));

  4. Pentru a obtine un bean dintr-un BeanFactory, se apeleazametodagetBean(), transmitându-i ca parametrunumele bean-uluidorit: ClasaBean myBean = (ClasaBean) factory.getBean("idBean"); ApplicationContext • au functionalitate mai larga: • ApplicationContextfurnizeaza o metoda de tratarea mesajelor text, incluzândaicisuportpentruinternationalizareaacestora; • ApplicationContextfurnizeaza un mod generic de încarcare a resurselor, ca de exemplupentru fisierele imagine; • ApplicationContextnotificaevenimentecatreobiecteleevent listener înregistrate.

  5. Implementari: • ClassPathXmlApplicationContex – încarca definitiile bean-urilor în context dintr-un fisier XML localizat undeva în class path; • FileSystemXmlApplicationContext - încarca definitiile bean-urilor în context dintr-un fisier XML localizat undeva în sistemul de fisiere; • XmlWebApplicationContext - încarca definitiile bean-urilor în context dintr-un fisier XML localizat într-o aplicatie web • Exemplu: ApplicationContext context = new FileSystemXmlApplicationContext("c:/fisier.xml");  ApplicationContext context = new ClassPathXmlApplicationContext("fisier.xml");

  6. Configurarea unui bean <beans> <bean proprietati> configurare </bean> </beans> Adaugare bean <bean id=”idBean” class=”pachet.ClasaBean” singleton=”true/false”/> id - identificatorul de bean class - clasa prin care este implementat beanul singleton - daca este sau nu o clasa cu unica instanta Initializare si distrugere <bean id=”idBean” class=” pachet.ClasaBean” init-metod=”setup” destroy-method=”destroy”/> Sunt specificate metodele executate la crearea si distrugerea beanului

  7. Injectarea dependintelor <bean id=”idBean” class=”pachet.ClasaBean”> <property name=”nume”> <value>Nume si prenume</value> </property> </bean> <bean id=” idBean” class=” pachet.ClasaBean”> <property name=”adresa”> <ref bean=”idAdresa”/> </property> </bean> <bean id=”idAdresa” class=” pachet.Adresa”/>

  8. Colectii XMMTip de colectie <list> java.util.List, array <set> java.util.Set <map> java.util.Map <props> java.util.Properties Injectarea dependintelor prin constructor <bean id=”idPersoana” class=”Persoana”> <constructor-arg> <value>Nume si prenume</value> <ref bean=”idAdresa”/> </constructor-arg> </bean>

  9. Spring in aplicatii Web Este utilizat pentru popularea automată a obiectelor din parametrii request Utilizeaza o arhitectura MVC

  10. Structura unei aplicatii Web-Spring DispatcherServlet – În centrul MVC Spring se afla DispatcherServlet, un servlet ce functioneaza ca un front-controller pentru Spring. Ca orice alt front-controller, DispatcherServlet trebuie configurat prin fisiere xml (dispatcher-servlet.xml, web.xml) ale aplicatiei web Handler Mapping - Identificarea resursei destinate tratarii cererii (un Controller). Legatura Url - Controller se face prin doua metode: BeanNameUrlHandlerMapping - un url de forma http://masina:port/.../document va fi automat tratat de un controller numit document SimpleUrlHandlerMapping - un url de cerere va fi tratat de un controller al carui nume va fi asociat cererii prin fisierul de configurare dispatcher-servlet.xml Controller – În Spring MVC, un controller este o clasa ce este responsabila pentru manipularea obiectului de tip request si pentru procesarea acestuia. Un controller nu este cu mult diferit de un servlet, semnatura metodei controller-ului handleRequest() nefiind cu mult diferita de metoda service() a unui servlet.

  11. Arhitectura unei aplicatii Web

  12. Fluxul de operatii Spring 1. Clientul trimite o cerere catre servletul central. Acesta este poarta de intrare in aplicatie. Clasa corespunzatoare servletului central: org.springframework.web.servlet.DispatcherServlet 2. Servletul central, executa cererea facuta printr-o instant a unei clasecare implementeaza interfata org.springframework.web.servlet.mvc.Controller. Identificarea controller-ului care executa cererea se face prin fisierul de configurare al servletului central, astfel: <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="numeCerere.htm">numeController</prop> </props> </property> </bean> <bean id="numeController" class="ClasaController"/>

  13. 3. Controller-ul trateaza cererea putand apela la alte resurse din stratul de logica/persistenta 4,5,6. Controller-ul creaza un raspuns care sa includa atat informatii privind rezultatul propriu zis (obiecte Map din java.util) cat si informatii privind formularul de raspuns (obiecte View). Acest lucru se poate realiza printr-o instant a clasei ModelAndView. Clasa ModelAndView este dotata cu metode care sa permita includerea acestor informatii. public ModelAndView(); public ModelAndView(String viewName);// numele logic al view-ului (formularului) public ModelAndView(String viewName, Map model);//formular+date public void setViewName(String viewName); public ModelAndViewaddObject(String attributeName, Object attributeValue);//adauga elemente in structura Map asociata Elementele din Map sunt identificate in formular prin elemente de sintaxa ale tag-urilor Spring sau ca expresii html simple: ${element}

  14. Metodele din clasa Controller care trateaza cererea sunt identificate diferit, in functie de tipul Controller-ului. A. Controller-e obtinute prin implementarea interfetei Controller. Controller-ul trateaza o singura cerere, cererea fiind tratata de metoda handleRequest. public class ClasaController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest hsr, HttpServletResponse hsr1) throws Exception { //Tratare cerere } } B. MultiActionController. Controller-e pentru tratarea cererilor multiple. Metodele care trateaza pot avea forma: public ModelAndView numeCerere(HttpServletRequest request, HttpServletResponse response) throws Exception { ... } public ModelAndView numeCerere(HttpServletRequest request, HttpServletResponse response, Object command) throws Exception { ... }

  15. Obiectul command este identificat in formular prin proprietatea commandName a tag-ului form din biblioteca de tag-uri Spring ViewResolver – Scopul unui ViewResolver este sa ia numele unui view întors într-un obiect ModelAndView si sa-l mapeze la un view fizic

  16. Ciclul de viata al unei cereri Spring

  17. Validarea datelor Validarea programatica se face prin interfata Validator: public interface Validator; Metode abstracte de implementat: boolean supports(Class<?> clazz); Test daca validatorul poate valida anumite obiecte. void validate(Object target,Errors errors); target - obiectul validat errors - lista de erori

  18. Interfața Errors Memorează și prezintă informații despre erori și entitățile asociate lor. Erorile sunt de două tipuri: - relative la obiectul însuși (erori ce țin de restricțiile impuse asupra obiectului) - validari programatice - erori privind invaliditatea unor valori ale proprietăților (tipuri greșite, absența valorilor etc.) - validari de tip Inregistrarea erorilor se face prin metode ale interfetei. Inregistrarea erorilor programatice generale, care nu sunt asociate unei proprietati (camp) : void reject(String errorCode) void reject(String errorCode, String defaultMessage) void reject(String errorCode,Object[] errorArgs, String defaultMessage)

  19. Inregistrarea erorilor programatice asociate cu proprietăți: void rejectValue(String field,String errorCode) void rejectValue(String field, String errorCode, String defaultMessage) Alte metode Errors: int getErrorCount() List<FieldError> getFieldErrors() boolean hasFieldErrors(String field) List<FieldError> getFieldErrors(String field) Validarea erorilor prin clasa utilitară ValidationUtils: public static void rejectIfEmpty(Errors errors,String field, String errorCode) public static void rejectIfEmpty(Errors errors,String field, String errorCode,String defaultMessage)

  20. public static void rejectIfEmpty(Errors errors,String field,String errorCode,Object[] errorArgs,String defaultMessage) public static void rejectIfEmptyOrWhitespace(Errors errors, String field,String errorCode) Invocarea validatorilor se realizeaza la nivelul controller-ului prin metoda invokeValidator a clasei utilitare ValidationUtils: public static void invokeValidator(Validator validator,Object obj, Errors errors); // validator - instanta Validator creata, obj - obiectul pentru care se creaza validatorul, errors - structura prin care se memoreaza lista de erori identificate de validator

  21. Legarea erorilor - interfața BindingResult Interfața BindingResult este o extensie a interfeței Errors reprezentând conceptul de eroare legată. O eroare legata este asociata unui bean si unei cereri. Obiectele BindingResult sunt obținute prin obiecte DataBinder ca rezultat al legarii (asocierii), prin metoda getBindingResult(). Binding-ul in MultiActionController Se realizeaza prin suprascrierea metodei bind din MultiActionController. Etape: 1. Crearea binder-ului protected ServletRequestDataBinder createBinder(HttpServletRequest request, Object command) throws Exception; //metoda MultiActionControler care creaza un binder specializat in a face legaturi intre request si beanul specificat

  22. 2. Crearea efectiva a legaturii (asocierii) prin invocarea metodei bind din binder. protected void bind(HttpServletRequest request,Object command) throws Exception; // metoda DataBinder care leaga parametrii request de obiectul bean specificat O suprascriere standard pentru metoda bind din MultiActionController: @Override protected void bind(HttpServletRequest request, Object command) throws Exception { ServletRequestDataBinder binder = createBinder(request,command); binder.bind(request); result= binder.getBindingResult(); } result este referinta la obiectul BindingResult obtinut prin bind. Se declara in clasa MultiActionController

  23. Inregistrarea si utilizarea validatorilor Inregistrarea se realizeaza in dispatcher-servlet.xml prin injectia de dependinte (tag-urile property ale controller-ului) <bean id="numeValidator" class="ClasaValidator"/> <bean id="numeController" class="ClasaController"> <property name="validators" ref="numeValidator"/> </bean> Utilizarea se realizeaza prin invocarea metodei getValidators() a controller-ului. Cod standard pentru invocarea validarilor pentru un obiect: public void validate(Object command) {// command este obiectul validat Validator[] validators = getValidators(); if (validators != null) { for(int index = 0; index < validators.length;index++) { Validator validator = validators[index]; if(((ClasaValidator)validator).supports(command.getClass())) { ValidationUtils.invokeValidator (validators[index],command,result); } } } }

  24. Validarea la nivelul metodelor de tratare a cererii din controller private BindingResult result; ... public ModelAndView numeCerere(HttpServletRequest rq, HttpServletResponse rs, ClasaBean command) throws Exception { this.validate(command); if (result.hasErrors()) { List<FieldError> erori = result.getFieldErrors(); StringBuilder eroriNo=new StringBuilder(erori.size()+" Erori introducere:"); for (FieldError e : erori) { rq.setAttribute(e.getField(), e.getDefaultMessage()); eroriNo.append(e.getField()).append(" "); } rq.setAttribute("mesaj", eroriNo.toString()); ... } ...

  25. Java Spring Tag Api – elemente de baza Tag-ul form <f:form action=“numeCerere.htm" commandName=“obiect"> … </f:form> action – numele de cerere commandName – numeleobiectului bean prelucrat in form (implicit: command) Tag-ul select <f:select path=“proprietate"> // tag options sautaguri option </f:select> path – face legatura cu o proprietate care vapreluarezultatulselectiei Tag-ul options <f:options items=“listaItemi" itemLabel=“eticheta" itemValue=“valoare"/> listaItemieste o lista cu informatii legate de optiuni, etichetaesteinformatia din lista care va fi afisata, valoareestevaloarea care va fi preluataprinselectie

  26. tagul input <f:input path="proprietate"/> JSTL - tagul forEach <c:forEach var="item" items="${lista}"> <!-- Afisare elemente --> </c:forEach>

More Related