52
Struts Application Struts Application Framework Framework www.vereo.bg Георги Денчев Софтуерен инженер Софтуерен инженер Vereo Vereo Technologies. Technologies. Мартин Чиллев Софтуерен инженер Софтуерен инженер Codix. Codix. www.codix.bg

Struts Application Framework

Embed Size (px)

DESCRIPTION

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

Citation preview

Struts Application Struts Application FrameworkFramework

www.vereo.bg

Георги ДенчевСофтуерен инженерСофтуерен инженерVereo Technologies.Vereo Technologies.

Мартин ЧиллевСофтуерен инженерСофтуерен инженерCodix.Codix.

www.codix.bg

СъдържаниеСъдържаниеСъдържаниеСъдържание

1.1. Какво представлява Какво представлява StrutsStruts

• Struts Struts в контекста на цялото в контекста на цялото приложениеприложение

• Struts – Struts – основни класове и градивни основни класове и градивни елементиелементи

• Case Study – Simple Polling SystemCase Study – Simple Polling System

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

3.3. Силни и слаби страни на Силни и слаби страни на StrutsStruts

1.1. Какво представлява Какво представлява StrutsStruts

• Struts Struts в контекста на цялото в контекста на цялото приложениеприложение

• Struts – Struts – основни класове и градивни основни класове и градивни елементиелементи

• Case Study – Simple Polling SystemCase Study – Simple Polling System

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

3.3. Силни и слаби страни на Силни и слаби страни на StrutsStruts

Какво представлява Какво представлява StrutsStruts

Пример за използване наStruts Application Framework

Какво представлява Какво представлява StrutsStrutsКакво представлява Какво представлява StrutsStruts

• Платформа за разработка на Платформа за разработка на web web приложенияприложения

• Базиран на стандартни технологии – Базиран на стандартни технологии – JavaBeans, JavaServlets, JSPs, XML, …JavaBeans, JavaServlets, JSPs, XML, …

• Софтуер с отворен кодСофтуер с отворен код

• Плод на усилията на разрастващо се Плод на усилията на разрастващо се общество от разработчициобщество от разработчици

• Реализира Реализира MVC(Model-View-Controller) MVC(Model-View-Controller) шаблонътшаблонът

• Платформа за разработка на Платформа за разработка на web web приложенияприложения

• Базиран на стандартни технологии – Базиран на стандартни технологии – JavaBeans, JavaServlets, JSPs, XML, …JavaBeans, JavaServlets, JSPs, XML, …

• Софтуер с отворен кодСофтуер с отворен код

• Плод на усилията на разрастващо се Плод на усилията на разрастващо се общество от разработчициобщество от разработчици

• Реализира Реализира MVC(Model-View-Controller) MVC(Model-View-Controller) шаблонътшаблонът

Еволюцията към Еволюцията към Model 2Model 2Еволюцията към Еволюцията към Model 2Model 2

• Model 1Model 1

• JSP JSP страници с код сочат към страници с код сочат към JSP JSP страници с кодстраници с код

• Бизнес логика, презентационна логика Бизнес логика, презентационна логика – всичко това се намира в – всичко това се намира в JSP JSP страницатастраницата

• Няма ясно разделение на нива на Няма ясно разделение на нива на приложениетоприложението

• Изключително трудно за поддръжкаИзключително трудно за поддръжка

• Model 1Model 1

• JSP JSP страници с код сочат към страници с код сочат към JSP JSP страници с кодстраници с код

• Бизнес логика, презентационна логика Бизнес логика, презентационна логика – всичко това се намира в – всичко това се намира в JSP JSP страницатастраницата

• Няма ясно разделение на нива на Няма ясно разделение на нива на приложениетоприложението

• Изключително трудно за поддръжкаИзключително трудно за поддръжка

Еволюцията към Еволюцията към Model 2Model 2Еволюцията към Еволюцията към Model 2Model 2

• Model 1Model 1.5.5

• Повечето от кода се намира в Повечето от кода се намира в JavaBeanJavaBean, който , който се използва от се използва от JSP JSP страницатастраницата

• JSP JSP страницата изпраща данни към себе систраницата изпраща данни към себе си

• Скриптлет в страницата определя дали са Скриптлет в страницата определя дали са изпратени данни от формаизпратени данни от форма или страницата се или страницата се отваря за първи пътотваря за първи път

• Ако са изпратени данни, страницата извиква Ако са изпратени данни, страницата извиква бизнес методи на бизнес методи на JavaBean-JavaBean-а, като им подава а, като им подава параметри като “параметри като “request”, “response”, request”, “response”, “session”“session”

• Model 1Model 1.5.5

• Повечето от кода се намира в Повечето от кода се намира в JavaBeanJavaBean, който , който се използва от се използва от JSP JSP страницатастраницата

• JSP JSP страницата изпраща данни към себе систраницата изпраща данни към себе си

• Скриптлет в страницата определя дали са Скриптлет в страницата определя дали са изпратени данни от формаизпратени данни от форма или страницата се или страницата се отваря за първи пътотваря за първи път

• Ако са изпратени данни, страницата извиква Ако са изпратени данни, страницата извиква бизнес методи на бизнес методи на JavaBean-JavaBean-а, като им подава а, като им подава параметри като “параметри като “request”, “response”, request”, “response”, “session”“session”

Еволюцията към Еволюцията към Model 2Model 2Еволюцията към Еволюцията към Model 2Model 2

• Model Model 2 (класически 2 (класически MVC)MVC)

• JSP JSP страниците съдържат много малко страниците съдържат много малко скриптлетискриптлети

• Заявките се обработват от логически център Заявките се обработват от логически център на приложението – обикновено на приложението – обикновено Java Java сървлетсървлет

• В зависимост от заявката сървлетът В зависимост от заявката сървлетът определя какви действия ще се извършат определя какви действия ще се извършат (извиква методи на определени (извиква методи на определени Java Java класове)класове)

• Проектът започва по-бавно, но поддръжката е Проектът започва по-бавно, но поддръжката е много по-леснамного по-лесна

• Model Model 2 (класически 2 (класически MVC)MVC)

• JSP JSP страниците съдържат много малко страниците съдържат много малко скриптлетискриптлети

• Заявките се обработват от логически център Заявките се обработват от логически център на приложението – обикновено на приложението – обикновено Java Java сървлетсървлет

• В зависимост от заявката сървлетът В зависимост от заявката сървлетът определя какви действия ще се извършат определя какви действия ще се извършат (извиква методи на определени (извиква методи на определени Java Java класове)класове)

• Проектът започва по-бавно, но поддръжката е Проектът започва по-бавно, но поддръжката е много по-леснамного по-лесна

MVCMVCMVCMVC

Struts Struts в контекста на в контекста на цялото приложениецялото приложениеStruts Struts в контекста на в контекста на цялото приложениецялото приложение

• ControllerController• Всички заявки минават през логическия Всички заявки минават през логическия

център на приложениетоцентър на приложението

• Лесно се конфигурира през Лесно се конфигурира през XML XML файловефайлове

• Реалната работа се извършва от Реалната работа се извършва от Action Action класове, извиквани от контролеракласове, извиквани от контролера

• Вграден механизъм за валидация на входните Вграден механизъм за валидация на входните данниданни

• Отлична архитектура и дизайнОтлична архитектура и дизайн

• ControllerController• Всички заявки минават през логическия Всички заявки минават през логическия

център на приложениетоцентър на приложението

• Лесно се конфигурира през Лесно се конфигурира през XML XML файловефайлове

• Реалната работа се извършва от Реалната работа се извършва от Action Action класове, извиквани от контролеракласове, извиквани от контролера

• Вграден механизъм за валидация на входните Вграден механизъм за валидация на входните данниданни

• Отлична архитектура и дизайнОтлична архитектура и дизайн

Struts Struts в контекста на в контекста на цялото приложениецялото приложениеStruts Struts в контекста на в контекста на цялото приложениецялото приложение

• ViewView• Няма конкретно обвързване с определена Няма конкретно обвързване с определена

технологиятехнология

• Вградена поддръжка за интернационализацияВградена поддръжка за интернационализация

• View (JSP)View (JSP)• Вградени библиотеки от тагове за Вградени библиотеки от тагове за

визуализациявизуализация

• Избягва се употребата на скриптлетиИзбягва се употребата на скриптлети

• Улеснява се работата на дизайнерите на Улеснява се работата на дизайнерите на страницатастраницата

• ViewView• Няма конкретно обвързване с определена Няма конкретно обвързване с определена

технологиятехнология

• Вградена поддръжка за интернационализацияВградена поддръжка за интернационализация

• View (JSP)View (JSP)• Вградени библиотеки от тагове за Вградени библиотеки от тагове за

визуализациявизуализация

• Избягва се употребата на скриптлетиИзбягва се употребата на скриптлети

• Улеснява се работата на дизайнерите на Улеснява се работата на дизайнерите на страницатастраницата

Struts Struts в контекста на в контекста на цялото приложениецялото приложениеStruts Struts в контекста на в контекста на цялото приложениецялото приложение

• ModelModel• Няма конкретно обвързване с определена Няма конкретно обвързване с определена

технологиятехнология

• Логиката трябва да се реализира изцяло от Логиката трябва да се реализира изцяло от разработчикаразработчика

• Съществуват помощни продукти, Съществуват помощни продукти, реализиращи връзката с базата данниреализиращи връзката с базата данни

• Oracle BC4JOracle BC4J

• Enterprise Java Beans (EJB)Enterprise Java Beans (EJB)

• HibernateHibernate

• ModelModel• Няма конкретно обвързване с определена Няма конкретно обвързване с определена

технологиятехнология

• Логиката трябва да се реализира изцяло от Логиката трябва да се реализира изцяло от разработчикаразработчика

• Съществуват помощни продукти, Съществуват помощни продукти, реализиращи връзката с базата данниреализиращи връзката с базата данни

• Oracle BC4JOracle BC4J

• Enterprise Java Beans (EJB)Enterprise Java Beans (EJB)

• HibernateHibernate

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът ActionServletActionServlet• Представлява сървлет, който съпоставя Представлява сървлет, който съпоставя

определени класове на събития (обикновено определени класове на събития (обикновено HTTP POST HTTP POST заявки)заявки)

• Предава управлението на подходящ Предава управлението на подходящ RequestProcessorRequestProcessor

• Поддръжка на множество модули в рамките Поддръжка на множество модули в рамките на едно приложениена едно приложение

• КласътКласът ActionServletActionServlet• Представлява сървлет, който съпоставя Представлява сървлет, който съпоставя

определени класове на събития (обикновено определени класове на събития (обикновено HTTP POST HTTP POST заявки)заявки)

• Предава управлението на подходящ Предава управлението на подходящ RequestProcessorRequestProcessor

• Поддръжка на множество модули в рамките Поддръжка на множество модули в рамките на едно приложениена едно приложение

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът RequestProcessorRequestProcessor• Най-важен в Най-важен в Controller Controller частта на частта на

приложениетоприложението• Предоставя изключително много точки за Предоставя изключително много точки за

разширение – гъвкав и мощенразширение – гъвкав и мощен• Създава и използва инстанции на Създава и използва инстанции на Action, Action,

ActionForm ActionForm ии ActionForward ActionForward• Настройва се чрез конфигурационен файл Настройва се чрез конфигурационен файл

((struts-config.xmlstruts-config.xml) – ) – лесно и бързолесно и бързо• По време на разработката на уеб По време на разработката на уеб

приложението класовете приложението класовете Action Action и и ActionForm ActionForm се разширяват в зависимост от конкретната се разширяват в зависимост от конкретната задачазадача

• Конфигурационният файл указва по какъв Конфигурационният файл указва по какъв начин да се използват разширените класовеначин да се използват разширените класове

• КласътКласът RequestProcessorRequestProcessor• Най-важен в Най-важен в Controller Controller частта на частта на

приложениетоприложението• Предоставя изключително много точки за Предоставя изключително много точки за

разширение – гъвкав и мощенразширение – гъвкав и мощен• Създава и използва инстанции на Създава и използва инстанции на Action, Action,

ActionForm ActionForm ии ActionForward ActionForward• Настройва се чрез конфигурационен файл Настройва се чрез конфигурационен файл

((struts-config.xmlstruts-config.xml) – ) – лесно и бързолесно и бързо• По време на разработката на уеб По време на разработката на уеб

приложението класовете приложението класовете Action Action и и ActionForm ActionForm се разширяват в зависимост от конкретната се разширяват в зависимост от конкретната задачазадача

• Конфигурационният файл указва по какъв Конфигурационният файл указва по какъв начин да се използват разширените класовеначин да се използват разширените класове

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• Предимства на подхода за конфигурация:Предимства на подхода за конфигурация:

• Цялата логика на управление на Цялата логика на управление на приложението е в един йерархичен текстов приложението е в един йерархичен текстов файлфайл

• улеснява процеса на усвояване, особено при улеснява процеса на усвояване, особено при големи приложенияголеми приложения

