JavaRush /Курсхо /All lectures for TG purposes /Эътирофкунии пешкашҳо

Эътирофкунии пешкашҳо

All lectures for TG purposes
Сатҳи , Дарс
дастрас

Spring MVC интерфейсҳои ViewResolver ва View-ро муайян мекунад, ки имкон медиҳад, ки моделҳо дар броузер намоиш дода шаванд, бе он ки шумо ба технологияҳои мушаххаси пешкаш вобаста бошед. ViewResolver муносибати байни номҳои пешкаш ва пешкашҳои воқеиро таъмин мекунад. View ба тайёр кардани маълумот пеш аз интиқол ба технологияи мушаххаси пешкаш машғул аст.

Дар ҷадвали зерин маълумоти бештар дар бораи иерархия ViewResolver пешниҳод карда мешавад:

Ҷадвали 3. Амалигардонии ViewResolver
ViewResolver Тавсиф

AbstractCachingViewResolver

Пешфосилаи AbstractCachingViewResolver намунаҳои пешкашеро, ки онҳо эътироф мекунанд, кэш мекунанд. Кэшкунонӣ иҷроиши технологияи аниқро беҳтар мекунад. Кэшро ғайрифаъол кардан мумкин аст, бо гузоштани хосияти cache ба false. Илова бар ин, агар ба шумо лозим ояд, ки расмро дар вақти иҷрои барнома нав кунед (масалан дар ҳолати тағйири шаблони FreeMarker), метавонед аз усули removeFromCache(String viewName, Locale loc) истифода баред.

UrlBasedViewResolver

Амалӣкунии соддаи интерфейси ViewResolver, ки таъйини бевоситаи номҳои мантиқии пешкашҳоро ба URL-ҳо бидуни таъйини намомаи ҳатмии эзоҳ фароҳам меорад. Ин муфид аст, агар номҳои мантиқии пешкаши шумо бо номҳои захираҳои пешкаши шумо мувофиқ бошанд.

InternalResourceViewResolver

Пешфосилаи муфиди UrlBasedViewResolver, ки InternalResourceView (асосан servlet ва JSP) ва пешфосилаҳои он, мисли JstlView ва TilesView-ро дастгирӣ мекунад. Класи пешкашро барои тамоми пешкашҳои, ки ин эътирофкунанда тавлид менамояд, истифода бурдан мумкин аст бо истифодаи setViewClass(..). Маълумоти бештарро дар javadoc-и UrlBasedViewResolver бубинед.

FreeMarkerViewResolver

Пешфосилаи муфиди UrlBasedViewResolver, ки FreeMarkerView ва пешфосилаҳои инфиродии онҳоро дастгирӣ мекунад.

ContentNegotiatingViewResolver

Амалӣкунии интерфейси ViewResolver, ки пешкашро дар асоси номи файли дархост ё сарлавҳаи Accept эътироф мекунад.

BeanNameViewResolver

Амалӣкунии интерфейси ViewResolver, ки номи пешкашро ҳамчун номи bean дар контексти кунунии барнома тафсир мекунад. Ин варианти бисёр чандир аст, ки имкон медиҳад, ки намудҳои гуногуни пешкашҳоро дар асоси номҳои гуногунро бо ҳам омехта ва мувофиқ кард. Ҳар як чунин амалӣкунии View-ро метавон ҳамчун bean муайян кард, масалан, дар классҳои XML ё дар классҳои конфигуратсионӣ.

Коркарди маълумот

Шумо метавонед занҷири эътирофкунандаҳои пешкашро созед, бо эълон кардани зиёда аз як bean-и эътирофкунанда ва, агар лозим бошад, танзим кардани хосияти order барои муайян кардани тартиб. Ба ёд оред, ки ҳар қадаре, ки хосияти тартиб баланд бошад, эътирофкунандаи пешкаш дертар дар занҷир ҷойгир аст.

Шартномаи ViewResolver муайян мекунад, ки он метавонад null баргардонад, то ки муайян шавад, ки пешкашро ёфтан мумкин нест. Аммо дар ҳолати истифодаи JSP ва InternalResourceViewResolver танҳо усул барои маълум кардан, ки оё JSP вуҷуд дорад, ин иҷрои диспетчеризатсия тавассути RequestDispatcher аст. Аз ин рӯ, ҳамеша лозим аст, ки InternalResourceViewResolver дар конфигуратсия охиринтар дар тартиби умумии эътирофкунандаҳои пешкаш ҷойгир бошад.

