520 likes | 690 Views
Мартин Чиллев. Георги Денчев. Софтуерен инженер Vereo Technologies. Софтуерен инженер Codix. www.vereo.bg. www.codix.bg. Struts Application Framework. Съдържание. Какво представлява Struts Struts в контекста на цялото приложение Struts – основни класове и градивни елементи
E N D
Мартин Чиллев Георги Денчев Софтуерен инженер Vereo Technologies. Софтуерен инженер Codix. www.vereo.bg www.codix.bg Struts Application Framework
Съдържание • Какво представлява Struts • Struts в контекста на цялото приложение • Struts – основни класове и градивни елементи • Case Study – Simple Polling System • Struts – основни похвати • Силни и слаби страни на Struts
Какво представлява Struts Пример за използване на Struts Application Framework
Какво представлява Struts • Платформа за разработка на web приложения • Базиран на стандартни технологии – JavaBeans, JavaServlets, JSPs, XML, … • Софтуер с отворен код • Плод на усилията на разрастващо се общество от разработчици • Реализира MVC(Model-View-Controller) шаблонът
Еволюцията към Model 2 • Model 1 • JSP страници с код сочат към JSP страници с код • Бизнес логика, презентационна логика – всичко това се намира в JSP страницата • Няма ясно разделение на нива на приложението • Изключително трудно за поддръжка
Еволюцията към Model 2 • Model 1.5 • Повечето от кода се намира в JavaBean, който се използва от JSP страницата • JSP страницата изпраща данни към себе си • Скриптлет в страницата определя дали са изпратени данни от формаили страницата се отваря за първи път • Ако са изпратени данни, страницата извиква бизнес методи на JavaBean-а, като им подава параметри като “request”, “response”, “session”
Еволюцията към Model 2 • Model 2 (класически MVC) • JSP страниците съдържат много малко скриптлети • Заявките се обработват от логически център на приложението – обикновено Java сървлет • В зависимост от заявката сървлетът определя какви действия ще се извършат (извиква методи на определени Java класове) • Проектът започва по-бавно, но поддръжката е много по-лесна
Struts в контекста на цялото приложение • Controller • Всички заявки минават през логическия център на приложението • Лесно се конфигурира през XML файлове • Реалната работа се извършва от Action класове, извиквани от контролера • Вграден механизъм за валидация на входните данни • Отлична архитектура и дизайн
Struts в контекста на цялото приложение • View • Няма конкретно обвързване с определена технология • Вградена поддръжка за интернационализация • View (JSP) • Вградени библиотеки от тагове за визуализация • Избягва се употребата на скриптлети • Улеснява се работата на дизайнерите на страницата
Struts в контекста на цялото приложение • Model • Няма конкретно обвързване с определена технология • Логиката трябва да се реализира изцяло от разработчика • Съществуват помощни продукти, реализиращи връзката с базата данни • Oracle BC4J • Enterprise Java Beans (EJB) • Hibernate
Struts – основни класове и градивни елементи • КласътActionServlet • Представлява сървлет, който съпоставя определени класове на събития (обикновено HTTP POST заявки) • Предава управлението на подходящ RequestProcessor • Поддръжка на множество модули в рамките на едно приложение
Struts – основни класове и градивни елементи • КласътRequestProcessor • Най-важен в Controller частта на приложението • Предоставя изключително много точки за разширение – гъвкав и мощен • Създава и използва инстанции на Action, ActionForm и ActionForward • Настройва се чрез конфигурационен файл (struts-config.xml) – лесно и бързо • По време на разработката на уеб приложението класовете Action и ActionForm се разширяват в зависимост от конкретната задача • Конфигурационният файл указва по какъв начин да се използват разширените класове
Struts – основни класове и градивни елементи • Предимства на подхода за конфигурация: • Цялата логика на управление на приложението е в един йерархичен текстов файл • улеснява процеса на усвояване, особено при големи приложения • Не е необходимо дизайнерът на страниците да е запознат с Java код • Не е необходима прекомпилация на приложението
Struts – основни класове и градивни елементи • КласътActionMapping • От конфигурационния файл “struts-config.xml” се извлича набор от ActionMapping класове • Те се обединяват в общ контейнер – АctionMappings • Kласовете в Struts, които указват множествено число са контейнери • ActionMapping съдържа информация за съответствие между събития (HTTP заявки) и определени Action класове
Struts – основни класове и градивни елементи • КласътActionMapping • Controller частта на Struts извиква определен Action клас в зависимост от текущата HTTP заявка • RequestProcessor подава ActionMapping обекта на “execute” метода на извикания Action • Това осигурява на Action обекта достъп до логиката на управление на приложението (control flow)
Struts – основни класове и градивни елементи • КласътActionForm • Общ модел за данни които се задават или модофицират от HTTP форма (реализира се като JavaBean клас) • Абстрактен клас, който се разширява за всяка различна входна точка за данни в приложението • Множество HTTP заявки могат да бъдат асоциирани с един и същ модел на предаваните данни (ActionForm) • Един и същ ActionForm може да се използва в няколко последователни страници (wizards)
Struts – основни класове и градивни елементи • КласътActionForm • За всеки параметър XXX който трябва да се извлече от HTTP заявката, ActionForm трябва да дефинира getXXX() и setXXX() методи • Ако искаме да валидираме входните данни, трябва да реализираме метода “validate” • Ако искаме да инициализираме стойности преди тяхното попълване, трябва да реализираме метода “reset”
Struts – основни класове и градивни елементи • КласътActionForm • Алтернативни ActionForm типове • Map-backed ActionForm • Стойностите се съдържат в Map • Динамично, гъвкаво представяне на данните • DynaActionForm • ActionForm с декларативно зададени имена на параметрите – улеснява реализацията и поддръжката • Методът “reset” възстановява стойностите на всички параметри
Struts – основни класове и градивни елементи • Класът Action • Играе главна роля в Struts • Основни задачи/отговорности • Осъществяване на достъп до бизнес слоя на приложението • Подготовка на данните за използване от презентационния слой • Обработка на възникналите грешки по време на изпълнение на горните две задачи • Пренасочване към подходяща точка от View частта на приложението
Struts – основни класове и градивни елементи • Класът Action • Отправна точка за изпълнимия код е методът “execute” (“perform”) • Данните от HTTP заявката са вече обработени и се предават на Action обекта посредством ActionForm обект • Action обектите имат достъп и до самата HTTP заявка, както и до HTTP отговора • Action класовете определят логиката на управление на приложението
Struts – основни класове и градивни елементи • Класът Action • Връща към извикващия RequestProcessor ActionForward обект • ActionForward указва View частта от приложението, към която ще се предаде управлението • Възможно е да се изгражда верига от Action класове (Action chaining) • При възникване на грешки е възможно да ги обработи и върне в user-friendly вид към клиента
Struts – основни класове и градивни елементи • КласътActionForward • Указва следващата отправна точка за приложението чрез атрибута си “path” • Атрибутът “redirect”определя дали ще се извърши пренасочване на сървъра (forward) или HTTP пренасочване (redirect) • Два основни типа ActionForward • глобални (могат да се използват в цялото приложение) • локални (дефинирани са в конкретен ActionMapping)
Struts – основни класове и градивни елементи • КласътActionError • Съдържа описание на възникнала по време на работата на приложението грешка • Дава възможност за логическа интерпретация на грешките в достъпен за потребителя формат • Възможно е да се обединяват много грешки в един ActionErrors обект
Struts – основни класове и градивни елементи • Мостът към уеб – “web.xml” • Стандартизирано описание на уеб приложението (Sun, Java Servlet спецификация) • Съдържа информация за • Използваните Java сървлети • Конфигурационни и инициализационни параметри • Използваните библиотеки от JSP тагове • ...
Struts – основни класове и градивни елементи • Да обединим всичко в едно – “struts-config.xml” • Точката на обединение на всички компоненти на Struts-базираното приложение • Съдържа ActionForms, ActionForwards (глобални + локални), ActionMappings • Съдържа дефинициите на основни части на Struts framework
Разширяване на класа RequestProcessor • Множество extension points – под формата на методи от вида processXXX() • Всички такива методи се извикват в рамките на “process” метода на RequestProcessor • RequestProcessor осигурява имплементация по подразбиране на всички методи от този вид
Разширяване на класа RequestProcessor • processRoles() – позволено ли е на потребителя да изпълни съответния Action • Бърза реализация на централизирана подсистема за проверка на права • Най-често предефинираният метод • processPopulate(), processValidate() – позволяват собствена имплементация на попълването и валидацията на ActionForm • processLocale(), processNoCache(), …
Пример – разширяване на класът RequestProcessor
Валидация на входни данни • Добра практика е да се извършва в рамките на “validate”метода на ActionForm • При невалидни/некоректни данни • Struts автоматично връща съобщенията за грешки към потребителя • атрибутът “input”на ActionMapping указва точното място от View частта на приложението
Валидация на входни данни • Struts Validator • Алтернатива на традиционния метод на валидация на данни (Struts 1.0) • Вградени типове данни • Декларативна валидация (отделен конфигурационен файл), промяна без рекомпилация • Поддръжка на локализация на съобщенията за грешки
Интернационализация илокализация в Struts • Интернационализация – дизайнът на приложението позволява адаптация към различни езици и региони • Struts гради върху стандартните средства, заложени в Java платформата • Разработчиците не са обвързани с използването на Struts за интернационализация на приложението
Интернационализация илокализация в Struts • Интернационализация (Java) • Java.util.Locale – разграничаване между различни местоположения • Java.util.ResourceBundle – централен склад за съобщения; може да се извлича съобщение за даден Locale; поддръжка за добавяне на нов Locale без да се налага рекомпилация • Java.util.MessageFormat – форматиране на елементи (дати, валута, ...) според езика и региона на определен Locale
Интернационализация илокализация в Struts • Локализация – процесът на адаптация на приложението към различни езици и региони • Локализация • Struts поддържа Locale обект в сесията на всеки потребител • ServletRequest.getLocale() връща локала, зададен от уеб браузъра
Интернационализация илокализация в Struts • Локализация • MessageResources – клас, който унифицира процеса на извличане на съобщения • MessageResources осигурява достъп до resource bundle по подразбиране, който се зарежда от controller сървлета • ActionMessage – клас-обвивка на едно локализирано съобщение • Поддръжка на обикновени съобщения и съобщения за грешка (ActionError в Struts 1.0) • Генерираните съобщения се запазват чрез метода “saveMessages(<request>, <messages>)”
Пример – динамична смяна на езикът на приложението
Предотвратяване на double submissions • Проблем в уеб програмирането е липсата на контрол върху приложението от страна на клиента (най-често web browser) • Double submissions – проблем, който се среща във ВСИЧКИ уеб приложения • В Struts се решава чрез използване на т.нар. token
Предотвратяване на double submissions • Опростен сценарий Double submissions – проблем, който се среща във ВСИЧКИ уеб приложения • Преди предаване на управлението на презентационната логика се генерира token (който е уникален в рамките на един HTTP request) • В “execute” метода на Action, преди същинската логика, се проверява валидността на token • Ако не е валиден, връщаме подходящо съобщение за грешка към потребителя • Ако е валиден, премахваме текущата token информация и продължаваме
Пример – предотвратяване на double submissions
Интеграция на Struts с другитехнологии • Struts 1.1 включва технологии, които в Struts 1.0 са били включвани допълнително към ядрото • JSTL (Java Standart Tags Library) • Библиотека с JSP тагове • Улеснява голяма част от стандартните операции, реализирани в една JSP страница • Намалява употребата на скриптлети
Интеграция на Struts с другитехнологии • Struts Validator • Алтернативен начин за валидация на входни данни (в Struts 1.0 можем да ползваме само метода “validate” на ActionForm) • Декларативна валидация на данни • Бърза и гъвкава имплементация • Вградени валидатори за наи-често използваните типове данни – integer, float, date, regex, …
Интеграция на Struts с другитехнологии • Tiles • Осигурява консистентност на външния вид на приложението • Изпозва JSP includes – широко разпространена техника, оптимизирана в повечето Java сървлетконтейнери • Tile – синоним на шаблонна страница
Интеграция на Struts с другитехнологии • Tiles • В основата стои layout template – страница, която определя позицията на основни елементи (tiles) като заглавна част, меню, съдържание • Основните елементи също са страници • По-лесна промяна, code reuse на ниво JSP страница
Struts – силни страни • Единствена входна точка на приложението • Лесна имплементация на основни аспекти на приложението – security, logging, … • Лесна поддръжка на управляващата логика на приложението
Struts – силни страни • Използват се JSP tags • Полученият код може да се използва отново (code reuse) • Java кодът се отделя от JSP страницата (абстракция на бизнес логиката • Добра интеграция с JSP-базирани инструменти за разработка • Използване на библиотеки от тагове • Вградени библиотеки с богати възможности • Добра отправна точка за изучаване на JSP tags технологията
Struts – силни страни • Framework с отворен код • Достъп до всяка една част от кода • Възможност за code reviews от много разработчици и на много нива • MVC имплементация • Struts улеснява много изграждането на собствена MVC-базирана система • Намаляване на усилията за поддръжка на системата
Struts – силни страни • Управление на проблемната област • Поддръжка на множество модули в едно приложение (Struts 1.1) • “Разделяй и владей” е чудесен метод за решаване на проблеми в областта на разработката на софтуер
Struts – слаби страни • Ограничена технологична и приложна област • Подходящ е само за уеб приложения • Java сървлет-базирана имплементация • Обвързаност с J2EE стандарта • Изисква сървлетконтейнер, който поддържа JSP 1.1 и Servlet 2.2 спецификациите