• Не е необходимо дизайнерът на страниците Не е необходимо дизайнерът на страниците да е запознат с да е запознат с Java Java кодкод

• Не е необходима прекомпилация на Не е необходима прекомпилация на приложениетоприложението

• Предимства на подхода за конфигурация:Предимства на подхода за конфигурация:

• Цялата логика на управление на Цялата логика на управление на приложението е в един йерархичен текстов приложението е в един йерархичен текстов файлфайл

• улеснява процеса на усвояване, особено при улеснява процеса на усвояване, особено при големи приложенияголеми приложения

• Не е необходимо дизайнерът на страниците Не е необходимо дизайнерът на страниците да е запознат с да е запознат с Java Java кодкод

• Не е необходима прекомпилация на Не е необходима прекомпилация на приложениетоприложението

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът ActionMappingActionMapping

• От конфигурационния файл От конфигурационния файл ““struts-config.xmlstruts-config.xml” ” се извлича се извлича набор от набор от ActionMappingActionMapping класове класове

• Те се обединяват в общ контейнер – Те се обединяват в общ контейнер – ААctionMappingsctionMappings

• KKласовете в ласовете в StrutsStruts, които указват , които указват множествено число са контейнеримножествено число са контейнери

• ActionMappingActionMapping съдържа информация за съдържа информация за съответствие между събития (съответствие между събития (HTTP HTTP заявки) и заявки) и определени определени Action Action класовекласове

• КласътКласът ActionMappingActionMapping

• От конфигурационния файл От конфигурационния файл ““struts-config.xmlstruts-config.xml” ” се извлича се извлича набор от набор от ActionMappingActionMapping класове класове

• Те се обединяват в общ контейнер – Те се обединяват в общ контейнер – ААctionMappingsctionMappings

• KKласовете в ласовете в StrutsStruts, които указват , които указват множествено число са контейнеримножествено число са контейнери

• ActionMappingActionMapping съдържа информация за съдържа информация за съответствие между събития (съответствие между събития (HTTP HTTP заявки) и заявки) и определени определени Action Action класовекласове

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът ActionMappingActionMapping

• Controller Controller частта на частта на Struts Struts извиква определен извиква определен Action Action клас в зависимост от текущата клас в зависимост от текущата HTTP HTTP заявказаявка

• RequestProcessor RequestProcessor подава подава ActionMappingActionMapping обекта на обекта на ““executeexecute” ” метода на извикания метода на извикания ActionAction

• Това осигурява на Това осигурява на Action Action обекта достъп до обекта достъп до логиката на управление на приложението логиката на управление на приложението ((control flow)control flow)

• КласътКласът ActionMappingActionMapping

• Controller Controller частта на частта на Struts Struts извиква определен извиква определен Action Action клас в зависимост от текущата клас в зависимост от текущата HTTP HTTP заявказаявка

• RequestProcessor RequestProcessor подава подава ActionMappingActionMapping обекта на обекта на ““executeexecute” ” метода на извикания метода на извикания ActionAction

• Това осигурява на Това осигурява на Action Action обекта достъп до обекта достъп до логиката на управление на приложението логиката на управление на приложението ((control flow)control flow)

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът ActionFormActionForm• Общ модел за данни които се задават или Общ модел за данни които се задават или

модофицират от модофицират от HTTP HTTP форма (реализира се форма (реализира се като като JavaBeanJavaBean клас) клас)

• Абстрактен клас, който се разширява за всяка Абстрактен клас, който се разширява за всяка различна входна точка за данни в различна входна точка за данни в приложениетоприложението

• Множество Множество HTTP HTTP заявки могат да бъдат заявки могат да бъдат асоциирани с един и същ модел на асоциирани с един и същ модел на предаваните данни (предаваните данни (ActionForm)ActionForm)

• Един и същ Един и същ ActionFormActionForm може да се използва в може да се използва в няколко последователни страници (няколко последователни страници (wizards)wizards)

• КласътКласът ActionFormActionForm• Общ модел за данни които се задават или Общ модел за данни които се задават или

модофицират от модофицират от HTTP HTTP форма (реализира се форма (реализира се като като JavaBeanJavaBean клас) клас)

• Абстрактен клас, който се разширява за всяка Абстрактен клас, който се разширява за всяка различна входна точка за данни в различна входна точка за данни в приложениетоприложението

• Множество Множество HTTP HTTP заявки могат да бъдат заявки могат да бъдат асоциирани с един и същ модел на асоциирани с един и същ модел на предаваните данни (предаваните данни (ActionForm)ActionForm)

• Един и същ Един и същ ActionFormActionForm може да се използва в може да се използва в няколко последователни страници (няколко последователни страници (wizards)wizards)

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът ActionFormActionForm• За всеки параметър За всеки параметър XXX XXX който трябва да се който трябва да се

извлече от извлече от HTTP HTTP заявката, заявката, ActionFormActionForm трябва трябва да дефинира да дефинира getXXX()getXXX() и и setXXX()setXXX() методи методи

• Ако искаме да валидираме входните данни, Ако искаме да валидираме входните данни, трябва да реализираме метода “трябва да реализираме метода “validate”validate”

• Ако искаме да инициализираме стойности Ако искаме да инициализираме стойности преди тяхното попълване, трябва да преди тяхното попълване, трябва да реализираме метода реализираме метода ““resetreset””

• КласътКласът ActionFormActionForm• За всеки параметър За всеки параметър XXX XXX който трябва да се който трябва да се

извлече от извлече от HTTP HTTP заявката, заявката, ActionFormActionForm трябва трябва да дефинира да дефинира getXXX()getXXX() и и setXXX()setXXX() методи методи

• Ако искаме да валидираме входните данни, Ако искаме да валидираме входните данни, трябва да реализираме метода “трябва да реализираме метода “validate”validate”

• Ако искаме да инициализираме стойности Ако искаме да инициализираме стойности преди тяхното попълване, трябва да преди тяхното попълване, трябва да реализираме метода реализираме метода ““resetreset””

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът ActionFormActionForm• Алтернативни Алтернативни ActionForm ActionForm типоветипове

• Map-backed ActionFormMap-backed ActionForm• Стойностите се съдържат в Стойностите се съдържат в MapMap• Динамично, гъвкаво представяне на Динамично, гъвкаво представяне на

даннитеданните

• DynaActionFormDynaActionForm• ActionFormActionForm с декларативно зададени с декларативно зададени

имена на параметрите – улеснява имена на параметрите – улеснява реализацията и поддръжкатареализацията и поддръжката

