2022. augusztus 24., szerda

Java SpringBoot keretrendszer lényege

A Spring Boot meghatározásához a magyarázatnak a Javával kell kezdődnie, amely az alkalmazásfejlesztés egyik legnépszerűbb és leggyakrabban használt fejlesztési nyelve és számítási platformja. A fejlesztők világszerte a Java megismerésével kezdik a kódolási ismereteiket. A Java rugalmas és felhasználóbarát, számos alkalmazás fejlesztőjének kedvence – legyen szó akár közösségi médiáról, webről, játékalkalmazásokról, akár hálózatkezelésről vagy nagyvállalati alkalmazásokról.
Bár a Java könnyen használható és könnyebben tanulható más nyelvekhez képest, a Java-alkalmazások létrehozásának, hibakeresésének és telepítésének bonyolultsága szédítő magasságokba emelkedett. Ennek oka, hogy a modern fejlesztőknek exponenciálisan növekvő számú változóval kell szembenéznie webalkalmazások vagy mobilalkalmazások fejlesztésekor az olyan elterjedt modern technológiák esetében, mint a zene streamelés vagy a mobilfizetés. Az alapvető üzletági alkalmazásokat író fejlesztőknek mostanra már több kódtárral, beépülő modullal, hibanaplózással és kódtárak kezelésével, webszolgáltatásokkal és különböző nyelvekkel (például C#, Java, HTML stb.) kell foglalkozniuk. Érthető módon kielégíthetetlen a Java-alkalmazások fejlesztését leegyszerűsítő eszközök iránti igény, hiszen ezzel időt és pénzt spórolnak a fejlesztők.
Adja meg az alkalmazás-keretrendszereket – az előre írt kód nagy törzsét, amelyet a fejlesztők az igényeiknek megfelelően használhatnak és hozzáadhatnak a saját kódjukhoz. Ezek a keretrendszerek szinte bármely esetben csökkenteni tudják a fejlesztő terhelését – akár mobil- és webalkalmazásokat fejlesztenek, akár asztali számítógépekkel és API-kkal dolgoznak. A keretrendszerek az alkalmazások létrehozását gyorsabbá, egyszerűbbé és biztonságosabbá teszik azáltal, hogy újrafelhasználható kódot és eszközöket biztosítanak egy szoftverfejlesztési projekt különböző elemeinek összekapcsolásához.
Így jön szóba a Spring: A Spring egy nyílt forráskódú projekt, amely leegyszerűsített, moduláris megközelítést biztosít az alkalmazások Javás létrehozásához. A Spring-projektek családja 2003-ban indult el válaszként a korai Java-fejlesztés bonyolultságára, támogatást nyújtva a Java-alkalmazások fejlesztéséhez. Maga a Spring név általában az alkalmazás keretrendszerére, esetleg a projektek vagy modulok teljes csoportjára utal. A Spring Boot a Spring-keretrendszer kiterjesztéseként elkészült egyik modul.
Most, hogy már ismerjük a Spring-keretrendszer, a Spring Boot és Java együttes működését, itt a Spring Boot definíciója – az eszköz, amely leegyszerűsíti és felgyorsítja a webalkalmazások és mikroszolgáltatások fejlesztését a Java-keretrendszerben, a Springben.
Mivel a programnyelv és/vagy a platformja Java, néha „Java Spring Boot”, „Java Spring-keretrendszer” vagy „Spring Boot keretrendszer” néven is említik. Mivel azonban vannak más, külső Java-keretrendszerek, például a Play and Hibernate, pontosabb, ha a „Spring” és a „Spring Boot” nevet használjuk.

A Spring keretrendszer több önálló modulból épül fel, amelyek az alábbi szolgáltatásokat nyújtják a fejlesztők számára:

Inversion of control konténer: a Java objektumok életciklusának kezelése és az alkalmazás-komponensek testreszabása.
Aspektus orientált programozási paradigma követésének lehetősége.
Adatelérés: lehetőség van relációs adatbázis-kezelő rendszerek JDBC segítségével történő elérésre, és objektum-relációs leképzések, NoSQL integrálására.
Tranzakciókezelés: többféle tranzakció kezelő API-t tartalmaz.
Modell-nézet-vezérlő szabvány: egy HTTP- és servlet alapú keretrendszer segítségével valósítható meg, amelyet arra fejlesztettek ki, hogy bővíthetők és személyre szabhatóak legyenek a webszolgáltatások
Távoli eljáráshívás kezelő keretrendszer: biztosítja a RPC alapú, hálózaton keresztül történő Java objektum importokat és exportokat. További támogatást nyújt a RMI, a CORBA és HTTP alapú protokollok használatára, beleértve a webszolgáltatásokat (SOAP) is.
Kötegelési eljárás támogatása.
Azonosítás és azonosságkezelés: biztonsági folyamatok konfigurálása, melyet a Spring projekthez tartozó, Spring Security alprojekt tesz lehetővé a különféle protokollok és módszerek biztosításával.
Üzenetkezelés: a JMS API-n keresztül történő általános üzenetkezelés továbbfejlesztése érhető el.
Tesztelés: segítséget nyújt a unit- és az integrációs teszt írására.

Példák; http://faragocsaba.hu/spring

Kezdő lépések a standard dialektusokkal 5 perc alatt
Ez az útmutató átvezet néhány legfontosabb fogalmakon, amelyeket tudnod kell a Standard vagy SpringStandard dialektusban írt Thymeleaf sablon megértéséhez. Nem helyettesíti az oktatóanyagokat – amelyek sokkal átfogóbbak –, de eleget tanít a technológia átéléséhez.

Szabványos dialektusok?
A Thymeleaf nagyon-nagyon bővíthető, és lehetővé teszi saját sablonattribútum-készletek (vagy akár címkék) meghatározását a kívánt névvel, kiértékelve a kívánt szintaxisban kívánt kifejezéseket, és alkalmazva a kívánt logikát. Ez inkább egy sablonmotor-keretrendszer .

Mindazonáltal a dobozból egy szabványos dialektusnak nevezett ( Standard és SpringStandard néven ) található, amelyek meghatározzák a funkciókat, amelyek a legtöbb esetben elegendőek. Meghatározhatja, hogy ezeket a szabványos dialektusokat mikor használják egy sablonban, mert az thelőtaggal kezdődő attribútumokat fog tartalmazni, például <span th:text="...">.

Ne feledje, hogy a Standard és a SpringStandard dialektusok majdnem azonosak, kivéve, hogy a SpringStandard speciális funkciókat tartalmaz a Spring MVC alkalmazásokba való integráláshoz (például a Spring Expression Language használatát a kifejezések kiértékeléséhez az OGNL helyett ).

Azt is meg kell jegyezni, hogy általában a standard dialektusok jellemzőire hivatkozunk, amikor a Thymeleafről beszélünk anélkül, hogy konkrétabbak lennénk.

Szabványos kifejezés szintaxis
A legtöbb Thymeleaf attribútum lehetővé teszi, hogy értékeit kifejezésekként vagy kifejezésekként állítsák be, amelyeket szabványos kifejezéseknek nevezünk a használatuk miatt használt dialektusok miatt. Ezeknek öt típusa lehet:

${...}: Változó kifejezések.
*{...}: Kijelölési kifejezések.
#{...}: Üzenet (i18n) kifejezések.
@{...}: Link (URL) kifejezések.
~{...}: Töredékes kifejezések.
Változó kifejezések
A változókifejezések OGNL-kifejezések – vagy Spring EL, ha a Thymeleaf-et a Spring-szel integrálja – a kontextusváltozókon hajtódnak végre – a Spring szakzsargonban modellattribútumoknak is nevezik . Így néznek ki:

${session.user.name}
És megtalálja őket attribútumértékként vagy azok részeként, az attribútumtól függően:

<span th:text="${book.author.name}">
A fenti kifejezés egyenértékű (az OGNL-ben és a SpringEL-ben is) a következővel:

((Book)context.getVariable("book")).getAuthor().getName()
De találhatunk változó kifejezéseket olyan forgatókönyvekben, amelyek nem csak kimenetet tartalmaznak , hanem összetettebb feldolgozást is, például feltételes feltételeket , iterációt …

<li th:each="book : ${books}">
Itt ${books}kiválasztja a bookskontextusból meghívott változót, és ciklusban használandó iterablekéntth:each értékeli ki .

Kiválasztási kifejezések
A kijelölési kifejezések olyanok, mint a változókifejezések, azzal a különbséggel, hogy a teljes kontextusváltozó-leképezés helyett egy korábban kiválasztott objektumon kerülnek végrehajtásra. Így néznek ki:

*{customer.name}
Az objektumot, amelyen működnek, egy th:objectattribútum határozza meg:

<div th:object="${book}">
  ...
  <span th:text="*{title}">...</span>
  ...
</div>
Tehát ez egyenértékű lenne:

{
  // th:object="${book}"
  final Book selection = (Book) context.getVariable("book");
  // th:text="*{title}"
  output(selection.getTitle());
}
Üzenet (i18n) kifejezések
Az üzenetkifejezések (amelyeket gyakran szövegkihelyezésnek , nemzetközivé tételnek vagy i18n -nek neveznek ) lehetővé teszik számunkra, hogy lekérjük a terület-specifikus üzeneteket külső forrásokból ( .propertiesfájlokból), kulccsal hivatkozva rájuk, és (opcionálisan) paraméterkészletet alkalmazva.

A tavaszi alkalmazásokban ez automatikusan integrálódik a Spring MessageSourcemechanizmusába.

#{main.title}
#{message.entrycreated(${entryId})}
Megtalálhatja őket az alábbi sablonokban:

<table>
  ...
  <th th:text="#{header.address.city}">...</th>
  <th th:text="#{header.address.country}">...</th>
  ...
</table>
Vegye figyelembe, hogy változókifejezéseket használhat az üzenetkifejezéseken belül , ha azt szeretné, hogy az üzenet kulcsát egy kontextusváltozó értéke határozza meg, vagy változókat kíván paraméterként megadni:

#{${config.adminWelcomeKey}(${session.user.name})}
Link (URL) kifejezések
A hivatkozáskifejezések célja URL-ek létrehozása, valamint hasznos kontextus- és munkamenet-információk hozzáadása (ezt a folyamatot általában URL-újraírásnak nevezik ).

Tehát a webszerver környezetében telepített /myappwebalkalmazások esetében a következő kifejezések:

<a th:href="@{/order/list}">...</a>
Valami ilyesmire lehetne konvertálni:

<a href="/myapp/order/list">...</a>
Vagy akár ez is, ha meg kell tartanunk a munkameneteket, és a cookie-k nincsenek engedélyezve (vagy a szerver még nem tudja):

<a href="/myapp/order/list;jsessionid=23fa31abd41ea093">...</a>
Az URL-ek paramétereket is felvehetnek:

<a th:href="@{/order/details(id=${orderId},type=${orderType})}">...</a>
Valami ilyesmit eredményez:

<!-- Note ampersands (&) should be HTML-escaped in tag attributes... -->
<a href="/myapp/order/details?id=23&amp;type=online">...</a>
A linkkifejezések lehetnek relatívak, ebben az esetben nem lesz alkalmazáskontextus az URL előtagjaként:

<a th:href="@{../documents/report}">...</a>
Szintén szerverrelatív (ismét nem kell előtagot adni az alkalmazáskontextusnak):

<a th:href="@{~/contents/main}">...</a>
És protokoll-relatív (mint az abszolút URL-ek, de a böngésző ugyanazt a HTTP vagy HTTPS protokollt fogja használni, mint a megjelenített oldalon):

<a th:href="@{//static.mycompany.com/res/initial}">...</a>
És természetesen a linkkifejezések abszolútak lehetnek:

<a th:href="@{http://www.mycompany.com/main}">...</a>
De várjunk csak, egy abszolút (vagy protokoll-relatív) URL-ben… milyen értéket ad hozzá a Thymeleaf Link Expression? egyszerű: válaszszűrők által meghatározott URL-újraírás lehetősége : Servlet alapú webalkalmazásokban minden kiírt URL-hez (környezet-relatív, relatív, abszolút…) A Thymeleaf mindig meghívja a HttpServletResponse.encodeUrl(...)mechanizmust az URL megjelenítése előtt. Ez azt jelenti, hogy egy szűrő személyre szabott URL-átírást végezhet az alkalmazás számára az HttpServletResponseobjektum becsomagolásával (egy általánosan használt mechanizmus).

Töredékes kifejezések
A töredékkifejezések egyszerű módszert jelentenek a jelölés töredékeinek ábrázolására és mozgatására a sablonok között. Ezeknek a kifejezéseknek köszönhetően a töredékek replikálhatók, argumentumként továbbíthatók más sablonokhoz stb.

A leggyakrabban használt fragmentum beszúrása a th:insertvagy használatával th:replace:

<div th:insert="~{commons :: main}">...</div>
De bárhol használhatók, mint bármely más változó:

<div th:with="frag=~{footer :: #main/text()}">
  <p th:insert="${frag}">
</div>
A töredékkifejezéseknek lehetnek argumentumai:

Literálok és műveletek
Jó csomó típusú literál és művelet áll rendelkezésre:

Szó szerint:
Szöveg literálok: 'one text', 'Another one!',…
Számliterálok: 0, 34, 3.0, 12.3,…
Logikai literálok: true,false
Null szó szerinti érték:null
Szó szerinti tokenek: one, sometext, main,…
Szöveges műveletek:
Karakterlánc összefűzése:+
Szó szerinti helyettesítések:|The name is ${name}|
Aritmetikai műveletek:
Bináris operátorok: +, -, *, /,%
Mínusz jel (egyetlen operátor):-
Logikai műveletek:
Bináris operátorok: and,or
Logikai negáció (unáris operátor): !,not
Összehasonlítások és egyenlőség:
Összehasonlítók: >, <, >=, <=( gt, lt, ge, le)
Egyenlőségi operátorok: ==, !=( eq, ne)
Feltételes operátorok:
Ha akkor:(if) ? (then)
Ha-akkor-másként:(if) ? (then) : (else)
Alapértelmezett:(value) ?: (defaultvalue)
Kifejezés előfeldolgozása
Egy utolsó dolog, amit tudni kell a kifejezésekről, hogy van valami, amit kifejezés-előfeldolgozásnak neveznek , és között van megadva __, és így néz ki:

#{selection.__${sel.code}__}
Amit ott látunk, az egy változó kifejezés ( ${sel.code}), amely először végrehajtásra kerül, és amely eredmény – mondjuk „ ALL” – a valódi kifejezés részeként lesz használva, amelyet ezután végre kell hajtani, ebben az esetben egy nemzetköziesítési kifejezést (ami keresse meg az üzenetet a kulccsal selection.ALL).

Néhány alapvető tulajdonság
Vessünk egy pillantást a Standard Dialektus néhány legalapvetőbb tulajdonságára. Kezdve a -val th:text, amely csak a címke törzsét helyettesíti (figyelje meg ismét a prototípus-készítési képességeket):

<p th:text="#{msg.welcome}">Welcome everyone!</p>
Most th:each, amely annyiszor ismétli meg azt az elemet, amelyben van, ahányszor a kifejezése által visszaadott tömb vagy lista megadja, és létrehoz egy belső változót is az iterációs elemhez, amelynek szintaxisa megegyezik a Java foreach kifejezésével:

<li th:each="book : ${books}" th:text="${book.title}">En las Orillas del Sar</li>
Végül a Thymeleaf számos thattribútumot tartalmaz adott XHTML és HTML5 attribútumokhoz, amelyek csak kiértékelik a kifejezéseiket, és beállítják az attribútumok értékét az eredményükhöz. Nevük az általuk beállított attribútumok nevét utánozza:

<form th:action="@{/createOrder}">
<input type="button" th:value="#{form.submit}" />
<a th:href="@{/admin/users}">

Thymeleaf alkalmazás

A Thymeleaf egy Java könyvtár. Ez egy XML/XHTML/HTML5 sablonmotor, amely képes egy sor átalakítást alkalmazni a sablonfájlokra az alkalmazások által előállított adatok és/vagy szövegek megjelenítése érdekében. Az XHTML/HTML5 webes alkalmazásokban való kiszolgálására alkalmasabb, de bármilyen XML fájlt képes feldolgozni, legyen az webes vagy önálló alkalmazásokban. A Thymeleaf fő célja, hogy elegáns és jól formált sablonokat biztosítson. Ennek elérése érdekében XML-címkéken és attribútumokon alapul, amelyek meghatározzák az előre meghatározott logika végrehajtását a DOM-on (Document Object Model) ahelyett, hogy ezt a logikát kifejezetten kódként írnák be a sablonon belül.

Architektúrája lehetővé teszi a sablonok gyors feldolgozását, az elemzett fájlok intelligens gyorsítótárazására támaszkodva annak érdekében, hogy a végrehajtás során a lehető legkevesebb I/O műveletet használja fel.

És végül, de nem utolsósorban, a Thymeleaf-et a kezdetektől az XML és a webes szabványok figyelembevételével tervezték, lehetővé téve, hogy teljes mértékben érvényesítő sablonokat hozzon létre, ha erre szükség van.

Oktatási anyag; https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html

Nincsenek megjegyzések:

Megjegyzés küldése