Bevezetés Jooby-ba

1. Áttekintés

Jooby egy skálázható és gyors mikro web keretrendszer, amely a leggyakrabban használtakra épül NIO webszerverek. Nagyon egyszerű és moduláris, egyértelműen a modern webarchitektúra számára készült. Támogatással jár Javascript és Kotlin is.

Alapértelmezés szerint, Jooby nagy támogatást nyújt a Netty, Móló és Undertow.

Ebben a cikkben megismerjük az összességet Jooby projekt felépítése és egy egyszerű webalkalmazás felépítése Jooby.

2. Alkalmazás architektúra

Egy egyszerű Jooby az alkalmazás szerkezete az alábbiak szerint fog tetszeni:

├── nyilvános | └── welcome.html ├── conf | ├── application.conf | └── logback.xml └── src | ├── fő | | └── java | | └── com | | └── baeldung | | └── jooby | | └── App.java | └── teszt | └── java | └── com | └── baeldung | └── jooby | └── AppTest.java ├── pom.xml

Megjegyzendő, hogy itt van nyilvános könyvtárba olyan statikus fájlokat helyezhetünk el, mint a css / js / html stb konf könyvtárba helyezhetünk bármilyen konfigurációs fájlt, amelyre egy alkalmazásnak szüksége van logback.xml vagy application.conf stb.

3. Maven-függőség

Készíthetünk egy egyszerűt Jooby alkalmazás a következő függőség hozzáadásával a mi pom.xml:

 org.jooby jooby-netty 1.1.3 

Ha választani akarunk Móló vagy Hullámtörés a következő függőséget használhatjuk:

 org.jooby jooby-móló 1.1.3 org.jooby jooby-undertow 1.1.3 

Ellenőrizheti a Jooby projekt a Central Maven Adattárban.

Jooby dedikált Maven-archetípussal is rendelkezik. Használhatunk egy mintaprojekt létrehozására, az összes szükséges függőség előre elkészítve.

A következő szkriptet használhatjuk a minta projekt előállításához:

mvn archetípus: -B -DgroupId = com.baeldung.jooby -DartifactId = jooby -Dversion = 1.0 -DarchetypeArtifactId = jooby-archetype -DarchetypeGroupId = org.jooby -DarchetypeVersion = 1.1.3

4. Alkalmazás építése

4.1. A szerver elindítása

A beágyazott szerver elindításához a következő kódrészletet kell használnunk:

public class App kiterjeszti Jooby {public static void main (String [] args) {run (App :: new, args); }}

Az indulás után a szerver tovább fog futni alapértelmezett port8080.

Konfigurálhatjuk a háttér-kiszolgálót is egyéni porttal és custom-al HTTPS kikötő:

{port (8081); biztonságos port (8443); }

4.2. A router bevezetése

Nagyon könnyű létrehozni az útvonal alapú útválasztót Jooby. Például létrehozhatunk egy útválasztót a/Belépés„A következő módon:

{get ("/ login", () -> "Hello Baeldungtól"); }

Hasonló módon, ha mással akarunk foglalkozni HTTP olyan módszereket, mint a POST, PUT stb., a kódrészlet alatt használhatjuk:

{post ("/ save", req -> {Mutant token = req.param ("token"); return token.intValue ();}); }

Itt lekérjük a kérelem param nevének tokent a kérésből. Alapértelmezés szerint az összes kérelemparaméter típusba kerül Jooby’S Mutáns adattípus. Az elvárás alapján bármilyen támogatott primitív adattípussá konvertálhatjuk.

Bármely URL-paramétert ellenőrizhetjük a következő módon:

{get ("/ user / {id}", req -> "Hello user:" + req.param ("id"). value ()); get ("/ user /: id", req -> "Hello user:" + req.param ("id"). value ()); }

A fentiek bármelyikét felhasználhatjuk. Rögzített tartalommal kezdődő paraméterek is megtalálhatók. Találhatunk például egy URL-paramétert,uid: ' a következő módon:

{get ("/ uid: {id}", req -> "Hello felhasználó azonosítóval: uid" + req.param ("id"). érték ()); }

4.3. Az MVC Pattern Controller megvalósítása

Vállalati alkalmazás esetén Jooby olyan MVC API-val érkezik, mint bármely más MVC keretrendszer, például a Spring MVC.

Például kezelhetünk egy ún./Helló‘ :

@Path ("/ hello") public class GetController {@GET public String hello () {return "Hello Baeldung"; }}

Hasonló módon létrehozhatunk egy kezelőt, amely más HTTP módszereket kezel @POST, @PUT, @DELETEstb. annotáció.

4.4. Statikus tartalom kezelése

Bármilyen statikus tartalom, például HTML, Javascript, CSS, kép stb. Kiszolgálásához ezeket a fájlokat a nyilvános Könyvtár.

Miután elhelyezte, az útválasztóról bármely URL-t feltérképezhetünk ezekre az erőforrásokra:

{vagyon ("/ alkalmazott", "form.html"); }

4.5. Kezelési forma

Joobyé Kérés Az interfész alapértelmezés szerint minden űrlapobjektumot kézi öntés nélkül kezel.