• Методът Методът ““resetreset”” възстановява възстановява стойностите на всички параметристойностите на всички параметри

• КласътКласът ActionFormActionForm• Алтернативни Алтернативни ActionForm ActionForm типоветипове

• Map-backed ActionFormMap-backed ActionForm• Стойностите се съдържат в Стойностите се съдържат в MapMap• Динамично, гъвкаво представяне на Динамично, гъвкаво представяне на

даннитеданните

• DynaActionFormDynaActionForm• ActionFormActionForm с декларативно зададени с декларативно зададени

имена на параметрите – улеснява имена на параметрите – улеснява реализацията и поддръжкатареализацията и поддръжката

• Методът Методът ““resetreset”” възстановява възстановява стойностите на всички параметристойностите на всички параметри

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• Класът Класът ActionAction• Играе главна роля в Играе главна роля в StrutsStruts

• Основни задачи/отговорностиОсновни задачи/отговорности• Осъществяване на достъп до бизнес Осъществяване на достъп до бизнес

слоя на приложениетослоя на приложението

• Подготовка на данните за използване Подготовка на данните за използване от презентационния слойот презентационния слой

• Обработка на възникналите грешки по Обработка на възникналите грешки по време на изпълнение на горните две време на изпълнение на горните две задачизадачи

• Пренасочване към подходяща точка от Пренасочване към подходяща точка от ViewView частта на приложението частта на приложението

• Класът Класът ActionAction• Играе главна роля в Играе главна роля в StrutsStruts

• Основни задачи/отговорностиОсновни задачи/отговорности• Осъществяване на достъп до бизнес Осъществяване на достъп до бизнес

слоя на приложениетослоя на приложението

• Подготовка на данните за използване Подготовка на данните за използване от презентационния слойот презентационния слой

• Обработка на възникналите грешки по Обработка на възникналите грешки по време на изпълнение на горните две време на изпълнение на горните две задачизадачи

• Пренасочване към подходяща точка от Пренасочване към подходяща точка от ViewView частта на приложението частта на приложението

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• Класът Класът ActionAction

• Отправна точка за изпълнимия код е Отправна точка за изпълнимия код е методът “методът “executeexecute” ” (“perform”)(“perform”)

• Данните от Данните от HTTPHTTP заявката са вече заявката са вече обработени и се предават на обработени и се предават на ActionAction обекта посредством обекта посредством ActionFormActionForm обект обект

• Action Action обектите имат достъп и до обектите имат достъп и до самата самата HTTP HTTP заявка, както и до заявка, както и до HTTP HTTP отговораотговора

• Action Action класовете определят логиката на класовете определят логиката на управление на приложениетоуправление на приложението

• Класът Класът ActionAction

• Отправна точка за изпълнимия код е Отправна точка за изпълнимия код е методът “методът “executeexecute” ” (“perform”)(“perform”)

• Данните от Данните от HTTPHTTP заявката са вече заявката са вече обработени и се предават на обработени и се предават на ActionAction обекта посредством обекта посредством ActionFormActionForm обект обект

• Action Action обектите имат достъп и до обектите имат достъп и до самата самата HTTP HTTP заявка, както и до заявка, както и до HTTP HTTP отговораотговора

• Action Action класовете определят логиката на класовете определят логиката на управление на приложениетоуправление на приложението

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• Класът Класът ActionAction

• Връща към извикващия Връща към извикващия RequestProcessor ActionForward RequestProcessor ActionForward обектобект

• ActionForwardActionForward указва указва ViewView частта от частта от приложението, към която ще се приложението, към която ще се предаде управлениетопредаде управлението

• Възможно е да се изгражда верига от Възможно е да се изгражда верига от Action Action класове класове (Action chaining)(Action chaining)

• При възникване на грешки е възможно При възникване на грешки е възможно да ги обработи и върне в да ги обработи и върне в user-friendlyuser-friendly вид към клиентавид към клиента

• Класът Класът ActionAction

• Връща към извикващия Връща към извикващия RequestProcessor ActionForward RequestProcessor ActionForward обектобект

• ActionForwardActionForward указва указва ViewView частта от частта от приложението, към която ще се приложението, към която ще се предаде управлениетопредаде управлението

• Възможно е да се изгражда верига от Възможно е да се изгражда верига от Action Action класове класове (Action chaining)(Action chaining)

• При възникване на грешки е възможно При възникване на грешки е възможно да ги обработи и върне в да ги обработи и върне в user-friendlyuser-friendly вид към клиентавид към клиента

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът ActionForwardActionForward• Указва следващата отправна точка за Указва следващата отправна точка за

приложението чрез атрибута си приложението чрез атрибута си ““pathpath””• Атрибутът Атрибутът ““redirectredirect”” определя дали ще определя дали ще

се извърши пренасочване на сървъра се извърши пренасочване на сървъра ((forward)forward) или или HTTP HTTP пренасочване пренасочване (redirect)(redirect)

• Два основни типа Два основни типа ActionForwardActionForward• глобални (могат да се използват в глобални (могат да се използват в

цялото приложение)цялото приложение)

• локални (дефинирани са в конкретен локални (дефинирани са в конкретен ActionMapping)ActionMapping)

• КласътКласът ActionForwardActionForward• Указва следващата отправна точка за Указва следващата отправна точка за

приложението чрез атрибута си приложението чрез атрибута си ““pathpath””• Атрибутът Атрибутът ““redirectredirect”” определя дали ще определя дали ще

се извърши пренасочване на сървъра се извърши пренасочване на сървъра ((forward)forward) или или HTTP HTTP пренасочване пренасочване (redirect)(redirect)

• Два основни типа Два основни типа ActionForwardActionForward• глобални (могат да се използват в глобални (могат да се използват в

цялото приложение)цялото приложение)

• локални (дефинирани са в конкретен локални (дефинирани са в конкретен ActionMapping)ActionMapping)

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• КласътКласът ActionErrorActionError

• Съдържа описание на възникнала по Съдържа описание на възникнала по време на работата на приложението време на работата на приложението грешкагрешка

• Дава възможност за логическа Дава възможност за логическа интерпретация на грешките в достъпен интерпретация на грешките в достъпен за потребителя форматза потребителя формат

• Възможно е да се обединяват много Възможно е да се обединяват много грешки в един грешки в един ActionErrors ActionErrors обектобект

• КласътКласът ActionErrorActionError

• Съдържа описание на възникнала по Съдържа описание на възникнала по време на работата на приложението време на работата на приложението грешкагрешка

