Penge - teljes útmutató
1. Áttekintés
A Blade egy apró Java 8+ MVC keretrendszer, amely a semmiből épül fel, néhány világos célt szem előtt tartva: önálló, produktív, elegáns, intuitív és szupergyors.
Számos különböző keret inspirálta a tervezését: a Node Express, a Python lombikja és Golang Macaron / Martini.
A Blade egy ambiciózusan nagyobb projekt, a Let's Blade része is. Ez magában foglalja a többi kis könyvtár heterogén gyűjteményét, a Captcha generálástól a JSON konverzióig, a sablonoktól az egyszerű adatbázis-kapcsolatokig.
Ebben az oktatóanyagban azonban csak az MVC-re fogunk koncentrálni.
2. Az első lépések
Először hozzunk létre egy üres Maven projektet, és adjuk hozzá a legújabb Blade MVC függőséget a pom.xml:
com.bladejava blade-mvc 2.0.14. KÖZLEMÉNY
2.1. Blade alkalmazás csomagolása
Mivel az alkalmazásunkat JAR-ként hozzuk létre, ezért nem lesz / lib mappa, mint egy WAR-ban. Ennek eredményeként ez arra a problémára vezet minket, hogy miként nyújtsuk a penge-mvc A JAR, valamint bármely más szükséges JAR az alkalmazásunkhoz.
Ennek különféle módjait, előnyeivel és hátrányaival, a Hogyan készítsünk futtatható JAR-ot Maven-lel bemutató részben ismertetjük.
Az egyszerűség kedvéért, használjuk a Maven Assembly plugin technika, amely felrobban minden, a pom.xml és ezt követően az összes osztályt egyetlen uber-JAR-ba csomagolja.
2.2. Blade alkalmazás futtatása
A Blade Netty-re épül, egy csodálatos aszinkron eseményvezérelt hálózati alkalmazás keretrendszer. Ezért a Blade-alapú alkalmazásunk futtatásához nincs szükségünk külső alkalmazáskiszolgálóra vagy Servlet-konténerre; a JRE elég lesz:
java -jar target / sample-blade-app.jar
Ezt követően az alkalmazás elérhető lesz a // localhost: 9000 URL.
3. Az építészet megértése
A Blade felépítése nagyon egyszerű:
Mindig ugyanazt az életciklust követi:
- Netty kérést kap
- Középáruk kerülnek végrehajtásra (opcionális)
- A WebHooks végrehajtásra kerül (opcionális)
- Az útválasztás végrehajtásra kerül
- A választ elküldik az ügyfélnek
- Takarítás
A fenti funkciókat a következő szakaszokban vizsgáljuk meg.
4. Útválasztás
Röviden: az MVC-ben történő útválasztás az a mechanizmus, amelyet az URL és a vezérlő közötti kötés létrehozására használnak.
A Blade kétféle útvonalat kínál: egy alapot és egy kommentáltat.
4.1. Alapvető útvonalak
Az alapvető útvonalak nagyon kicsi szoftverek, például mikroszolgáltatások vagy minimális webalkalmazások számára készültek:
Blade.of () .get ("/ basic-route-example", ctx -> ctx.text ("GET hívva")) .post ("/ basic-route-example", ctx -> ctx.text (" A POST ")) .put (" / basic-route-example ", ctx -> ctx.text (" PUT hívva ")) .delete (" / basic-route-example ", ctx -> ctx.text (" DELETE nevű ")) .start (App.class, érvel);
Az útvonal regisztrálásához használt módszer neve megegyezik a kérelem továbbítására használt HTTP igével. Ilyen egyszerű az egész.
Ebben az esetben visszaküldünk egy szöveget, de megjeleníthetjük az oldalakat is, amint később a bemutatóban láthatjuk.
4.2. Jegyzetekkel ellátott útvonalak
Természetesen a reálisabb felhasználási esetekhez az összes szükséges útvonalat annotációk segítségével definiálhatjuk. Ehhez külön osztályokat kell használnunk.
Először is létre kell hoznunk egy vezérlőt a @Pálya annotáció, amelyet a Blade az indításkor beolvas.
Ezután használnunk kell az útvonaljegyzetet az elfogni kívánt HTTP-módszerhez:
@Path public class RouteExampleController {@GetRoute ("/ route-example") public String get () {return "get.html"; } @PostRoute ("/ route-example") public String post () {return "post.html"; } @PutRoute ("/ route-example") public String put () {return "put.html"; } @DeleteRoute ("/ route-example") public String delete () {return "delete.html"; }}
Használhatjuk az egyszerűt is @Útvonal megjegyzéssel és paraméterként adja meg a HTTP metódust:
@Route (value = "/ another-route-example", method = HttpMethod.GET) public String anotherGet () {return "get.html"; }
Másrészről, ha nem adunk meg metódusparamétert, az útvonal minden HTTP-hívást elfog az adott URL-re, nem számít az ige.
4.3. Paraméter injekció
A paraméterek továbbítására az útvonalakra többféle lehetőség van. Fedezzük fel őket a dokumentáció néhány példájával.
- Forma paraméter:
@GetRoute ("/ home") public void formParam (@Param String name) {System.out.println ("név:" + név); }
- Nyugodt paraméter:
@GetRoute ("/ users /: uid") public void restfulParam (@PathParam Integer uid) {System.out.println ("uid:" + uid); }
- Fájl feltöltési paraméter:
@PostRoute ("/ upload") public void fileParam (@MultipartParam FileItem fileItem) {byte [] file = fileItem.getData (); }
- Fejléc paraméter:
@GetRoute ("/ header") public void headerParam (@HeaderParam String referer) {System.out.println ("Referer:" + referer); }
- Cookie paraméter:
@GetRoute ("/ cookie") public void cookieParam (@CookieParam String myCookie) {System.out.println ("myCookie:" + myCookie); }
- Test paraméter:
@PostRoute ("/ bodyParam") public void bodyParam (@BodyParam felhasználói felhasználó) {System.out.println ("user:" + user.toString ()); }
- Érték Object paraméter, az attribútumoknak az útvonalra való elküldésével hívva:
@PostRoute ("/ voParam") public void voParam (@Param felhasználói felhasználó) {System.out.println ("user:" + user.toString ()); }
5. Statikus források
A Blade szükség esetén statikus erőforrásokat is képes kiszolgálni, egyszerűen beillesztve azokat a / resources / static mappába.
Például a src / main / resources / static / app.css címen lesz elérhető //localhost:9000/static/app.css.
5.1. Az útvonalak testreszabása
Ezt a viselkedést egy vagy több statikus út programozott hozzáadásával hangolhatjuk:
blade.addStatics ("/ custom-static");
Ugyanez az eredmény konfigurációval, a fájl szerkesztésével érhető el src / main / resources / application.properties:
mvc.statics = / custom-static
5.2. Az erőforrás-lista engedélyezése
Engedélyezhetjük egy statikus mappa tartalmának felsorolását, amely biztonsági okokból alapértelmezés szerint ki van kapcsolva:
blade.showFileList (true);
Vagy a konfigurációban:
mvc.statics.show-list = true
Most kinyithatjuk a // localhost: 9000 / custom-static / hogy megjelenítse a mappa tartalmát.
5.3. A WebJars használata
Amint az a WebJars bemutatkozása című oktatóanyagban látható, a JAR-ként csomagolt statikus erőforrások is életképes lehetőség.
A Blade automatikusan kiteszi őket a / webjars / pálya.
Például importáljuk a Bootstrap programot a pom.xml:
org.webjars bootstrap 4.2.1
Ennek eredményeként elérhető lesz a //localhost:9000/webjars/bootstrap/4.2.1/css/bootstrap.css
6. HTTP kérés
Mivel A Blade nem a Servlet specifikáción alapul, objektumok, mint a kezelőfelülete Kérés és osztálya HttpRequest kissé eltérnek a megszokottaktól.
6.1. Űrlapparaméterek
Az űrlapparaméterek olvasásakor a Blade nagyszerűen használja a Java-kat Választható a lekérdezési módszerek eredményeiben (az összes metódus egy Választható tárgy):
- lekérdezés (karakterlánc neve)
- queryInt (karakterlánc neve)
- queryLong (karakterlánc neve)
- queryDouble (karakterlánc neve)
Rendelkezésre állnak tartalék értékkel is:
- Karakterlánc lekérdezése (karakterlánc neve, String alapértelmezett értéke)
- int queryInt (karakterlánc neve, int alapértelmezett értéke)
- hosszú lekérdezés hosszú (karakterlánc neve, hosszú alapértelmezett érték)
- dupla lekérdezésDupla (karakterlánc neve, dupla alapértelmezett érték)
Elolvashatunk egy űrlapparamétert az automatizált tulajdonságon keresztül:
@PostRoute ("/ save") public void formParams (@Param String felhasználónév) {// ...}
Vagy a Kérés tárgy:
@PostRoute ("/ save") public void formParams (Request request) {String felhasználónév = request.query ("felhasználónév", "Baeldung"); }
6.2. JSON Data
Most nézzük meg, hogyan lehet leképezni egy JSON objektumot egy POJO-ra:
curl -X POST // localhost: 9000 / users -H 'Content-Type: application / json' \ -d '{"name": "Baeldung", "site": "baeldung.com"}'
POJO (az olvashatóság érdekében a Lombokhoz fűzve):
public class Felhasználó {@Getter @Setter private String név; @Getter @Setter privát String webhely; }
Ismét az érték a beadott tulajdonságként érhető el:
@PostRoute ("/ users") public void bodyParams (@BodyParam felhasználói felhasználó) {// ...}
És a Kérés:
@PostRoute ("/ users") public void bodyParams (Request request) {String bodyString = request.bodyToString (); }
6.3. RESTful paraméterek
RESTFul paraméterek szép URL-ekben, például localhost: 9000 / user / 42 első osztályú polgárok is:
@GetRoute ("/ user /: id") public void user (@PathParam Integer id) {// ...}
Szokásunk szerint támaszkodhatunk a Kérés objektum, ha szükséges:
@GetRoute ("/ user") public void user (Request request) {Egész szám id = request.pathInt ("id"); }
Nyilvánvaló, hogy ugyanaz a módszer áll rendelkezésre Hosszú és Húr típusok is.
6.4. Kötelező adatok
A Blade támogatja a JSON és a Form összerendelési paramétereket, és automatikusan csatolja őket a modellobjektumhoz:
@PostRoute ("/ users") public void bodyParams (felhasználói felhasználó) {}
6.5. Kérés és munkamenet attribútumok
Az API objektumok olvasásához és írásához a Kérés és a Ülés kristálytisztaak.
A két paraméterrel rendelkező, kulcsot és értéket képviselő módszerek azok a mutátorok, amelyekkel az értékeinket a különböző kontextusokban tárolhatjuk:
Munkamenet = request.session (); request.attribute ("request-val", "Some Request érték"); session.attribute ("session-val", 1337);
Másrészt ugyanazok a módszerek, amelyek csak a kulcsparamétert fogadják el, a hozzáférők:
String requestVal = request.attribute ("request-val"); String sessionVal = session.attribute ("session-val"); // Ez egy egész szám
Érdekes tulajdonság a Generic return típusú T, amely megment minket az eredmény leadásának szükségességétől.
6.6. Fejlécek
A kérelem fejlécei éppen ellenkezőleg, csak a kérésből olvashatók ki:
String header1 = request.header ("a-header"); String header2 = request.header ("a-safe-header", "alapértelmezett értékkel"); Map allHeaders = request.headers ();
6.7. segédprogramok
A következő segédprogram-módszerek már dobozon kívül is elérhetők, és annyira egyértelműek, hogy nem kell további magyarázat:
- logikai isIE ()
- logikai isAjax ()
- String contentType ()
- Karakterlánc userAgent ()
6.8. Sütik olvasása
Lássuk, hogyan Kérés objektum segít a sütik kezelésében, különösen a Választható:
Opcionális cookieRaw (karakterlánc neve);
A-ként is megkaphatjuk Húr megadva egy alapértelmezett értéket, amelyet alkalmazni kell, ha nem létezik Cookie:
String cookie (karakterlánc neve, String alapértelmezett értéke);
Végül így olvashatjuk el az összes sütit egyszerre (kulcsok a sütik neve, értékek a sütik értékei):
Térkép sütik = request.cookies ();
7. HTTP válasz
Analóg ahhoz, amit a Kérés, hivatkozást szerezhetünk a Válasz objektumot egyszerűen deklarálva az útválasztási módszer paramétereként:
@GetRoute ("/") public void home (Válasz válasz) {}
7.1. Egyszerű kimenet
Könnyen elküldhetünk egy egyszerű kimenetet a hívónak az egyik praktikus kimeneti módszerrel, egy 200 HTTP-kóddal és a megfelelő Content-Type-tal együtt.
Először sima szöveget küldhetünk:
response.text ("Helló világ!");
Másodszor előállíthatunk egy HTML-t:
response.html ("");
Harmadszor, mi is létrehozhatunk egy XML-t:
response.xml ("Helló világ!");
Végül kimenhetjük a JSON-t az a használatával Húr:
response.json ("{\" A válasz \ ": 42}");
És még egy POJO-tól is, kihasználva az automatikus JSON-átalakítást:
Felhasználó felhasználó = új felhasználó ("Baeldung", "baeldung.com"); response.json (felhasználó);
7.2. File Output
A fájl letöltése a szerverről nem lehet egyszerűbb:
response.download ("the-file.txt", "/path/to/the/file.txt");
Az első paraméter a letölthető fájl nevét állítja be, míg a második (a File objektum, itt a Húr) a szerver aktuális fájljának elérési útját jelöli.
7.3. Sablonmegjelenítés
A Blade oldalakat is megjeleníthet sablonmotoron keresztül:
response.render ("admin / users.html");
A sablonok alapértelmezett könyvtár src / main / resources / templates /, ezért az előző egyvonalas megkeresi a fájlt src / main / resources / templates / admin / users.html.
Erről később, a Sablonozás szakasz.
7.4. Átirányítás
Az átirányítás azt jelenti, hogy egy 302 HTTP-kódot kell elküldeni a böngészőnek, egy URL-kel együtt, amelyet egy második GET-nek kell követnie.
Átirányíthatunk egy másik útvonalra vagy egy külső URL-re is:
response.redirect ("/ cél-útvonal");
7.5. Sütik írása
Ezen a ponton hozzá kell szoknunk a Blade egyszerűségéhez. Lássuk tehát, hogyan írhatunk le nem szűnő Cookie-kat egyetlen kódsorba:
response.cookie ("cookie-name", "Some value here");
Valójában a Cookie eltávolítása ugyanolyan egyszerű:
response.removeCookie ("cookie-név");
7.6. Egyéb műveletek
Végül a Válasz Az objektum számos más módszert biztosít számunkra a műveletek végrehajtására, mint például a Fejlécek írása, a Tartalom-típus beállítása, az Állapot kód beállítása stb.
Vessünk egy pillantást néhányukra:
- Válasz állapota (int állapot)
- Térképfejlécek ()
- A válasz nem található ()
- Térkép sütik ()
- Válasz contentType (String contentType)
- void body (@NonNull byte [] adatok)
- Válaszfejléc (karakterlánc neve, karakterlánc értéke)
8. WebHooks
A WebHook egy elfogó, amelyen keresztül tudunk futtassa a kódot egy útválasztási módszer végrehajtása előtt és után.
WebHook-ot létrehozhatunk a WebHook funkcionális interfész és a előtt() módszer:
@FunctionalInterface nyilvános felület WebHook {logikai előtti (RouteContext ctx); alapértelmezett logikai érték a (RouteContext ctx) után {return true; }}
Ahogy látjuk, utána() alapértelmezett módszer, ezért csak szükség esetén írjuk felül.
8.1. Minden kérés lehallgatása
A @Bab az annotáció megadja a keretrendszer számára, hogy az IoC Container segítségével vizsgálja meg az osztályt.
A vele kommentált WebHook következésképpen globálisan fog működni, és minden URL-hez elkapja a kéréseket:
@Bean public class BaeldungHook megvalósítja a WebHook {@Orride public boolean before (RouteContext ctx) {System.out.println ("[[BaeldungHook] Route előtt hívott módszert"); return true; }}
8.2. Szűkítés URL-re
Elfoghatunk bizonyos URL-eket is, hogy kódot futtassunk csak ezen útvonal-módszerek körül:
Blade.of () .before ("/ user / *", ctx -> System.out.println ("Before:" + ctx.uri ())); .start (App.class, érvel);
8.3. Középáruk
A köztes eszközök elsőbbséget élveznek a WebHook-ok, amelyeket minden szokásos WebHook előtt futtatnak:
nyilvános osztályú BaeldungMiddleware valósítja meg a WebHook {@Orride public boolean before (RouteContext context) {System.out.println ("" [BaeldungMiddleware] Route metódus és más WebHook előtt "); return true; }}
Egyszerűen meg kell határozni őket a @Bab jegyzetekkel, majd deklaratív módon keresztül regisztrálták használat():
Blade.of () .use (új BaeldungMiddleware ()) .start (App.class, érvel);
Ezenkívül a Blade a következő, biztonsággal kapcsolatos, beépített köztes eszközöket tartalmazza, amelyek nevének magától értetődőnek kell lenni:
- BasicAuthMiddleware
- CorsMiddleware
- XssMiddleware
- CsrfMiddleware
9. Konfiguráció
A Blade-ben a konfiguráció teljesen opcionális, mert minden egyezmény alapján a dobozon kívül működik. Az alapértelmezett beállításokat azonban testreszabhatjuk, és új attribútumokat vezethetünk be a src / main / resources / application.properties fájl.
9.1. A konfiguráció elolvasása
Különböző módon olvashatjuk el a konfigurációt, alapértelmezett érték megadásával vagy anélkül, ha a beállítás nem érhető el.
- Indítás közben:
Blade.of () .on (EventType.SERVER_STARTED, e -> {Opcionális verzió = WebContext.blade (). Env ("app.version");}) .start (App.class, érvel);
- Útvonalon belül:
@GetRoute ("/ some-route") public void someRoute () {Karaktersorozók = WebContext.blade (). Env ("app.authors", "Ismeretlen szerzők"); }
- Egyéni betöltőben a BladeLoader felület, felülírva a Betöltés() metódus, és az osztály bejegyzése @Bab:
@Bean public class LoadConfig implementálja a BladeLoader {@Override public void load (Blade blade) {Opcionális verzió = WebContext.blade (). Env ("app.version"); Karaktersorozók = WebContext.blade (). Env ("app.authors", "Ismeretlen szerzők"); }}
9.2. Konfigurációs attribútumok
A több, már konfigurált, de testre szabható beállítás típus szerint csoportosul, és ezen a címen szerepel három oszlopos táblákban (név, leírás, alapértelmezett érték). Hivatkozhatunk a lefordított oldalra is, ügyelve arra, hogy a fordítás tévesen nagybetűket írjon a beállítások nevére. A valós beállítások teljesen kisbetűsek.
A konfigurációs beállítások előtag szerinti csoportosítása egyszerre olvashatóvá teszi őket egy térképre, ami akkor hasznos, ha sok közülük van:
Környezeti környezet = penge.környezet (); Térképtérkép = environment.getPrefix ("alkalmazás"); Karakterlánc verzió = map.get ("verzió"). ToString (); Karaktersorozók = map.get ("szerzők", "Ismeretlen szerzők"). ToString ();
9.3. Több környezet kezelése
Amikor alkalmazásunkat más környezetbe telepítjük, előfordulhat, hogy más beállításokat kell megadnunk, például azokat, amelyek az adatbázis-kapcsolathoz kapcsolódnak. A. Helyett alkalmazás.tulajdonságok fájlt, a Blade lehetőséget kínál az alkalmazás különböző környezetekhez történő konfigurálására. Egyszerűen megtarthatjuk alkalmazás.tulajdonságok az összes fejlesztési beállítással, majd hozzon létre más fájlokat ugyanabban a mappában, mint például application-prod.properties, csak az eltérő beállításokat tartalmazza.
Az indítás során ezután megadhatjuk a használni kívánt környezetet, és a keretrendszer egyesíti a fájlokat a application-prod.properties, és az összes többi alapértelmezett beállítás alkalmazás.tulajdonságok fájl:
java -jar target / sample-blade-app.jar --app.env = prod
10. Sablonozás
A Blade-ben történő sablonozás moduláris szempont. Míg egy nagyon egyszerű sablonmotort integrál, a Views bármilyen professzionális használatához külső sablonmotorra kell támaszkodnunk. Akkor megtehetjük válasszon egy motort a rendelkezésre álló közül a GitHubon található blade-template-motorok tárházában, amelyek FreeMarker, Jetbrick, Kavics, és Sebesség, vagy akár egy burkoló létrehozása egy másik tetszés szerinti sablon importálásához.
Blade szerzője a Jetbricket javasolja, egy másik intelligens kínai projektet.
10.1. Az alapértelmezett motor használata
Az alapértelmezett sablon úgy működik, hogy a különböző kontextusokból származó változókat elemzi a ${} jelölés:
10.2. Külső motor csatlakoztatása
Egy másik sablon motorra váltás szellő! Egyszerűen importáljuk a motor (a Blade burkolójának) függőségét:
com.bladejava blade-template-jetbrick 0.1.3
Ezen a ponton elegendő egy egyszerű konfigurációt írni, hogy utasítsa a keretrendszert az adott könyvtár használatára:
A @Bean public class TemplateConfig végrehajtja a BladeLoader {@Override public void load (Blade blade) {blade.templateEngine (new JetbrickTemplateEngine ()); }}
Ennek eredményeként most minden fájl a src / main / resources / templates / elemzésre kerül az új motorral, amelynek szintaxisa meghaladja az oktatóanyag kereteit.
10.3. Új motor becsomagolása
Új sablonmotor becsomagolásához egyetlen osztályot kell létrehozni, amelynek meg kell valósítania a TemplateEngine felületet, és felülírja a Vakol() módszer:
a void render (ModelAndView modelAndView, Writer író) dobja a TemplateException-t;
Erre a célra megnézhetjük a tényleges Jetbrick burkoló kódját, hogy képet kapjunk arról, hogy ez mit jelent.
11. Naplózás
Penge használ slf4j-api mint naplózási felület.
Tartalmaz egy már konfigurált naplózási megvalósítást, az úgynevezett penge-rönk. Ezért nem kell semmit importálnunk; úgy működik, ahogy van, egyszerűen meghatározva a Logger:
privát statikus végleges org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger (LogExample.class);
11.1. Az integrált napló testreszabása
Abban az esetben, ha módosítani szeretnénk az alapértelmezett konfigurációt, a következő paramétereket kell beállítanunk Rendszertulajdonságokként:
- Naplózási szintek (lehetnek „nyomkövetés”, „hibakeresés”, „információ”, „figyelmeztetés” vagy „hiba”):
# Root Logger com.blade.logger.rootLevel = info # Csomag egyéni naplózási szint com.blade.logger.somepackage = debug # Osztály egyéni naplózási szint com.blade.logger.com.baeldung.sample.SomeClass = nyomkövetés
- Megjelenített információk:
# Dátum és idő com.blade.logger.showDate = hamis # Dátum- és időminta com.blade.logger.datePattern = éééé-HH-nn HH: mm: ss: SSS Z # Szál neve com.blade.logger.showThread = true # Naplózó példány neve com.blade.logger.showLogName = true # Csak az FQCN utolsó része com.blade.logger.shortName = true
- Naplózó:
# Path com.blade.logger.dir =. / Logs # Név (alapértelmezés szerint az aktuális alkalmazásnév) com.blade.logger.name = minta
11.2. Az integrált naplózót kizárva
Bár a már konfigurált integrált naplózó nagyon hasznos a kis projektünk elindításához, könnyen előfordulhat, hogy más könyvtárak importálják saját naplózási megvalósításukat. És ebben az esetben képesek vagyunk eltávolítani az integráltat a konfliktusok elkerülése érdekében:
com.bladejava blade-mvc $ {blade.version} com.bladejava blade-log
12. Testreszabás
12.1. Egyedi kivételkezelés
A keretrendszerbe alapértelmezés szerint egy kivételkezelő is beépített. Kiírja a kivételt a konzolba, és ha app.devMode van igaz, a verem nyomkövetése a weboldalon is látható.
Azonban a Kivételt egy meghatározott módon kezelhetjük a @Bab kiterjesztve a DefaultExceptionHandler osztály:
@Bean nyilvános osztály GlobalExceptionHandler kiterjeszti a DefaultExceptionHandler {@Override public void handle (e kivétel) {if (e BaedungException e) {BaeldungException baeldungException = (BaeldungException) e; Karakterlánc msg = baeldungException.getMessage (); WebContext.response (). Json (RestResponse.fail (msg)); } else {szuper.fogantyú (e); }}}
12.2. Egyéni hibaoldalak
Hasonlóképpen a hibák 404 nem található és 500 Belső Szerver Hiba vékony alapértelmezett oldalakon keresztül kezelik.
Kényszeríthetjük a keretrendszert saját oldalaink használatára azáltal, hogy deklaráljuk őket a alkalmazás.tulajdonságok fájl a következő beállításokkal:
mvc.view.404 = my-404.html mvc.view.500 = my-500.html
Természetesen ezeket a HTML oldalakat a src / main / resources / templates mappába.
Az 500-ason belül ráadásul visszakereshetjük a kivételt üzenet és a stackTrace speciális változóik révén:
500 Belső Szerver Hiba A következő hiba történt : "$ {message}"
$ {stackTrace}
13. Ütemezett feladatok
A keretrendszer másik érdekes tulajdonsága a módszer végrehajtásának ütemezésének lehetősége.
Ez lehetséges az a metódus feljegyzésével @Bab osztály a @Menetrend kommentár:
@Bean public class ScheduleExample {@Schedule (name = "baeldungTask", cron = "0 * / 1 * * *?") Public void runScheduledTask () {System.out.println ("Ez egy ütemezett feladat, amely percenként egyszer fut . "); }}
Valójában a klasszikus cron kifejezéseket használja a Dátum idő koordináták. Ezekről többet olvashatunk az A Guide to Cron Expressions-ban.
Később kihasználhatjuk a Feladatkezelő osztály az ütemezett feladatok műveleteinek elvégzéséhez.
- Szerezzen be minden ütemezett feladatot:
List allScheduledTasks = TaskManager.getTasks ();
- Szerezzen be egy feladatot név szerint:
Task myTask = TaskManager.getTask ("baeldungTask");
- Feladat leállítása név szerint:
logikai érték zárt = TaskManager.stopTask ("baeldungTask");
14. Események
Amint a 9.1 szakaszban már láthattuk, meg lehet hallgatni egy adott eseményt, mielőtt futtatna egyéni kódot.
A Blade a következő eseményeket biztosítja a dobozon kívül:
public enum EventType {SERVER_STARTING, SERVER_STARTED, SERVER_STOPPING, SERVER_STOPPED, SESSION_CREATED, SESSION_DESTROY, SOURCE_CHANGED, ENVIRONMENT_CHANGED}
Míg az első hat könnyen kitalálható, az utolsó kettőnek néhány tippre van szüksége: KÖRNYEZETVÁLTÁS lehetővé teszi számunkra a művelet végrehajtását, ha egy konfigurációs fájl megváltozik, amikor a szerver fel van kapcsolva. SOURCE_CHANGED, ehelyett még nem valósult meg, és csak későbbi felhasználásra használható.
Lássuk, hogyan tehetünk értéket a munkamenetbe, amikor létrejön:
Blade.of () .on (EventType.SESSION_CREATED, e -> {Session session = (Session) e.attribute ("session"); session.attribute ("név", "Baeldung");}) .start (App osztály, érvel);
15. A munkamenet végrehajtása
A munkamenetről beszélve az alapértelmezett megvalósítása tárolja a munkamenet értékeit a memóriában.
Előfordulhat, hogy át akarunk váltani egy másik megvalósításra, hogy gyorsítótárat, kitartást vagy valami mást biztosítsunk. Vegyük például Redist. Először létre kell hoznunk a sajátunkat RedisSession burkoló a Ülés interfész, amint az a HttpSession.
Akkor csak arról lenne szó, hogy tudatja a keretrendszerrel, hogy használni akarjuk. Megtehetjük ugyanúgy, mint az egyedi sablonmotor esetében, az egyetlen különbség az, hogy a sessionType () módszer:
A @Bean public class SessionConfig végrehajtja a BladeLoader {@Orride public void load (Blade blade) {blade.sessionType (new RedisSession ()); }}
16. Parancssori érvek
A Blade parancssorból történő futtatásakor három beállítást adhatunk meg annak viselkedésének megváltoztatásához.
Először is megváltoztathatjuk az IP-címet, amely alapértelmezés szerint a helyi 0.0.0.0 visszacsatolás:
java -jar target / sample-blade-app.jar --server.address = 192.168.1.100
Másodszor a portot is megváltoztathatjuk, amely alapértelmezés szerint az 9000:
java -jar target / sample-blade-app.jar --server.port = 8080
Végül, amint az a 9.3 szakaszban látható, megváltoztathatjuk a környezetet, hogy más legyen application-XXX.properties az alapértelmezetten átolvasandó fájl, amely alkalmazás.tulajdonságok:
java -jar target / sample-blade-app.jar --app.env = prod
17. Futás az IDE-ben
Bármely modern Java IDE képes egy Blade projekt lejátszására anélkül, hogy szükség lenne a Maven beépülő modulokra. A Blade futtatása IDE-ben különösen hasznos a Blade Demos futtatásakor. Ezek a példák kifejezetten a keretrendszer funkcióinak bemutatására készültek. Mindannyian örökölnek egy szülő pomot, így könnyebb hagyni, hogy az IDE elvégezze a munkát, ahelyett, hogy manuálisan módosítanák őket, hogy önálló alkalmazásokként fussanak.
17.1. Fogyatkozás
Az Eclipse-ben elég, ha jobb gombbal kattint a projektre, és elindítja Futtatás Java alkalmazásként, válassza ki a mi App osztályt, és nyomja meg a gombot rendben.
Az Eclipse konzolja azonban nem fogja helyesen megjeleníteni az ANSI színeit, inkább kiönti kódjaikat:
Szerencsére az ANSI Escape telepítése a Console kiterjesztésbe véglegesen megoldja a problémát:
17.2. IntelliJ ÖTLET
Az IntelliJ IDEA a dobozon kívüli ANSI színekkel dolgozik. Ezért elég a projekt létrehozása, kattintson a jobb gombbal a App fájlt, és indítsa el Futtassa az „App.main ()” (ami egyenértékű a préseléssel Ctrl + Shift + F10):
17.3. Visual Studio kód
A VSCode, egy népszerű, nem Java-központú IDE is használható a Java Extension Pack korábbi telepítésével.
Megnyomás Ctrl + F5 majd lefuttatja a projektet:
18. Következtetés
Láttuk, hogyan használható a Blade egy kis MVC alkalmazás létrehozására.
A teljes dokumentáció csak kínai nyelven érhető el. Annak ellenére, hogy főként Kínában terjedt el, kínai eredetének köszönhetően a szerző nemrég lefordította az API-t, és a projekt alapvető funkcióit angolul dokumentálta a GitHub-on.
Mint mindig, itt is megtalálhatjuk a példa forráskódját a GitHubon.