Uvod u Jooby

1. Pregled

Jooby je skalabilan i brz mikro web okvir izgrađen na vrhu najčešće korištenih NIO web poslužitelji. Vrlo je izravan i modularan, jasno dizajniran za modernu web arhitekturu. Dolazi s podrškom za Javascript i Kotlin isto.

Prema zadanim postavkama, Jooby dolazi s velikom podrškom za Netty, Jetty i Undertow.

U ovom ćemo članku saznati sveukupno Jooby struktura projekta i kako izraditi jednostavnu web aplikaciju pomoću Jooby.

2. Arhitektura aplikacije

Jednostavan Jooby struktura aplikacije će se svidjeti u nastavku:

├── javno | └── dobrodošli.html ├── conf | ├── aplikacija.conf | └── logback.xml └── src | ├── glavni | | └── java | | └── com | | └── baeldung | | └── jooby | | └── App.java | └── test | └── java | └── com | └── baeldung | └── jooby | └── AppTest.java ├── pom.xml

Ovdje valja napomenuti da je u javnost U direktorij možemo staviti statičke datoteke poput css / js / html itd. U konf direktoriju, možemo staviti bilo koju konfiguracijsku datoteku koja aplikaciji treba logback.xml ili prijava.konf itd.

3. Ovisnost Mavena

Možemo stvoriti jednostavan Jooby aplikacija dodavanjem sljedeće ovisnosti u našu pom.xml:

 org.jooby jooby-netty 1.1.3 

Ako želimo birati Brana ili Undertow možemo koristiti sljedeću ovisnost:

 org.jooby jooby-jetty 1.1.3 org.jooby jooby-undertow 1.1.3 

Možete provjeriti najnoviju verziju Jooby projekt u središnjem spremištu Maven.

Jooby također ima namjenski arhetip Mavena. Pomoću njega možemo stvoriti ogledni projekt sa svim potrebnim ovisnostima unaprijed izgrađenim.

Za generiranje uzorka projekta možemo koristiti sljedeću skriptu:

mvn arhetip: generiraj -B -DgroupId = com.baeldung.jooby -DartifactId = jooby -Dversion = 1.0 -DarchetypeArtifactId = jooby-archetype -DarchetypeGroupId = org.jooby -DarchetypeVersion = 1.1.3

4. Izrada aplikacije

4.1. Pokretanje poslužitelja

Da bismo pokrenuli ugrađeni poslužitelj, trebamo upotrijebiti sljedeći isječak koda:

aplikacija javne klase proširuje Jooby {public static void main (String [] args) {run (App :: new, args); }}

Jednom pokrenut, poslužitelj će se izvoditi zadani port8080.

Također možemo konfigurirati pozadinski poslužitelj s prilagođenim portom i prilagođenim HTTPS luka:

{luka (8081); securePort (8443); }

4.2. Implementacija usmjerivača

Vrlo je jednostavno stvoriti usmjerivač zasnovan na putanji Jooby. Na primjer, možemo stvoriti usmjerivač za put ‘/prijaviti se'Na sljedeći način:

{get ("/ login", () -> "Pozdrav iz Baeldunga"); }

Na sličan način, ako želimo postupati s drugima HTTP metode poput POST, PUT itd. koje možemo koristiti ispod isječka koda:

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

Ovdje dohvaćamo token imena parameta zahtjeva iz zahtjeva. Prema zadanim postavkama svi se parametri zahtjeva ulijevaju u tip Jooby‘S Mutantni vrsta podataka. Na temelju očekivanja možemo ga pretvoriti u bilo koji podržani primitivni tip podataka.

Bilo koji parametar URL-a možemo provjeriti na sljedeći način:

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

Možemo koristiti bilo što od navedenog. Također je moguće pronaći paramere koji počinju s fiksnim sadržajem. Na primjer, možemo pronaći parametar URL-a koji započinje s ‘uid: ' na sljedeći način:

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

4.3. Implementacija MVC kontrolera uzorka

Za poslovnu aplikaciju, Jooby dolazi s MVC API-om slično kao i bilo koji drugi MVC-ov okvir poput Spring MVC-a.

Na primjer, možemo obraditi put nazvan ‘/zdravo‘ :

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

Vrlo slično možemo stvoriti rukovatelj za obradu ostalih HTTP metoda @POST, @PUT, @DELETEitd. napomena.

4.4. Rukovanje statičkim sadržajem

Da bismo posluživali bilo koji statički sadržaj poput HTML-a, Javascripta, CSS-a, slike itd., Moramo smjestiti te datoteke u javnost imenik.

Jednom postavljeni, iz usmjerivača možemo mapirati bilo koji URL na ove resurse:

{imovina ("/ zaposlenik", "form.html"); }

4.5. Obrazac za rukovanje

Joobyjeva Zahtjev Sučelje prema zadanim postavkama obrađuje bilo koji oblik obrasca bez korištenja bilo kojeg lijevanja ručnog tipa.