• Дава възможност за логическа Дава възможност за логическа интерпретация на грешките в достъпен интерпретация на грешките в достъпен за потребителя форматза потребителя формат

• Възможно е да се обединяват много Възможно е да се обединяват много грешки в един грешки в един ActionErrors ActionErrors обектобект

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• Мостът към уеб – “Мостът към уеб – “web.xmlweb.xml””• Стандартизирано описание на уеб Стандартизирано описание на уеб

приложението (приложението (Sun, Java Servlet Sun, Java Servlet спецификация)спецификация)

• Съдържа информация заСъдържа информация за

• Използваните Използваните Java Java сървлетисървлети

• Конфигурационни и инициализационни Конфигурационни и инициализационни параметрипараметри

• Използваните библиотеки от Използваните библиотеки от JSP JSP таговетагове

• ......

• Мостът към уеб – “Мостът към уеб – “web.xmlweb.xml””• Стандартизирано описание на уеб Стандартизирано описание на уеб

приложението (приложението (Sun, Java Servlet Sun, Java Servlet спецификация)спецификация)

• Съдържа информация заСъдържа информация за

• Използваните Използваните Java Java сървлетисървлети

• Конфигурационни и инициализационни Конфигурационни и инициализационни параметрипараметри

• Използваните библиотеки от Използваните библиотеки от JSP JSP таговетагове

• ......

Struts – Struts – основни класове основни класове и градивни елементии градивни елементиStruts – Struts – основни класове основни класове и градивни елементии градивни елементи

• Да обединим всичко в едно – “Да обединим всичко в едно – “struts-struts-config.xmlconfig.xml””

• Точката на обединение на всички Точката на обединение на всички компоненти на компоненти на Struts-Struts-базираното базираното приложениеприложение

• Съдържа Съдържа ActionForms, ActionForwards ActionForms, ActionForwards ((глобални + локални)глобални + локални), ActionMappings, ActionMappings

• Съдържа дефинициите на основни Съдържа дефинициите на основни части на части на Struts frameworkStruts framework

• Да обединим всичко в едно – “Да обединим всичко в едно – “struts-struts-config.xmlconfig.xml””

• Точката на обединение на всички Точката на обединение на всички компоненти на компоненти на Struts-Struts-базираното базираното приложениеприложение

• Съдържа Съдържа ActionForms, ActionForwards ActionForms, ActionForwards ((глобални + локални)глобални + локални), ActionMappings, ActionMappings

• Съдържа дефинициите на основни Съдържа дефинициите на основни части на части на Struts frameworkStruts framework

Пример - Пример - Simple Polling Simple Polling SystemSystemПример - Пример - Simple Polling Simple Polling SystemSystem

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

Разширяване на класа Разширяване на класа RequestProcessorRequestProcessorРазширяване на класа Разширяване на класа RequestProcessorRequestProcessor

• Множество Множество extension points – extension points – под под формата на методи от вида формата на методи от вида processXXX()processXXX()

• Всички такива методи се извикват в Всички такива методи се извикват в рамките на рамките на “process“process” ” метода на метода на RequestProcessorRequestProcessor

• RequestProcessor RequestProcessor осигурява осигурява имплементация по подразбиране на имплементация по подразбиране на всички методи от този видвсички методи от този вид

• Множество Множество extension points – extension points – под под формата на методи от вида формата на методи от вида processXXX()processXXX()

• Всички такива методи се извикват в Всички такива методи се извикват в рамките на рамките на “process“process” ” метода на метода на RequestProcessorRequestProcessor

• RequestProcessor RequestProcessor осигурява осигурява имплементация по подразбиране на имплементация по подразбиране на всички методи от този видвсички методи от този вид

Разширяване на класа Разширяване на класа RequestProcessorRequestProcessorРазширяване на класа Разширяване на класа RequestProcessorRequestProcessor

• processRoles() – processRoles() – позволено ли е на позволено ли е на потребителя да изпълни съответния потребителя да изпълни съответния ActionAction

• Бърза реализация на централизирана Бърза реализация на централизирана подсистема за проверка на праваподсистема за проверка на права

• Най-често предефинираният метод Най-често предефинираният метод

• processPopulate(), processValidate() – processPopulate(), processValidate() – позволяват собствена имплементация на позволяват собствена имплементация на попълването и валидацията на попълването и валидацията на ActionFormActionForm

• processLocale(), processNoCache(), …processLocale(), processNoCache(), …

• processRoles() – processRoles() – позволено ли е на позволено ли е на потребителя да изпълни съответния потребителя да изпълни съответния ActionAction

• Бърза реализация на централизирана Бърза реализация на централизирана подсистема за проверка на праваподсистема за проверка на права

• Най-често предефинираният метод Най-често предефинираният метод

• processPopulate(), processValidate() – processPopulate(), processValidate() – позволяват собствена имплементация на позволяват собствена имплементация на попълването и валидацията на попълването и валидацията на ActionFormActionForm

• processLocale(), processNoCache(), …processLocale(), processNoCache(), …

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

Валидация на входни Валидация на входни данниданниВалидация на входни Валидация на входни данниданни

• Добра практика е да се извършва в Добра практика е да се извършва в рамките на рамките на ““validatevalidate”” метода на метода на ActionFormActionForm

• При невалидни/некоректни данниПри невалидни/некоректни данни

• Struts Struts автоматично връща автоматично връща съобщенията за грешки към съобщенията за грешки към потребителяпотребителя

• атрибутът атрибутът ““inputinput”” на на ActionMappingActionMapping указва точното място от указва точното място от View View частта на частта на приложениетоприложението

• Добра практика е да се извършва в Добра практика е да се извършва в рамките на рамките на ““validatevalidate”” метода на метода на ActionFormActionForm

• При невалидни/некоректни данниПри невалидни/некоректни данни

• Struts Struts автоматично връща автоматично връща съобщенията за грешки към съобщенията за грешки към потребителяпотребителя

• атрибутът атрибутът ““inputinput”” на на ActionMappingActionMapping указва точното място от указва точното място от View View частта на частта на приложениетоприложението

Валидация на входни Валидация на входни данниданниВалидация на входни Валидация на входни данниданни

• Struts ValidatorStruts Validator

• Алтернатива на традиционния метод Алтернатива на традиционния метод на валидация на данни (на валидация на данни (Struts 1.0)Struts 1.0)

• Вградени типове данниВградени типове данни

• Декларативна валидация (отделен Декларативна валидация (отделен конфигурационен файл), промяна без конфигурационен файл), промяна без рекомпилациярекомпилация

• Поддръжка на локализация на Поддръжка на локализация на съобщенията за грешкисъобщенията за грешки