Амалигардонии эътирофи пешкашҳо осон аст, ҳамон тавр ки beans-и ViewResolver-ро ба конфигуратсияи Spring илова кунем. MVC Config API махсуси конфигуратсияро барои эътирофкунандаҳои пешкаш пешниҳод мекунад ва барои илова кардани контроллерҳои пешкаш, ки алгоритм надоранд, ки барои намоиши шаблони HTML без алгоритм муфиданд.

Азнавравонадан

Префикси махсуси redirect: дар номи пешкаш имкон медиҳад, ки азнавравонадан иҷрошаванда бошад. UrlBasedViewResolver (ва пешфосилаҳои он) инро ҳамчун фармони барои иҷро кардани азнавравонадани зарурӣ мешиносад. Боқимондаи номи пешкаш URL-и азнавравонадан аст.

Натиҷаи ниҳоӣ ин ҳамон тавре аст, ки гӯё контроллер RedirectView-ро бармегардонад, лекин акнун худи контроллер метавонад бо номҳои мантиқии пешкаш кор кунад. Номи мантиқии пешкаш (масалан, redirect:/myapp/some/resource) нисбат ба контексти ҷории servlet азнавравонаданро иҷрошаванда мекунад, дар ҳоле ки номи, мисли redirect:https://myhost.com/some/arbitrary/path, ба URL-и мутлақ азнавравонадан мекунад.

Ба назар гиред, ки агар усули контроллер бо @ResponseStatus аннотатсия карда шуда бошад, арзиши аннотатсия нисбат ба статуси ҷавоб, ки RedirectView муқаррар мекунад, афзалият дорад.

Пешнинҳодкунии захира

Шумо инчунин метавонед аз префикси махсуси forward: барои номҳои пешкаш истифода баред, ки дар охир UrlBasedViewResolver ва пешфосилаҳо гуфта мешавад. Ин InternalResourceView-ро месозад, ки RequestDispatcher.forward()-ро иҷрошаванда мекунад. Аз ин рӯ, ин префикс ҳангоми истифодаи InternalResourceViewResolver ва InternalResourceView (барои JSP) бесамар аст, лек шояд муфид бошад, агар технологияи дигари пешкаш истифода шавад, лек ҳанӯз лозим бошад, ки захира ба таври ҷиддӣ барои коркард ба контейнерҳои servlet/JSP равона карда шавад. Ба назар гиред, ки аз ҷои ин, метавон занҷири якчанд эътирофкунандаҳои пешкашро васл кард.

Созишномаи мазмун

ContentNegotiatingViewResolver худи пешкашҳоро намешиносад, балки ин корро ба дигар эътирофкунандаҳои пешкаш вогузор мекунад ва пешкаше, ки муштари мехоҳад, интихоб мекунад. Пешкаш метавонад аз сарлавҳаи Accept ё аз параметри дархост (масалан, "/path?format=pdf") муайян карда шавад.

ContentNegotiatingViewResolver барои коркарди дархост бо муқоиса кардани намудҳои маълумоти дархост бо намуди маълумот (ҳамчунин чун Content-Type маълум) пешкаши мувофиқро интихоб мекунад, ки бо View-и алоқаманди ҳар яке аз ViewResolvers-и он дастгирӣ карда мешавад. Аввалин View дар рӯйхат, ки Content-Type-и мувофиқ дорад, пешкашро ба муштарӣ бармегардонад. Агар занҷири ViewResolver натавонад пешкаши мувофиқро диҳад, рӯйхати пешкашҳое, ки дар хосияти DefaultViews муқаррар шудааст, истифода мешавад. Ин варианти охирин барои якка Views муфид аст, ки метавонанд пешкаши мувофиқи захираи ҳозираро мустақил аз номи мантиқии пешкаш намоиш диҳанд. Сарлавҳаи Accept метавонад вахшиҳо (масалан, text/*) дошта бошад, дар ин ҳолат, View, ки Content-Type-и он text/xml мебошад, мувофиқ мешавад.

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION