Post on 03-Jan-2016
description
transcript
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Лектор: Георги ДенчевComSoft Ltd.
Разработка на Struts-базирани WEB
приложения с Oracle JDeveloper 10g
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
1. Въведение в Struts
2. Въведение в Oracle Application Development Framework (ADF)
3. Изграждане на примерно Struts-базирано приложение
4. Заключение
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
1. Въведение в Struts Какво представлява Struts Ролята на Struts в приложението Основни градивни елементи и класове Основни похвати Поддръжка на Struts в JDeveloper 10g
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Какво представлява Struts
Платформа за разработка на WEB приложения
Базиран на стандартни технологии – JavaBeans, Java Servlets, JavaServer Pages (JSP), XML, …
Софтуер с отворен код Плод на усилията на разрастващо се
общество от разработчици
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Какво представлява Struts
Реализира MVC (Model-View-Controller) парадигма
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
1. Въведение в Struts Какво представлява Struts Ролята на Struts в приложението Основни градивни елементи и класове Основни похвати Поддръжка на Struts в JDeveloper 10g
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Ролята на Struts в приложението
Controller Всички заявки минават през логическия център
на приложението Лесно се конфигурира през XML файлове Реалната работа се извършва от Action класове,
извиквани от контролера Вграден механизъм за валидация на входните
данни Отлична архитектура и дизайн
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Ролята на Struts в приложението
View Няма конкретно обвързване с определена
технология Вградена поддръжка за интернационализация
View (JSP) Вградени библиотеки от тагове за визуализация
Избягва се употребата на скриптлети Улеснява се работата на дизайнерите на
страницата
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Ролята на Struts в приложението
Model Няма конкретно обвързване с определена
технология Логиката трябва да се реализира изцяло от
разработчика Съществуват помощни продукти, реализиращи
връзката с базата данни Oracle BC4J Enterprise Java Beans (EJB) Hibernate
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
1. Въведение в Struts Какво представлява Struts Ролята на Struts в приложението Основни градивни елементи и класове Основни похвати Поддръжка на Struts в JDeveloper 10g
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът ActionServlet
Представлява сървлет, който съпоставя определени класове на събития (обикновено HTTP POST заявки)
Предава управлението на подходящ RequestProcessor
Поддръжка на множество модули в рамките на едно приложение
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът RequestProcessor
Най-важен в Controller частта на приложението
Предоставя изключително много точки за разширение – гъвкав и мощен
Създава и използва инстанции на Action, ActionForm и ActionForward
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът RequestProcessor
Настройва се чрез конфигурационен файл (struts-config.xml) – лесно и бързо
По време на разработката на WEB приложението класовете Action и ActionForm се разширяват в зависимост от конкретната задача
Конфигурационният файл указва по какъв начин да се използват разширените класове
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът RequestProcessor
Предимства на подхода Цялата логика на управление на приложението е
в един йерархичен текстов файл улеснява процеса на усвояване, особено при
големи приложения Не е необходимо дизайнерът на страниците да е
запознат с Java код Не е необходима прекомпилация на
приложението
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът ActionMapping
ActionMapping съдържа информация за съответствие между събития (HTTP заявки) и определени Action класове
Controller частта на Struts извиква определен Action клас в зависимост от текущата HTTP заявка
RequestProcessor подава ActionMapping обекта на “execute” метода на извикания Action
Това осигурява на Action обекта достъп до логиката на управление на приложението (control flow)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът ActionMapping
От конфигурационния файл “struts-config.xml” се извлича набор от ActionMapping класове
Те се обединяват в общ контейнер – АctionMappings
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът ActionForm
Общ модел за данни които се задават или модофицират от HTTP форма (реализира се като JavaBean клас)
Абстрактен клас, който се разширява за всяка различна входна точка за данни в приложението
Множество HTTP заявки могат да бъдат асоциирани с един и същ модел на предаваните данни (ActionForm)
Един и същ ActionForm може да се използва в няколко последователни страници (wizards)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът ActionForm
За всеки параметър XXX който трябва да се извлече от HTTP заявката, ActionForm трябва да дефинира getXXX() и setXXX() методи
Ако искаме да валидираме входните данни, трябва да реализираме метода “validate”
Ако искаме да инициализираме стойности преди тяхното попълване, трябва да реализираме метода “reset”
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът ActionForm
Алтернативни ActionForm типове Map-backed ActionForm
Стойностите се съдържат в Map Динамично, гъвкаво представяне на данните
DynaActionForm ActionForm с декларативно зададени имена на
параметрите – улеснява реализацията и поддръжката
Методът “reset” възстановява стойностите на ВСИЧКИ параметри
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът Action
Играе главна роля в Struts Основни задачи/отговорности
Осъществяване на достъп до бизнес слоя на приложението
Подготовка на данните за използване от презентационния слой
Обработка на възникналите грешки по време на изпълнение на горните две задачи
Пренасочване към подходяща точка от View частта на приложението
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът Action
Отправна точка за изпълнимия код е методът “execute” (“perform”)
Данните от HTTP заявката са вече обработени и се предават на Action обекта посредством ActionForm обект
Action обектите имат достъп и до самата HTTP заявка, както и до HTTP отговора
Action класовете определят логиката на управление на приложението
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът Action
Връща към извикващия RequestProcessor ActionForward обект
ActionForward указва View частта от приложението, към която ще се предаде управлението
Възможно е да се изгражда верига от Action класове (Action chaining)
При възникване на грешки е възможно да ги обработи и върне в user-friendly вид към клиента
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът ActionForward
Указва следващата отправна точка за приложението чрез атрибута си “path”
Атрибутът “redirect” определя дали ще се извърши пренасочване на сървъра (forward) или HTTP пренасочване (redirect)
Два основни типа ActionForward глобални (могат да се използват в цялото
приложение) локални (дефинирани са в конкретен
ActionMapping)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Класът ActionError
Съдържа описание на възникнала по време на работата на приложението грешка
Дава възможност за логическа интерпретация на грешките в достъпен за потребителя формат
Възможно е да се обединяват много грешки в един ActionErrors обект
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Да обединим всичко в едно – “struts-config.xml”
Точката на обединение на всички компоненти на Struts-базираното приложение
Съдържа ActionForms, ActionForwards (глобални + локални), ActionMappings
Съдържа обръщения към ресурси на приложението
Може да дефинира глобална обработка на грешки (exceptions)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Примерен “struts-config.xml”
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Обобщение – Struts control flow
1) Клиентът извършва заявка
2) WEB контейнерът предава заявката към ActionServlet
3) Ако в приложението са дефинирани множество модули, ActionServlet избира подходящия модул и съответстващия му RequestProcessor
4) RequestProcessor намира mapping, съответстващ на клиентската заявка
5) Ако mapping указва form bean, RequestProcessor проверява дали вече съществува такъв form bean (ако не – създава такъв)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Обобщение – Struts control flow
6) Ако mapping указва form bean, RequestProcessor попълва form bean от клиентската заявка
7) Ако параметърът на mapping “validate” е истина, ActionServlet извиква метода “validate” на form bean
8) Ако “validate” не успее, RequestProcessor пренасочва към пътя, указан от “input” параметъра на mapping и процесът завършва
9) Ако с mapping се асоциира тип Action, той се използва наново ако вече съществува
10) RequestProcessor извиква “execute” метода на Action, като му подава създадения form bean (или null)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Обобщение – Struts control flow
11) Action може да попълва form bean, да извиква бизнес методи и т.н.
12) Action връща ActionForward към RequestProcessor 13) Ако ActionForward съдържа път към друг Action,
започваме цикъла отначало; в противен случай цикъла завършва, управлението се предава на JSP страница (или друга презентационна технология)
14) Ако JSP страницата съдържа Struts HTML тагове и те виждат правилната form bean в заявката, стойностите им се попълват автоматично. В противен случай тагът <html:form> създава form bean
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
1. Въведение в Struts Какво представлява Struts Ролята на Struts в приложението Основни градивни елементи и класове Основни похвати Поддръжка на Struts в JDeveloper 10g
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Разширяване на класа RequestProcessor
Множество extension points – под формата на методи от вида processXXX()
Всички такива методи се извикват в рамките на “process” метода на RequestProcessor
RequestProcessor осигурява имплементация по подразбиране на всички методи от този вид
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Разширяване на класа RequestProcessor
processRoles() – позволено ли е на потребителя да изпълни съответния Action
Бърза реализация на централизирана подсистема за проверка на права
Най-често предефинираният метод
processPopulate(), processValidate() – позволяват собствена имплементация на попълването и валидацията на ActionForm
processLocale(), processNoCache(), …
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Валидация на входни данни
Добра практика е да се извършва в рамките на “validate” метода на ActionForm
При невалидни/некоректни данни Struts автоматично връща съобщенията за
грешки към потребителя атрибутът “input” на ActionMapping указва
точното място от View частта на приложението
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Валидация на входни данни
Struts Validator Алтернатива на традиционния метод на
валидация на данни (Struts 1.0) Вградени типове данни Декларативна валидация (отделен
конфигурационен файл), промяна без рекомпилация
Поддръжка на локализация на съобщенията за грешки
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Интернационализация и локализация в Struts
Интернационализация – дизайнът на приложението позволява адаптация към различни езици и региони
Struts гради върху стандартните средства, заложени в Java платформата
Разработчиците не са обвързани с използването на Struts за интернационализация на приложението
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Интернационализация и локализация в Struts
Интернационализация (Java) Java.util.Locale – разграничаване между различни
местоположения Java.util.ResourceBundle – централен склад за
съобщения; може да се извлича съобщение за даден Locale; поддръжка за добавяне на нов Locale без да се налага рекомпилация
Java.util.MessageFormat – форматиране на елементи (дати, валута, ...) според езика и региона на определен Locale
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Интернационализация и локализация в Struts
Локализация – процесът на адаптация на приложението към различни езици и региони
Локализация Struts поддържа Locale обект в сесията на всеки
потребител ServletRequest.getLocale() връща локала, зададен
от WEB браузъра, но Struts няма директен контрол върху този локал
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Интернационализация и локализация в Struts
Локализация MessageResources – клас, който унифицира
процеса на извличане на съобщения MessageResources осигурява достъп до resource
bundle по подразбиране, който се зарежда от controller сървлета
ActionMessage – клас-обвивка на едно локализирано съобщение
Поддръжка на обикновени съобщения и съобщения за грешка (ActionError в Struts 1.0)
Генерираните съобщения се запазват чрез метода “saveMessages(<request>, <messages>)”
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Предотвратяване на double submissions
Проблем в WEB програмирането е липсата на контрол върху приложението от страна на клиента (най-често web browser)
Double submissions – проблем, който се среща във ВСИЧКИ WEB приложения
В Struts се решава чрез използване на т.нар. token
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Предотвратяване на double submissions
Опростен сценарий Преди предаване на управлението на
презентационната логика се генерира token (който е уникален в рамките на един HTTP request)
В “execute” метода на Action, преди същинската логика, се проверява валидността на token Ако не е валиден, връщаме подходящо
съобщение за грешка към потребителя Ако е валиден, премахваме текущата token
информация и продължаваме
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Интеграция на Struts с други технологии
Struts 1.x включва технологии, които в Struts 1.0 са били включвани допълнително към ядрото
JSTL (Java Standart Tags Library) Библиотека с JSP тагове Улеснява голяма част от стандартните
операции, реализирани в една JSP страница Намалява употребата на скриптлети
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Интеграция на Struts с други технологии
Struts Validator Алтернативен начин за валидация на входни
данни (в Struts 1.0 можем да ползваме само метода “validate” на ActionForm)
Декларативна валидация на данни Бърза и гъвкава имплементация Вградени валидатори за наи-често използваните
типове данни – integer, float, date, regex, … При промяна не се налага рекомпилация
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Интеграция на Struts с други технологии
Tiles Осигурява консистентност на външния вид на
приложението Изпозва JSP includes – широко разпространена
техника, оптимизирана в повечето Java сървлет контейнери
Tile – синоним на шаблонна страница
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Интеграция на Struts с други технологии
Tiles В основата стои layout template – страница, която
определя позицията на основни елементи (tiles) като заглавна част, меню, съдържание
Основните елементи също са страници По-лесна промяна, code reuse на ниво JSP
страница
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
1. Въведение в Struts Какво представлява Struts Ролята на Struts в приложението Основни градивни елементи и класове Основни похвати Поддръжка на Struts в JDeveloper 10g
Microsoft .NET Framework OverviewBulgarian Oracle User Group
JDeveloper 10g
Интегрирана среда за разработка (IDE) Поддържа пълния цикъл на разработка на
приложения – моделиране, кодиране, тестване, оптимизиране, ...
Използва последните Java, XML и SQL стандарти Съдържа множество wizards за улеснение и
автоматизация на дейности Визуални дизайнери на всяко ниво Мощен редактор на код
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Поддръжка на Struts в JDeveloper 10g Визуален дизайнер на потока от страници (page flow)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Поддръжка на Struts в JDeveloper 10g Визуализация на компоненти по време на дизайн
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Поддръжка на Struts в JDeveloper 10g Подробен визуален редактор на “struts-config.xml”
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
2. Въведение в Oracle Application Development Framework (ADF) Какво представлява ADF Oracle ADF Binding Context Жизнен цикъл на ADF Интеграция на ADF със Struts
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Какво представлява ADF
Цялостен слой за продуктивна разработка на J2EE приложения
Използва готови шаблони и компоненти Поведение, базирано на метаданни Интегрира голям брой технологии,
възможност за избор
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Какво представлява ADF
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
2. Въведение в Oracle Application Development Framework (ADF) Какво представлява ADF Oracle ADF Binding Context Жизнен цикъл на ADF Интеграция на ADF със Struts
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Oracle ADF Data Controls
Абстракция на модела за данни на даден business service
Позволява достъп до всички business services по унифициран начин
Достъп до различни източници на данни и операции с тях
ADF BC, TopLink, JavaBeans EJB Session Beans, Web Services
Намират се в Data Control Palette Ако използваната технология е ADF BC,
съответстват на application module
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Iterator Bindings and Control Bindings
Осигуряват разделение между back-end данните и front-end визуализацията им
Iterator Bindings Осигуряват унифицирани методи за работа с
колекции от данни, доставени от data controls
Control Bindings Осигуряват на графичните контроли стандартен
интерфейс за комуникация с iterator bindings Позволяват извикване на “action” методи за
подготвяне на данни и обработка на събития
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Binding Containers and Binding Context
Binding Containers Именована група от свързани Iterator Bindings и
Control Bindings Наричани “UI Model”, тъй като осигуряват
подходяща част от данните за специфичен потребителски интерфейс
Oracle ADF Binding Context Осигурява контекста на данните за цялото
приложение Съдържа data controls и binding containers
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Oracle ADF Binding Context
Базиран на .xml конфигурационни фалове Изгражда се в “design time” в JDeveloper
Автоматична синхронизация с конфигурационните файлове
Възможност за дефиниране на собствени data bindings
В Web приложения “controller” слоят е отговорен за попълването на ADF Binding Context преди насочване към “view”
“View” слоят извлича данните от модела за визуализация (pull model)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Oracle ADF Binding Context
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
2. Въведение в Oracle Application Development Framework (ADF) Какво представлява ADF Oracle ADF Binding Context Жизнен цикъл на ADF Интеграция на ADF със Struts
Microsoft .NET Framework OverviewBulgarian Oracle User Group
LifeCycle (interface)
Дефинира методите (етапите) от жизнения цикъл
Отговорности на LifeCycle Позволява на Web страниците да
взаимодействат с ADF модела Инициализира подходящия binding container за
всяка страница Обновява bindings стойностите в контейнера Подготвя данните за визуализация
Набор от класове, реализиращи LifeCycle PageLifeCycle, StrutsPageLifecycle StrutsJspLifecycle, StrutsUIXLifecycle
Microsoft .NET Framework OverviewBulgarian Oracle User Group
LifecycleContext
Съдържа информация за състоянието по време на жизнения цикъл
HTTP request/response Binding context Binding container (“UI Model”) Спсък със “събития”
Подава се като параметър на всички методи на LifeCycle
Разширява HashMap, така че могат да се съхраняват допълнителни данни
DataActionContext го разширява и поддържа работа с ADF Action класове
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Жизнен цикъл на ADF
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
2. Въведение в Oracle Application Development Framework (ADF) Какво представлява ADF Oracle ADF Binding Context Жизнен цикъл на ADF Интеграция на ADF със Struts
Microsoft .NET Framework OverviewBulgarian Oracle User Group
DataAction и DataForwardAction
Разширяват стандартния Action Осигуряват достъп до модела и жизнения
цикъл на ADF през ADF Binding Context (DataActionContext)
Осигуряват механизъм за обработка на т.нар. “събития” (events)
Задействат се от “view” частта на приложението Няма нужда от отделен Action за всяко събитие
Microsoft .NET Framework OverviewBulgarian Oracle User Group
BindingContainerActionForm
Разширява ActionForm, реализира DynaBean Автоматично прави достъпни атрибутите на
даден binding container Създава се автоматично от JDeveloper при
нужда в “struts-config.xml” По време на изпълнение на приложението
DataAction(DataForwardAction) автоматично попълват и запазват промени в модела
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
3. Изграждане на примерно Struts-базирано приложение Представяне на Simple Polling System
(SPS) Изграждане на бизнес модела на
приложението
Изграждане на ViewController частта на приложението
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Представяне на Simple Polling System (SPS)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Представяне на Simple Polling System (SPS)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
3. Изграждане на примерно Struts-базирано приложение Представяне на Simple Polling System
(SPS) Изграждане на бизнес модела на
приложението
Изграждане на ViewController частта на приложението
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Изграждане на бизнес модела на приложението
Live Demo Бизнес обекти (business objects) Достъп до данните (data access) Бизнес услуги (business services)
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
3. Изграждане на примерно Struts-базирано приложение Представяне на Simple Polling System
(SPS) Изграждане на бизнес модела на
приложението
Изграждане на ViewController частта на приложението
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Изграждане на ViewController частта на приложението
Live Demo Предварително разширяване на Struts/ADF
framework Дизайн на приложението през диаграмата на
страниците Визуален стил на изграждане на JSP страници Разширяване на поведението на
DataForwardAction
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Съдържание
1. Въведение в Struts
2. Въведение в Oracle Application Development Framework (ADF)
3. Изграждане на примерно Struts-базирано приложение
4. Заключение
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Допълнителна информация
Strutsstruts.apache.org/
struts.apache.org/userGuide/
Oracle JDeveloperwww.oracle.com/technology/products/jdev/index.html
www.oracle.com/technology/software/products/jdev/htdocs/soft9051.html
Oracle ADFwww.oracle.com/technology/products/jdev/collateral/papers/10g/ADFFAQ/index.html
www.oracle.com/technology/products/jdev/collateral/papers/10g/ADF_overview.pdf
www.oracle.com/technology/documentation/jdev/adf_guidelines_manual.pdf
Microsoft .NET Framework OverviewBulgarian Oracle User Group
Q&A