• Struts ValidatorStruts Validator

• Алтернатива на традиционния метод Алтернатива на традиционния метод на валидация на данни (на валидация на данни (Struts 1.0)Struts 1.0)

• Вградени типове данниВградени типове данни

• Декларативна валидация (отделен Декларативна валидация (отделен конфигурационен файл), промяна без конфигурационен файл), промяна без рекомпилациярекомпилация

• Поддръжка на локализация на Поддръжка на локализация на съобщенията за грешкисъобщенията за грешки

Интернационализация иИнтернационализация и локализация в локализация в StrutsStrutsИнтернационализация иИнтернационализация и локализация в локализация в StrutsStruts

• Интернационализация – дизайнът на Интернационализация – дизайнът на приложението позволява адаптация приложението позволява адаптация към различни езици и регионикъм различни езици и региони

• Struts Struts гради върху стандартните гради върху стандартните средства, заложени в средства, заложени в Java Java платформатаплатформата

• Разработчиците не са обвързани с Разработчиците не са обвързани с използването на използването на Struts Struts за за интернационализация на приложениетоинтернационализация на приложението

• Интернационализация – дизайнът на Интернационализация – дизайнът на приложението позволява адаптация приложението позволява адаптация към различни езици и регионикъм различни езици и региони

• Struts Struts гради върху стандартните гради върху стандартните средства, заложени в средства, заложени в Java Java платформатаплатформата

• Разработчиците не са обвързани с Разработчиците не са обвързани с използването на използването на Struts Struts за за интернационализация на приложениетоинтернационализация на приложението

Интернационализация иИнтернационализация и локализация в локализация в StrutsStrutsИнтернационализация иИнтернационализация и локализация в локализация в StrutsStruts

• ИнтернационализацияИнтернационализация (Java) (Java)

• Java.util.LocaleJava.util.Locale – разграничаване между – разграничаване между различни местоположения различни местоположения

• Java.util.ResourceBundle – Java.util.ResourceBundle – централен централен склад за съобщения; може да се склад за съобщения; може да се извлича съобщение за даден извлича съобщение за даден LocaleLocale; ; поддръжка за добавяне на нов поддръжка за добавяне на нов LocaleLocale без да се налага рекомпилациябез да се налага рекомпилация

• Java.util.MessageFormat – Java.util.MessageFormat – форматиране форматиране на елементи (дати, валута, ...) според на елементи (дати, валута, ...) според езика и региона на определен езика и региона на определен LocaleLocale

• ИнтернационализацияИнтернационализация (Java) (Java)

• Java.util.LocaleJava.util.Locale – разграничаване между – разграничаване между различни местоположения различни местоположения

• Java.util.ResourceBundle – Java.util.ResourceBundle – централен централен склад за съобщения; може да се склад за съобщения; може да се извлича съобщение за даден извлича съобщение за даден LocaleLocale; ; поддръжка за добавяне на нов поддръжка за добавяне на нов LocaleLocale без да се налага рекомпилациябез да се налага рекомпилация

• Java.util.MessageFormat – Java.util.MessageFormat – форматиране форматиране на елементи (дати, валута, ...) според на елементи (дати, валута, ...) според езика и региона на определен езика и региона на определен LocaleLocale

Интернационализация иИнтернационализация и локализация в локализация в StrutsStrutsИнтернационализация иИнтернационализация и локализация в локализация в StrutsStruts

• Локализация – процесът на адаптация Локализация – процесът на адаптация на приложението към различни езици на приложението към различни езици и регионии региони

• ЛокализацияЛокализация

• Struts Struts поддържа поддържа Locale Locale обект в сесията обект в сесията на всеки потребителна всеки потребител

• ServletRequest.getLocale() ServletRequest.getLocale() връща връща локала, зададен от уеб браузъралокала, зададен от уеб браузъра

• Локализация – процесът на адаптация Локализация – процесът на адаптация на приложението към различни езици на приложението към различни езици и регионии региони

• ЛокализацияЛокализация

• Struts Struts поддържа поддържа Locale Locale обект в сесията обект в сесията на всеки потребителна всеки потребител

• ServletRequest.getLocale() ServletRequest.getLocale() връща връща локала, зададен от уеб браузъралокала, зададен от уеб браузъра

Интернационализация иИнтернационализация и локализация в локализация в StrutsStrutsИнтернационализация иИнтернационализация и локализация в локализация в StrutsStruts

• ЛокализацияЛокализация

• MessageResourcesMessageResources – клас, който унифицира – клас, който унифицира процеса на извличане на съобщенияпроцеса на извличане на съобщения

• MessageResources MessageResources осигурява достъп до осигурява достъп до resource bundleresource bundle по подразбиране, който се по подразбиране, който се зарежда от зарежда от controller controller сървлетасървлета

• ActionMessage – ActionMessage – клас-обвивка на едно клас-обвивка на едно локализирано съобщениелокализирано съобщение

• Поддръжка на обикновени съобщения и Поддръжка на обикновени съобщения и съобщения за грешка (съобщения за грешка (ActionErrorActionError в в Struts 1.0)Struts 1.0)

• Генерираните съобщения се запазват чрез Генерираните съобщения се запазват чрез метода “метода “saveMessagessaveMessages(<(<request>, <messages>request>, <messages>))””

• ЛокализацияЛокализация

• MessageResourcesMessageResources – клас, който унифицира – клас, който унифицира процеса на извличане на съобщенияпроцеса на извличане на съобщения

• MessageResources MessageResources осигурява достъп до осигурява достъп до resource bundleresource bundle по подразбиране, който се по подразбиране, който се зарежда от зарежда от controller controller сървлетасървлета

• ActionMessage – ActionMessage – клас-обвивка на едно клас-обвивка на едно локализирано съобщениелокализирано съобщение

• Поддръжка на обикновени съобщения и Поддръжка на обикновени съобщения и съобщения за грешка (съобщения за грешка (ActionErrorActionError в в Struts 1.0)Struts 1.0)

• Генерираните съобщения се запазват чрез Генерираните съобщения се запазват чрез метода “метода “saveMessagessaveMessages(<(<request>, <messages>request>, <messages>))””

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

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

Предотвратяване на Предотвратяване на double submissionsdouble submissionsПредотвратяване на Предотвратяване на double submissionsdouble submissions

• Проблем в уеб програмирането е Проблем в уеб програмирането е липсата на контрол върху липсата на контрол върху приложението от страна на клиента приложението от страна на клиента (най-често (най-често web browser)web browser)