Pretpostavimo da podatke o zaposleniku moramo dostaviti putem obrasca. U prvom koraku moramo stvoriti Zaposlenik bean objekt koji ćemo koristiti za čuvanje podataka:

javni razred zaposlenik {String id; Naziv niza; Niz e-pošte; // standardni konstruktori, getteri i postavljači}

Sada moramo stvoriti stranicu za izradu obrasca:

Zatim ćemo stvoriti rukovatelj objavama za adresiranje ovog obrasca i dohvat poslanih podataka:

post ("/ submitForm", req -> {Zaposlenik zaposlenik = req.params (Employee.class); // ... vrati "podaci empoyee uspješno spremljeni";});

Ovdje valja napomenuti da moramo prijaviti obrazac enctype kao application / x-www-form-urlencoded za potporu dinamičkom vezivanju obrazaca.

Po Request.file (niz datoteke) možemo preuzeti učitanu datoteku:

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

4.6. Implementacija filtra

Izvan kutije, Jooby pruža fleksibilnost za definiranje globalnih filtara kao i filtara temeljenih na putanji.

Implementacijski filtar u sustavu Jooby je pomalo lukav od trebamo konfigurirati putanju URL-a dva puta, jednom za filtar i još jednom za obrađivač.

Na primjer, ako moramo implementirati filtar za putanju URL-a nazvan ‘/filtar', moramo na ovaj put izričito implementirati filtar:

get ("/ filter", (req, resp, chain) -> {// ... chain.next (req, resp);});

Sintaksa je vrlo slična Servlet filtar. Pozivom je moguće ograničiti zahtjev i poslati odgovor u samom filtru Response.send (rezultat rezultata) metoda.

Nakon što je filtar implementiran, trebamo implementirati obrađivač zahtjeva:

get ("/ filter", (req, resp) -> {resp.send ("odgovor filtra");});

4.7. Sjednica

Jooby dolazi s dvije vrste provedbe sesije; u memoriji i na temelju kolačića.

Implementacija upravljanja sjednicama u memoriji prilično je jednostavna. Imamo mogućnosti odabrati bilo koju od visokopropusnih trgovina sesija dostupnih s Jooby Kao EhCache, Guava, HazleCast, Cassandra, Couchbase, Redis, MongoDB, i Memcached.

Na primjer, da bismo implementirali pohranu sesija zasnovanu na Redisu, moramo dodati sljedeću Mavenovu ovisnost:

 org.jooby jooby-jedis 1.1.3 

Sada možemo koristiti donji isječak koda da omogućimo upravljanje sesijom:

{upotreba (novi Redis ()); sesija (RedisSessionStore.class); get ("/ session", req -> {Sesija session = req.session (); session.set ("token", "value"); return session.get ("token"). value ();}); }

Ovdje valja napomenuti da možemo konfigurirati Redis url kao "Db" nekretnina u prijava.konf.

Da bismo omogućili upravljanje sjednicama temeljeno na kolačićima, moramo se izjasniti cookieSession (). Ako je odabran pristup zasnovan na kolačićima, moramo se izjasniti primjena.tajna nekretnina u prijava.konf datoteka. Budući da će svaki kolačić biti potpisan, potpisat će se ovim tajnim ključem, uvijek je preporučljivo koristiti dugi slučajni fragment niza kao tajni ključ.

I u pristupu temeljenom na memoriji i na kolačićima, moramo morati prijaviti neophodni konfiguracijski parametar u prijava.konf datoteka, inače će aplikacija baciti IllegalStateException pri pokretanju.

5. Ispitivanje

Testiranje MVC rute doista je jednostavno jer je ruta vezana uz strategiju za neku klasu. To olakšava pokretanje jediničnih testova na svim rutama.

Na primjer, možemo brzo stvoriti test za zadani URL:

javna klasa AppTest {@ClassRule javna statička aplikacija JoobyRule = nova JoobyRule (nova aplikacija ()); @Test public void given_defaultUrl_expect_fixedString () {get ("/"). Then (). AssertThat (). Body (jednakTo ("Hello World!")) .StatusCode (200) .contentType ("text / html; charset = UTF -8 "); }}

Ovdje valja napomenuti da je korištenje @ClassRule napomena će stvoriti samo jedan primjerak poslužitelja za sve test-slučajeve. Ako trebamo izgraditi zasebne instance poslužitelja za svaki test slučaj, moramo koristiti @Pravilo napomena bez statičkog modifikatora.

Možemo i koristiti Joobyjev MockRouter kako bi testirali put na isti način:

@Test javna praznina given_defaultUrl_with_mockrouter_expect_fixedString () baca mogućnost bacanja {String rezultat = novi MockRouter (nova aplikacija ()). Get ("/"); assertEquals ("Pozdrav svijetu!", rezultat); }

6. Zaključak

U ovom uputstvu istražili smo Jooby projekt i njegova bitna funkcionalnost.

Kao i uvijek, puni izvorni kod dostupan je na GitHub-u.


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