1 / 52

Struts Application Framework

Мартин Чиллев. Георги Денчев. Софтуерен инженер Vereo Technologies. Софтуерен инженер Codix. www.vereo.bg. www.codix.bg. Struts Application Framework. Съдържание. Какво представлява Struts Struts в контекста на цялото приложение Struts – основни класове и градивни елементи

mira-weeks
Télécharger la présentation

Struts Application Framework

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. Мартин Чиллев Георги Денчев Софтуерен инженер Vereo Technologies. Софтуерен инженер Codix. www.vereo.bg www.codix.bg Struts Application Framework

  2. Съдържание • Какво представлява Struts • Struts в контекста на цялото приложение • Struts – основни класове и градивни елементи • Case Study – Simple Polling System • Struts – основни похвати • Силни и слаби страни на Struts

  3. Какво представлява Struts Пример за използване на Struts Application Framework

  4. Какво представлява Struts • Платформа за разработка на web приложения • Базиран на стандартни технологии – JavaBeans, JavaServlets, JSPs, XML, … • Софтуер с отворен код • Плод на усилията на разрастващо се общество от разработчици • Реализира MVC(Model-View-Controller) шаблонът

  5. Еволюцията към Model 2 • Model 1 • JSP страници с код сочат към JSP страници с код • Бизнес логика, презентационна логика – всичко това се намира в JSP страницата • Няма ясно разделение на нива на приложението • Изключително трудно за поддръжка

  6. Еволюцията към Model 2 • Model 1.5 • Повечето от кода се намира в JavaBean, който се използва от JSP страницата • JSP страницата изпраща данни към себе си • Скриптлет в страницата определя дали са изпратени данни от формаили страницата се отваря за първи път • Ако са изпратени данни, страницата извиква бизнес методи на JavaBean-а, като им подава параметри като “request”, “response”, “session”

  7. Еволюцията към Model 2 • Model 2 (класически MVC) • JSP страниците съдържат много малко скриптлети • Заявките се обработват от логически център на приложението – обикновено Java сървлет • В зависимост от заявката сървлетът определя какви действия ще се извършат (извиква методи на определени Java класове) • Проектът започва по-бавно, но поддръжката е много по-лесна

  8. MVC

  9. Struts в контекста на цялото приложение • Controller • Всички заявки минават през логическия център на приложението • Лесно се конфигурира през XML файлове • Реалната работа се извършва от Action класове, извиквани от контролера • Вграден механизъм за валидация на входните данни • Отлична архитектура и дизайн

  10. Struts в контекста на цялото приложение • View • Няма конкретно обвързване с определена технология • Вградена поддръжка за интернационализация • View (JSP) • Вградени библиотеки от тагове за визуализация • Избягва се употребата на скриптлети • Улеснява се работата на дизайнерите на страницата

  11. Struts в контекста на цялото приложение • Model • Няма конкретно обвързване с определена технология • Логиката трябва да се реализира изцяло от разработчика • Съществуват помощни продукти, реализиращи връзката с базата данни • Oracle BC4J • Enterprise Java Beans (EJB) • Hibernate

  12. Struts – основни класове и градивни елементи • КласътActionServlet • Представлява сървлет, който съпоставя определени класове на събития (обикновено HTTP POST заявки) • Предава управлението на подходящ RequestProcessor • Поддръжка на множество модули в рамките на едно приложение

  13. Struts – основни класове и градивни елементи • КласътRequestProcessor • Най-важен в Controller частта на приложението • Предоставя изключително много точки за разширение – гъвкав и мощен • Създава и използва инстанции на Action, ActionForm и ActionForward • Настройва се чрез конфигурационен файл (struts-config.xml) – лесно и бързо • По време на разработката на уеб приложението класовете Action и ActionForm се разширяват в зависимост от конкретната задача • Конфигурационният файл указва по какъв начин да се използват разширените класове

  14. Struts – основни класове и градивни елементи • Предимства на подхода за конфигурация: • Цялата логика на управление на приложението е в един йерархичен текстов файл • улеснява процеса на усвояване, особено при големи приложения • Не е необходимо дизайнерът на страниците да е запознат с Java код • Не е необходима прекомпилация на приложението

  15. Struts – основни класове и градивни елементи • КласътActionMapping • От конфигурационния файл “struts-config.xml” се извлича набор от ActionMapping класове • Те се обединяват в общ контейнер – АctionMappings • Kласовете в Struts, които указват множествено число са контейнери • ActionMapping съдържа информация за съответствие между събития (HTTP заявки) и определени Action класове

  16. Struts – основни класове и градивни елементи • КласътActionMapping • Controller частта на Struts извиква определен Action клас в зависимост от текущата HTTP заявка • RequestProcessor подава ActionMapping обекта на “execute” метода на извикания Action • Това осигурява на Action обекта достъп до логиката на управление на приложението (control flow)

  17. Struts – основни класове и градивни елементи • КласътActionForm • Общ модел за данни които се задават или модофицират от HTTP форма (реализира се като JavaBean клас) • Абстрактен клас, който се разширява за всяка различна входна точка за данни в приложението • Множество HTTP заявки могат да бъдат асоциирани с един и същ модел на предаваните данни (ActionForm) • Един и същ ActionForm може да се използва в няколко последователни страници (wizards)

  18. Struts – основни класове и градивни елементи • КласътActionForm • За всеки параметър XXX който трябва да се извлече от HTTP заявката, ActionForm трябва да дефинира getXXX() и setXXX() методи • Ако искаме да валидираме входните данни, трябва да реализираме метода “validate” • Ако искаме да инициализираме стойности преди тяхното попълване, трябва да реализираме метода “reset”

  19. Struts – основни класове и градивни елементи • КласътActionForm • Алтернативни ActionForm типове • Map-backed ActionForm • Стойностите се съдържат в Map • Динамично, гъвкаво представяне на данните • DynaActionForm • ActionForm с декларативно зададени имена на параметрите – улеснява реализацията и поддръжката • Методът “reset” възстановява стойностите на всички параметри

  20. Struts – основни класове и градивни елементи • Класът Action • Играе главна роля в Struts • Основни задачи/отговорности • Осъществяване на достъп до бизнес слоя на приложението • Подготовка на данните за използване от презентационния слой • Обработка на възникналите грешки по време на изпълнение на горните две задачи • Пренасочване към подходяща точка от View частта на приложението

  21. Struts – основни класове и градивни елементи • Класът Action • Отправна точка за изпълнимия код е методът “execute” (“perform”) • Данните от HTTP заявката са вече обработени и се предават на Action обекта посредством ActionForm обект • Action обектите имат достъп и до самата HTTP заявка, както и до HTTP отговора • Action класовете определят логиката на управление на приложението

  22. Struts – основни класове и градивни елементи • Класът Action • Връща към извикващия RequestProcessor ActionForward обект • ActionForward указва View частта от приложението, към която ще се предаде управлението • Възможно е да се изгражда верига от Action класове (Action chaining) • При възникване на грешки е възможно да ги обработи и върне в user-friendly вид към клиента

  23. Struts – основни класове и градивни елементи • КласътActionForward • Указва следващата отправна точка за приложението чрез атрибута си “path” • Атрибутът “redirect”определя дали ще се извърши пренасочване на сървъра (forward) или HTTP пренасочване (redirect) • Два основни типа ActionForward • глобални (могат да се използват в цялото приложение) • локални (дефинирани са в конкретен ActionMapping)

  24. Struts – основни класове и градивни елементи • КласътActionError • Съдържа описание на възникнала по време на работата на приложението грешка • Дава възможност за логическа интерпретация на грешките в достъпен за потребителя формат • Възможно е да се обединяват много грешки в един ActionErrors обект

  25. Struts – основни класове и градивни елементи • Мостът към уеб – “web.xml” • Стандартизирано описание на уеб приложението (Sun, Java Servlet спецификация) • Съдържа информация за • Използваните Java сървлети • Конфигурационни и инициализационни параметри • Използваните библиотеки от JSP тагове • ...

  26. Struts – основни класове и градивни елементи • Да обединим всичко в едно – “struts-config.xml” • Точката на обединение на всички компоненти на Struts-базираното приложение • Съдържа ActionForms, ActionForwards (глобални + локални), ActionMappings • Съдържа дефинициите на основни части на Struts framework

  27. Пример - Simple Polling System

  28. Struts – основни похвати

  29. Разширяване на класа RequestProcessor • Множество extension points – под формата на методи от вида processXXX() • Всички такива методи се извикват в рамките на “process” метода на RequestProcessor • RequestProcessor осигурява имплементация по подразбиране на всички методи от този вид

  30. Разширяване на класа RequestProcessor • processRoles() – позволено ли е на потребителя да изпълни съответния Action • Бърза реализация на централизирана подсистема за проверка на права • Най-често предефинираният метод • processPopulate(), processValidate() – позволяват собствена имплементация на попълването и валидацията на ActionForm • processLocale(), processNoCache(), …

  31. Пример – разширяване на класът RequestProcessor

  32. Валидация на входни данни • Добра практика е да се извършва в рамките на “validate”метода на ActionForm • При невалидни/некоректни данни • Struts автоматично връща съобщенията за грешки към потребителя • атрибутът “input”на ActionMapping указва точното място от View частта на приложението

  33. Валидация на входни данни • Struts Validator • Алтернатива на традиционния метод на валидация на данни (Struts 1.0) • Вградени типове данни • Декларативна валидация (отделен конфигурационен файл), промяна без рекомпилация • Поддръжка на локализация на съобщенията за грешки

  34. Интернационализация илокализация в Struts • Интернационализация – дизайнът на приложението позволява адаптация към различни езици и региони • Struts гради върху стандартните средства, заложени в Java платформата • Разработчиците не са обвързани с използването на Struts за интернационализация на приложението

  35. Интернационализация илокализация в Struts • Интернационализация (Java) • Java.util.Locale – разграничаване между различни местоположения • Java.util.ResourceBundle – централен склад за съобщения; може да се извлича съобщение за даден Locale; поддръжка за добавяне на нов Locale без да се налага рекомпилация • Java.util.MessageFormat – форматиране на елементи (дати, валута, ...) според езика и региона на определен Locale

  36. Интернационализация илокализация в Struts • Локализация – процесът на адаптация на приложението към различни езици и региони • Локализация • Struts поддържа Locale обект в сесията на всеки потребител • ServletRequest.getLocale() връща локала, зададен от уеб браузъра

  37. Интернационализация илокализация в Struts • Локализация • MessageResources – клас, който унифицира процеса на извличане на съобщения • MessageResources осигурява достъп до resource bundle по подразбиране, който се зарежда от controller сървлета • ActionMessage – клас-обвивка на едно локализирано съобщение • Поддръжка на обикновени съобщения и съобщения за грешка (ActionError в Struts 1.0) • Генерираните съобщения се запазват чрез метода “saveMessages(<request>, <messages>)”

  38. Пример – динамична смяна на езикът на приложението

  39. Предотвратяване на double submissions • Проблем в уеб програмирането е липсата на контрол върху приложението от страна на клиента (най-често web browser) • Double submissions – проблем, който се среща във ВСИЧКИ уеб приложения • В Struts се решава чрез използване на т.нар. token

  40. Предотвратяване на double submissions • Опростен сценарий Double submissions – проблем, който се среща във ВСИЧКИ уеб приложения • Преди предаване на управлението на презентационната логика се генерира token (който е уникален в рамките на един HTTP request) • В “execute” метода на Action, преди същинската логика, се проверява валидността на token • Ако не е валиден, връщаме подходящо съобщение за грешка към потребителя • Ако е валиден, премахваме текущата token информация и продължаваме

  41. Пример – предотвратяване на double submissions

  42. Интеграция на Struts с другитехнологии • Struts 1.1 включва технологии, които в Struts 1.0 са били включвани допълнително към ядрото • JSTL (Java Standart Tags Library) • Библиотека с JSP тагове • Улеснява голяма част от стандартните операции, реализирани в една JSP страница • Намалява употребата на скриптлети

  43. Интеграция на Struts с другитехнологии • Struts Validator • Алтернативен начин за валидация на входни данни (в Struts 1.0 можем да ползваме само метода “validate” на ActionForm) • Декларативна валидация на данни • Бърза и гъвкава имплементация • Вградени валидатори за наи-често използваните типове данни – integer, float, date, regex, …

  44. Интеграция на Struts с другитехнологии • Tiles • Осигурява консистентност на външния вид на приложението • Изпозва JSP includes – широко разпространена техника, оптимизирана в повечето Java сървлетконтейнери • Tile – синоним на шаблонна страница

  45. Интеграция на Struts с другитехнологии • Tiles • В основата стои layout template – страница, която определя позицията на основни елементи (tiles) като заглавна част, меню, съдържание • Основните елементи също са страници • По-лесна промяна, code reuse на ниво JSP страница

  46. Struts – силни страни • Единствена входна точка на приложението • Лесна имплементация на основни аспекти на приложението – security, logging, … • Лесна поддръжка на управляващата логика на приложението

  47. Struts – силни страни • Използват се JSP tags • Полученият код може да се използва отново (code reuse) • Java кодът се отделя от JSP страницата (абстракция на бизнес логиката • Добра интеграция с JSP-базирани инструменти за разработка • Използване на библиотеки от тагове • Вградени библиотеки с богати възможности • Добра отправна точка за изучаване на JSP tags технологията

  48. Struts – силни страни • Framework с отворен код • Достъп до всяка една част от кода • Възможност за code reviews от много разработчици и на много нива • MVC имплементация • Struts улеснява много изграждането на собствена MVC-базирана система • Намаляване на усилията за поддръжка на системата

  49. Struts – силни страни • Управление на проблемната област • Поддръжка на множество модули в едно приложение (Struts 1.1) • “Разделяй и владей” е чудесен метод за решаване на проблеми в областта на разработката на софтуер

  50. Struts – слаби страни • Ограничена технологична и приложна област • Подходящ е само за уеб приложения • Java сървлет-базирана имплементация • Обвързаност с J2EE стандарта • Изисква сървлетконтейнер, който поддържа JSP 1.1 и Servlet 2.2 спецификациите

More Related