• Double submissions – Double submissions – проблем, който проблем, който се среща във ВСИЧКИ уеб се среща във ВСИЧКИ уеб приложенияприложения

• В В Struts Struts се решава чрез използване на се решава чрез използване на т.нар. т.нар. tokentoken

• Проблем в уеб програмирането е Проблем в уеб програмирането е липсата на контрол върху липсата на контрол върху приложението от страна на клиента приложението от страна на клиента (най-често (най-често web browser)web browser)

• Double submissions – Double submissions – проблем, който проблем, който се среща във ВСИЧКИ уеб се среща във ВСИЧКИ уеб приложенияприложения

• В В Struts Struts се решава чрез използване на се решава чрез използване на т.нар. т.нар. tokentoken

Предотвратяване на Предотвратяване на double submissionsdouble submissionsПредотвратяване на Предотвратяване на double submissionsdouble submissions

• Опростен сценарийОпростен сценарий Double submissions – Double submissions – проблем, който се среща във ВСИЧКИ уеб проблем, който се среща във ВСИЧКИ уеб приложенияприложения

• Преди предаване на управлението на Преди предаване на управлението на презентационната логика се генерира презентационната логика се генерира token token ((който е уникален в рамките на един който е уникален в рамките на един HTTP HTTP requestrequest))

• В “В “executeexecute” метода на ” метода на ActionAction, преди , преди същинската логика, се проверява същинската логика, се проверява валидността на валидността на tokentoken

• Ако не е валиден, връщаме подходящо Ако не е валиден, връщаме подходящо съобщение за грешка към потребителясъобщение за грешка към потребителя

• Ако е валиден, премахваме текущата Ако е валиден, премахваме текущата tokentoken информация и продължавамеинформация и продължаваме

• Опростен сценарийОпростен сценарий Double submissions – Double submissions – проблем, който се среща във ВСИЧКИ уеб проблем, който се среща във ВСИЧКИ уеб приложенияприложения

• Преди предаване на управлението на Преди предаване на управлението на презентационната логика се генерира презентационната логика се генерира token token ((който е уникален в рамките на един който е уникален в рамките на един HTTP HTTP requestrequest))

• В “В “executeexecute” метода на ” метода на ActionAction, преди , преди същинската логика, се проверява същинската логика, се проверява валидността на валидността на tokentoken

• Ако не е валиден, връщаме подходящо Ако не е валиден, връщаме подходящо съобщение за грешка към потребителясъобщение за грешка към потребителя

• Ако е валиден, премахваме текущата Ако е валиден, премахваме текущата tokentoken информация и продължавамеинформация и продължаваме

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

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

Интеграция на Интеграция на Struts Struts с с другидруги технологиитехнологииИнтеграция на Интеграция на Struts Struts с с другидруги технологиитехнологии

• Struts 1.1 Struts 1.1 включва технологии, които в включва технологии, които в Struts 1.0 Struts 1.0 са били включвани са били включвани допълнително към ядротодопълнително към ядрото

• JSTL (Java Standart Tags Library)JSTL (Java Standart Tags Library)

• Библиотека с Библиотека с JSPJSP тагове тагове

• Улеснява голяма част от стандартните Улеснява голяма част от стандартните операции, реализирани в една операции, реализирани в една JSP JSP страницастраница

• Намалява употребата на скриптлетиНамалява употребата на скриптлети

• Struts 1.1 Struts 1.1 включва технологии, които в включва технологии, които в Struts 1.0 Struts 1.0 са били включвани са били включвани допълнително към ядротодопълнително към ядрото

• JSTL (Java Standart Tags Library)JSTL (Java Standart Tags Library)

• Библиотека с Библиотека с JSPJSP тагове тагове

• Улеснява голяма част от стандартните Улеснява голяма част от стандартните операции, реализирани в една операции, реализирани в една JSP JSP страницастраница

• Намалява употребата на скриптлетиНамалява употребата на скриптлети

Интеграция на Интеграция на Struts Struts с с другидруги технологиитехнологииИнтеграция на Интеграция на Struts Struts с с другидруги технологиитехнологии

• Struts ValidatorStruts Validator

• Алтернативен начин за валидация на Алтернативен начин за валидация на входни данни (в входни данни (в Struts 1.0 Struts 1.0 можем да можем да ползваме само метода ползваме само метода ““validatevalidate”” на на ActionForm)ActionForm)

• Декларативна валидация на данниДекларативна валидация на данни

• Бърза и гъвкава имплементацияБърза и гъвкава имплементация

• Вградени валидатори за наи-често Вградени валидатори за наи-често използваните типове данни – използваните типове данни – integer, integer, float, date, regex, …float, date, regex, …

• Struts ValidatorStruts Validator

• Алтернативен начин за валидация на Алтернативен начин за валидация на входни данни (в входни данни (в Struts 1.0 Struts 1.0 можем да можем да ползваме само метода ползваме само метода ““validatevalidate”” на на ActionForm)ActionForm)

• Декларативна валидация на данниДекларативна валидация на данни

• Бърза и гъвкава имплементацияБърза и гъвкава имплементация

• Вградени валидатори за наи-често Вградени валидатори за наи-често използваните типове данни – използваните типове данни – integer, integer, float, date, regex, …float, date, regex, …

Интеграция на Интеграция на Struts Struts с с другидруги технологиитехнологииИнтеграция на Интеграция на Struts Struts с с другидруги технологиитехнологии

• TilesTiles

• Осигурява консистентност на външния Осигурява консистентност на външния вид на приложениетовид на приложението

• Изпозва Изпозва JSP includesJSP includes – широко – широко разпространена техника, оптимизирана разпространена техника, оптимизирана в повечето в повечето Java Java сървлетсървлет контейнериконтейнери

• TileTile – синоним на шаблонна страница – синоним на шаблонна страница

• TilesTiles

• Осигурява консистентност на външния Осигурява консистентност на външния вид на приложениетовид на приложението

• Изпозва Изпозва JSP includesJSP includes – широко – широко разпространена техника, оптимизирана разпространена техника, оптимизирана в повечето в повечето Java Java сървлетсървлет контейнериконтейнери

• TileTile – синоним на шаблонна страница – синоним на шаблонна страница

Интеграция на Интеграция на Struts Struts с с другидруги технологиитехнологииИнтеграция на Интеграция на Struts Struts с с другидруги технологиитехнологии

• TilesTiles

• В основата стои В основата стои layout templatelayout template – – страница, която определя позицията на страница, която определя позицията на основни елементиосновни елементи (tiles) (tiles) като заглавна като заглавна част, меню, съдържаниечаст, меню, съдържание