Tegyük fel, hogy űrlapon keresztül kell benyújtanunk az alkalmazottak adatait. Első lépésben létre kell hoznunk egy Munkavállaló babobjektum, amelyet az adatok tárolására használunk:

public class Alkalmazott {String id; Karakterlánc neve; Karakterlánc e-mail; // szabványos kivitelezők, mérőeszközök és beállítók}

Most létre kell hoznunk egy oldalt az űrlap létrehozásához:

Ezután létrehozunk egy postai kezelőt az űrlap címzésére, és lekérjük a beküldött adatokat:

post ("/ submitForm", req -> {Munkavállalói alkalmazott = req.params (Munkavállaló.osztály); // ... return "sikeresen elmentett munkatárs adatai";});

Megjegyzendő, hogy deklarálnunk kell a formát enctype mint application / x-www-form-urlencoded hogy támogassa a dinamikus formakötést.

Által Request.file (String fájlnév) lekérhetjük a feltöltött fájlt:

post ("/ upload", req -> {Upload upload = req.file ("file"); // ... upload.close ();});

4.6. Szűrő megvalósítása

A dobozból, Jooby rugalmasságot biztosít a globális szűrők és az útvonal-alapú szűrők meghatározásához.

Szűrő bevezetése Jooby azóta kissé trükkös Kétszer kell konfigurálnunk az URL elérési útját, egyszer a szűrőhöz, és ismét a kezelőhöz.

Például, ha be kell építenünk egy szűrőt egy ‘/szűrő', explicit módon kell megvalósítanunk a szűrőt ezen az úton:

get ("/ szűrő", (req, ill, lánc) -> {// ... chain.next (req, resp);});

A szintaxis nagyon hasonlít a Servlet szűrő. Lehetőség van korlátozni a kérést, és visszahívni a választ a szűrőbe hívással Response.send (Eredmény eredménye) módszer.

A szűrő bevezetése után végre kell hajtanunk a kérelemkezelőt:

get ("/ filter", (req, resp) -> {resp.send ("szűrő válasz");});

4.7. Ülés

Jooby kétféle munkamenet-implementációval érkezik; memóriában és süti alapú.

A memóriában lévő munkamenetek kezelésének végrehajtása meglehetősen egyszerű. Lehetőségünk van bármelyik nagy teljesítményű munkamenet-üzlet megválasztására Jooby mint EhCache, Guava, HazleCast, Cassandra, Couchbase, Redis, MongoDB, és Memcached.

Például egy Redis-alapú munkamenet-tároló megvalósításához hozzá kell adnunk a következő Maven-függőséget:

 org.jooby jooby-jedis 1.1.3 

Most az alábbi kódrészletet használhatjuk a munkamenet-kezelés engedélyezéséhez:

{use (új Redis ()); munkamenet (RedisSessionStore.class); get ("/ session", req -> {Session session = req.session (); session.set ("token", "value"); return session.get ("token"). érték ();}); }

Megjegyzendő, hogy itt konfigurálhatjuk Redis URL, mint a „Db” ingatlan a application.conf.

A cookie-alapú munkamenetek kezelésének engedélyezéséhez nyilatkoznunk kell cookieSession (). Ha süti alapú megközelítést választunk, akkor nyilatkoznunk kell alkalmazás.titkot ingatlan a application.conf fájl. Mivel minden sütit aláírunk, ezzel a titkos kulccsal írjuk alá, ezért mindig tanácsos hosszú véletlenszerű karakterlánc töredéket használni titkos kulcsként.

A memóriában és a süti alapú megközelítésben is deklarálnunk kell a szükséges konfigurációs paramétert a application.conf fájlt, különben az alkalmazás dob egy IllegalStateException induláskor.

5. Tesztelés

Az MVC útvonal tesztelése valóban egyszerű, mivel egy útvonal stratégiához van kötve bizonyos osztályokhoz. Ez megkönnyíti az egység tesztek futtatását minden útvonalon.

Például gyorsan létrehozhatunk egy tesztesetet az alapértelmezett URL-hez:

public class AppTest {@ClassRule public static JoobyRule app = new JoobyRule (new App ()); @Test public void given_defaultUrl_expect_fixedString () {get ("/"). Then (). AssertThat (). Body (equalTo ("Hello World!")) .StatusCode (200) .contentType ("text / html; charset = UTF -8 "); }}

Itt érdemes megjegyezni, hogy a használata @ClassRule az annotáció csak egy példányt hoz létre a szerverről az összes tesztesethez. Ha minden tesztesethez külön példányt kell felépítenünk a szerverekről, akkor a @Szabály annotáció a statikus módosító nélkül.

Használhatjuk is Jooby MockRouter-je hogy az utat ugyanúgy tesztelje:

@Test public void given_defaultUrl_with_mockrouter_expect_fixedString () Throwable {String result = new MockRouter (new App ()). Dob ("/"); assertEquals ("Helló világ!", eredmény); }

6. Következtetés

Ebben az oktatóanyagban a Jooby projekt és annak alapvető funkcionalitása.

Mint mindig, a teljes forráskód is elérhető a GitHubon.