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:

  1. Netty kérést kap
  2. Középáruk kerülnek végrehajtásra (opcionális)
  3. A WebHooks végrehajtásra kerül (opcionális)
  4. Az útválasztás végrehajtásra kerül
  5. A választ elküldik az ügyfélnek
  6. 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.


$config[zx-auto] not found$config[zx-overlay] not found