• Основните елементи също са странициОсновните елементи също са страници

• По-лесна промяна, По-лесна промяна, code reuse code reuse на ниво на ниво JSP JSP страницастраница

• TilesTiles

• В основата стои В основата стои layout templatelayout template – – страница, която определя позицията на страница, която определя позицията на основни елементиосновни елементи (tiles) (tiles) като заглавна като заглавна част, меню, съдържаниечаст, меню, съдържание

• Основните елементи също са странициОсновните елементи също са страници

• По-лесна промяна, По-лесна промяна, code reuse code reuse на ниво на ниво JSP JSP страницастраница

Struts – Struts – силни странисилни страниStruts – Struts – силни странисилни страни

• Единствена входна точка на Единствена входна точка на приложениетоприложението

• Лесна имплементация на основни Лесна имплементация на основни аспекти на приложението – аспекти на приложението – security, security, logging, …logging, …

• Лесна поддръжка на управляващата Лесна поддръжка на управляващата логика на приложениетологика на приложението

• Единствена входна точка на Единствена входна точка на приложениетоприложението

• Лесна имплементация на основни Лесна имплементация на основни аспекти на приложението – аспекти на приложението – security, security, logging, …logging, …

• Лесна поддръжка на управляващата Лесна поддръжка на управляващата логика на приложениетологика на приложението

Struts – Struts – силни странисилни страниStruts – Struts – силни странисилни страни

• Използват се Използват се JSP tagsJSP tags

• Полученият код може да се използва отново Полученият код може да се използва отново ((code reuse)code reuse)

• JavaJava кодът се отделя от кодът се отделя от JSPJSP страницата страницата (абстракция на бизнес логиката(абстракция на бизнес логиката

• Добра интеграция с Добра интеграция с JSPJSP-базирани -базирани инструменти за разработкаинструменти за разработка

• Използване на библиотеки от таговеИзползване на библиотеки от тагове

• Вградени библиотеки с богати възможностиВградени библиотеки с богати възможности

• Добра отправна точка за изучаване на Добра отправна точка за изучаване на JSP JSP tags tags технологиятатехнологията

• Използват се Използват се JSP tagsJSP tags

• Полученият код може да се използва отново Полученият код може да се използва отново ((code reuse)code reuse)

• JavaJava кодът се отделя от кодът се отделя от JSPJSP страницата страницата (абстракция на бизнес логиката(абстракция на бизнес логиката

• Добра интеграция с Добра интеграция с JSPJSP-базирани -базирани инструменти за разработкаинструменти за разработка

• Използване на библиотеки от таговеИзползване на библиотеки от тагове

• Вградени библиотеки с богати възможностиВградени библиотеки с богати възможности

• Добра отправна точка за изучаване на Добра отправна точка за изучаване на JSP JSP tags tags технологиятатехнологията

Struts – Struts – силни странисилни страниStruts – Struts – силни странисилни страни

• FrameworkFramework с отворен код с отворен код

• Достъп до всяка една част от кодаДостъп до всяка една част от кода

• Възможност за Възможност за code reviewscode reviews от много от много разработчици и на много ниваразработчици и на много нива

• MVCMVC имплементация имплементация

• Struts Struts улеснява много изграждането на улеснява много изграждането на собствена собствена MVCMVC-базирана система-базирана система

• Намаляване на усилията за поддръжка Намаляване на усилията за поддръжка на систематана системата

• FrameworkFramework с отворен код с отворен код

• Достъп до всяка една част от кодаДостъп до всяка една част от кода

• Възможност за Възможност за code reviewscode reviews от много от много разработчици и на много ниваразработчици и на много нива

• MVCMVC имплементация имплементация

• Struts Struts улеснява много изграждането на улеснява много изграждането на собствена собствена MVCMVC-базирана система-базирана система

• Намаляване на усилията за поддръжка Намаляване на усилията за поддръжка на систематана системата

Struts – Struts – силни странисилни страниStruts – Struts – силни странисилни страни

• Управление на проблемната областУправление на проблемната област

• Поддръжка на множество модули в Поддръжка на множество модули в едно приложение (едно приложение (Struts 1.1)Struts 1.1)

• ““Разделяй и владей” е чудесен метод Разделяй и владей” е чудесен метод за решаване на проблеми в областта за решаване на проблеми в областта на разработката на софтуерна разработката на софтуер

• Управление на проблемната областУправление на проблемната област

• Поддръжка на множество модули в Поддръжка на множество модули в едно приложение (едно приложение (Struts 1.1)Struts 1.1)

• ““Разделяй и владей” е чудесен метод Разделяй и владей” е чудесен метод за решаване на проблеми в областта за решаване на проблеми в областта на разработката на софтуерна разработката на софтуер

Struts – Struts – слаби странислаби страниStruts – Struts – слаби странислаби страни

• Ограничена технологична и приложна Ограничена технологична и приложна областобласт

• Подходящ е само за уеб приложенияПодходящ е само за уеб приложения

• Java Java сървлетсървлет--базирана имплементациябазирана имплементация

• Обвързаност с Обвързаност с J2EE J2EE стандартастандарта

• Изисква сървлетИзисква сървлет контейнер, който контейнер, който поддържа поддържа JSP 1.1 JSP 1.1 и и Servlet 2.2 Servlet 2.2 спецификациитеспецификациите

• Ограничена технологична и приложна Ограничена технологична и приложна областобласт

• Подходящ е само за уеб приложенияПодходящ е само за уеб приложения

• Java Java сървлетсървлет--базирана имплементациябазирана имплементация

• Обвързаност с Обвързаност с J2EE J2EE стандартастандарта

• Изисква сървлетИзисква сървлет контейнер, който контейнер, който поддържа поддържа JSP 1.1 JSP 1.1 и и Servlet 2.2 Servlet 2.2 спецификациитеспецификациите

Struts – Struts – слаби странислаби страниStruts – Struts – слаби странислаби страни

• Повишена сложност Повишена сложност

• Разбиването на задача на части Разбиването на задача на части неминуемо води до повишаване неминуемо води до повишаване степента на сложностстепента на сложност

• По-стръмна крива на изучаване По-стръмна крива на изучаване ((learning curve problem)learning curve problem)

• Повишена сложност Повишена сложност

• Разбиването на задача на части Разбиването на задача на части неминуемо води до повишаване неминуемо води до повишаване степента на сложностстепента на сложност

• По-стръмна крива на изучаване По-стръмна крива на изучаване ((learning curve problem)learning curve problem)

ВъпросиВъпроси??ВъпросиВъпроси??