Шта је МВЦ?
МВЦ је архитектура која раздваја пословну логику, презентацију и податке. У МВЦ,
- М означава Модел
- В је скраћеница од Виев
- Ц означава контролер.
МВЦ је систематичан начин коришћења апликације где ток почиње од слоја приказа, где се захтев подиже и обрађује у слоју контролера и шаље на слој модела за уметање података и враћање поруке о успеху или неуспеху.
Слој модела:
- Ово је слој података који се састоји од пословне логике система.
- Састоји се од свих података апликације
- Такође представља стање пријаве.
- Састоји се од класа које имају везу са базом података.
- Контролер се повезује са моделом и преузима податке и шаље на слој приказа.
- Модел се такође повезује са базом података и складишти податке у базу података која је са њом повезана.
Виев Лаиер:
- Ово је презентациони слој.
- Састоји се од ХТМЛ-а, ЈСП-а итд.
- Обично представља кориснички интерфејс апликације.
- Користи се за приказ података који се преузимају из контролера који заузврат преузима податке из класа слојева модела.
- Овај слој приказа приказује податке о корисничком интерфејсу апликације.
Слој контролера:
- Делује као интерфејс између приказа и модела.
- Пресреће све захтеве који долазе из слоја приказа.
- Прима захтеве из слоја приказа и обрађује захтеве и врши неопходну проверу ваљаности захтева.
- Овај захтев се даље шаље на слој модела за обраду података, а када се захтев обради, он враћа контролору тражене информације и приказује их у складу с тим у приказу.
Дијаграм је представљен у наставку:
Предности МВЦ-а су:
- Једноставно за одржавање
- Лако се продужава
- Лако за тестирање
- Контрола навигације је централизована
Пример МВЦ архитектуре
У овом примеру ћемо показати како се користи МВЦ архитектура у ЈСП-у.
- Узимамо пример обрасца са две променљиве „е-пошта“ и „лозинка“, што је наш слој приказа.
- Једном када корисник унесе е-маил и лозинку и кликне на субмит, акција се преноси у мвц_сервлет где се прослеђују е-пошта и лозинка.
- Овај мвц_сервлет је слој контролера. Овде у мвц_сервлет захтев се шаље објекту граха који делује као слој модела.
- Вредности е-поште и лозинке се постављају у пасуљ и чувају за даљу сврху.
- Из зрна, вредност се преузима и приказује у слоју приказа.
Мвц_екампле.јсп
<% @ паге лангуаге = "јава" цонтентТипе = "тект / хтмл; цхарсет = ИСО-8859-1"пагеЕнцодинг = "ИСО-8859-1"%><хтмл><хеад><мета хттп-екуив = "Цонтент-Типе" цонтент = "тект / хтмл; цхарсет = ИСО-8859-1"><титле> Пример МВЦ гуруа титле>хеад><боди><форм ацтион = "Мвц_сервлет" метход = "ПОСТ">Е-адреса: <инпут типе = "тект" наме = "емаил"><бр />Лозинка: <инпут типе = "тект" наме = "пассворд" /><инпут типе = "субмит" валуе = "Субмит" />форм>боди>хтмл>
Објашњење кода:
Виев Лаиер:
Линија кода 10-15: Овде узимамо образац који има два поља као параметар "е-пошта" и "лозинка" и овај захтев треба проследити контролору Мвц_сервлет.јава, који се прослеђује у акцији. Метода кроз коју се је ПОСТ метода.
Мвц_сервлет.јава
пакет демотест;импорт јава.ио.ИОЕкцептион;импорт јавак.сервлет.РекуестДиспатцхер;импорт јавак.сервлет.СервлетЕкцептион;импорт јавак.сервлет.хттп.ХттпСервлет;импорт јавак.сервлет.хттп.ХттпСервлетРекуест;импорт јавак.сервлет.хттп.ХттпСервлетРеспонсе;/ *** Класа имплементације сервлета Мвц_сервлет* /јавна класа Мвц_сервлет проширује ХттпСервлет {приватни статички финал лонг сериалВерсионУИД = 1Л;/ *** @сее ХттпСервлет # ХттпСервлет ()* /публиц Мвц_сервлет () {супер ();// ТОДО Аутоматски генерисани стуб конструктора}заштићена воид доПост (захтев ХттпСервлетРекуест, одговор ХттпСервлетРеспонсе) баца СервлетЕкцептион, ИОЕкцептион {// ТОДО Аутоматски генерисани квар методеСтринг емаил = рекуест.гетПараметер ("емаил");Стринг пассворд = рекуест.гетПараметер ("лозинка");ТестБеан тестобј = нови ТестБеан ();тестобј.сетЕмаил (емаил);тестобј.сетПассворд (лозинка);рекуест.сетАттрибуте ("гурубеан", тестобј);РекуестДиспатцхер рд = рекуест.гетРекуестДиспатцхер ("мвц_суццесс.јсп");рд.форвард (захтев, одговор);}}
Објашњење кода:
Слој контролера
Линија кода 14: мвц_сервлет проширује ХттпСервлет.
Линија кода 26: Како се користи метода ПОСТ, стога захтев долази у доПост методу сервлета који обрађује захтеве и чува у објекту пасуља као тестобј.
Линија 34: Користећи објекат захтева постављамо атрибут као гурубеан којем се додељује вредност тестобј.
Редак 35: Овде користимо објекат диспечера захтева за прослеђивање поруке о успеху на мвц_суццесс.јсп
ТестБеан.јава
пакет демотест;импорт јава.ио.Сериализабле;јавна класа ТестБеан имплементира Сериализабле {јавни Стринг гетЕмаил () {врати е-маил;}публиц воид сетЕмаил (Стринг емаил) {тхис.емаил = емаил;}јавни Стринг гетПассворд () {вратити лозинку;}публиц воид сетПассворд (Стринг лозинка) {тхис.пассворд = лозинка;}приватни низ е-поште = "нулл";приватни низ лозинке = "нулл";}
Објашњење кода:
Слој модела:
Редак 7-17: Садржи гетере и постављаче е-поште и лозинке који су чланови класе Тест Беан
Линија кода 19-20: Дефинише чланску е-пошту и лозинку типа стринга у класи беан.
Мвц_суццесс.јсп
<% @ паге лангуаге = "јава" цонтентТипе = "тект / хтмл; цхарсет = ИСО-8859-1"пагеЕнцодинг = "ИСО-8859-1"%><% @ паге импорт = "демотест.ТестБеан"%><хтмл><хеад><мета хттп-екуив = "Цонтент-Типе" цонтент = "тект / хтмл; цхарсет = ИСО-8859-1"><титле> Гуру успех титле>хеад><боди><%ТестБеан тестгуру = (ТестБеан) рекуест.гетАттрибуте ("гурубеан");оут.принт ("Добродошли," + тестгуру.гетЕмаил ());%>боди>хтмл>
Објашњење кода:
Линија 12: добијамо атрибут помоћу објекта захтева који је постављен у доПост методи сервлета.
Линија кода 13: Штампамо поруку добродошлице и ИД е-поште који су сачувани у објекту пасуља
Излаз:
Када извршите горњи код, добићете следећи излаз:
Када кликнете на мвц_екампле.јсп, добијате образац са е-поштом и лозинком са дугметом за слање.
Једном када унесете е-маил и лозинку у образац, а затим кликните на Пошаљи
Након клика на слање, излаз се приказује као доле
Излаз:
Када на екрану унесете е-пошту и лозинку и кликнете на „Пошаљи“, детаљи се чувају у ТестБеан-у, а из ТестБеан-а се преузимају на следећем екрану да би се добила порука о успеху.
Резиме:
У овом чланку смо сазнали о архитектури МВЦ, тј. Модел Виев Цонтроллер.
ЈСП игра улогу презентације података и контролера. То је интерфејс између модела и приказа, док се модел повезује са контролером, као и са базом података. Главна пословна логика је присутна у слоју модела.