Uvod u ActiveWeb

Java Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

U ovom ćemo članku ilustrirati Activeweb - cjeloviti mrežni okvir JavaLite-a koji pruža sve što je potrebno za razvoj dinamičnih web aplikacija ili REST-full web usluga.

2. Osnovni pojmovi i principi

Activeweb koristi "konvenciju nad konfiguracijom" - što znači da se može konfigurirati, ali ima razumne zadane vrijednosti i ne zahtijeva dodatnu konfiguraciju. Samo trebamo slijediti nekoliko unaprijed definiranih konvencija, poput imenovanja klasa, metoda i polja u određenom unaprijed definiranom formatu.

Također pojednostavljuje razvoj ponovnim prevođenjem i ponovnim učitavanjem izvora u tekući spremnik (Jetty prema zadanim postavkama).

Za upravljanje ovisnostima koristi Google Guice kao DI okvir; da biste saznali više o Guiceu, pogledajte naš vodič ovdje.

3. Postavljanje Mavena

Za početak prvo dodamo potrebne ovisnosti:

 org.javalite activeweb 1.15 

Najnoviju verziju možete pronaći ovdje.

Uz to, za testiranje aplikacije trebat će nam aktivno web-testiranje ovisnost:

 org.javalite aktivno testiranje mreže 1.15 test 

Ovdje pogledajte najnoviju verziju.

4. Struktura primjene

Kao što smo razgovarali, struktura prijave mora slijediti određenu konvenciju; evo kako to izgleda za tipičnu MVC aplikaciju:

Kao što vidimo, kontroleri, servis, konfiguracija, i modeli trebali biti smješteni u vlastitom podpaketu u app paket.

Pogledi bi se trebali nalaziti u WEB-INF / prikazi direktorij, svaki ima vlastiti poddirektorij na temelju imena kontrolera. Na primjer app.controllers.ArticleController treba imati članak/ poddirektorij koji sadrži sve datoteke prikaza za taj kontroler.

Deskriptor implementacije ili web.xml obično treba sadržavati a i odgovarajuće . Budući da je okvir filtar servleta, umjesto konfiguracija postoji konfiguracija filtra:

... dispečer org.javalite.activeweb.RequestDispatcher ... ...

Također nam treba root_controller za definiranje zadanog kontrolera za aplikaciju - slično a Dom kontroler:

... root_controller home ...

5. Kontroleri

Kontroleri su primarne komponente ActiveWeb aplikacije; i, kao što je ranije spomenuto, svi kontroleri trebali bi biti smješteni unutar app.kontroleri paket:

javna klasa ArticleController proširuje AppController {// ...}

Primijetite da se kontroler produžuje org.javalite.activeweb.AppController.

5.1. Mapiranje URL-a kontrolera

Kontroleri se automatski mapiraju u URL na temelju dogovora. Na primjer, ArticleController bit će mapiran na:

// domaćin: port / contextroot / article

Sada bi im se to preslikalo na zadane zadane radnje u kontroleru. Akcije nisu ništa drugo nego metode unutar kontrolera. Zadani način nazovite kao indeks():

javna klasa ArticleController proširuje AppController {// ... public void index () {render ("articles"); } // ...}

Za ostale metode ili radnje dodajte naziv metode URL-u:

javna klasa ArticleController proširuje AppController {// ... public void search () {render ("search"); }}

URL:

// host: port / contextroot / article / search

Možemo čak imati i radnje kontrolera na temelju HTTP metoda. Samo označite metodu bilo kojim od @POST, @PUT, @DELETE, @GET, @HEAD. Ako ne označimo radnju, prema zadanim postavkama smatra se GET.

5.2. Razlučivost URL-a kontrolera

Okvir koristi ime kontrolera i naziv podpaketa za generiranje URL-a kontrolera. Na primjer app.controllers.ArticleController.java URL:

// domaćin: port / contextroot / article

Ako je kontroler unutar potpaketa, URL jednostavno postaje:

// domaćin: port / contextroot / baeldung / article

Za naziv kontrolera koji ima više od jedne riječi (na primjer app.controllers.PublishedArticleController.java), URL će se odvojiti podvlakom:

// domaćin: port / contextroot / published_article

5.3. Dohvaćanje parametara zahtjeva

Unutar kontrolera dobivamo pristup parametrima zahtjeva pomoću param () ili parametar () metode iz Klasa AppController. Prva metoda uzima argument String - naziv parameta za preuzimanje:

javno void pretraživanje () {String ključna riječ = param ("ključ"); pogled ("pretraga", articleService.search (ključna riječ)); }

A kasnije možemo koristiti za dobivanje svih parametara ako treba:

javno prazno pretraživanje () {Kriterij mape = params (); // ...}

6. Pogledi

U terminologiji ActiveWeba pogledi se često nazivaju predlošcima; to je uglavnom zato što koristi Apache FreeMarker engine predložak umjesto JSP-a. Više o FreeMarkeru možete pročitati u našem vodiču ovdje.

Postavite predloške u WEB-INF / prikazi imenik. Svaki kontroler trebao bi imati poddirektorij pod svojim imenom koji sadrži sve predloške koji su mu potrebni.

6.1. Mapiranje pogleda kontrolera

Kada se pogodi kontroler, zadana je radnja indeks() izvršava se i okvir će odabrati WEB-INF / prikazi / članak /indeks.ftl predloži direktorij iz pogleda za taj kontroler. Slično tome, za bilo koju drugu radnju prikaz bi se odabrao na temelju naziva radnje.

To nije uvijek ono što bismo željeli. Ponekad bismo možda željeli vratiti neke poglede na temelju interne poslovne logike. U ovom scenariju, možemo kontrolirati postupak pomoću prikazati () metoda od roditelja org.javalite.activeweb.AppController razred:

indeks javne praznine () {render ("članci"); }

Imajte na umu da bi se lokacija prilagođenih prikaza također trebala nalaziti u istom direktoriju pogleda za taj kontroler. Ako nije slučaj, dodajte predlošku naziv predloška imenu direktorija u kojem se nalazi predložak i proslijedite ga u prikazati () metoda:

render ("/ uobičajeno / pogreška");

6.3. Pogledi s podacima

Da bi podatke poslao prikazima, org.javalite.activeweb.AppController pruža pogled() metoda:

pogled ("articles", articleService.getArticles ());

Za ovo su potrebna dva parametra. Prvo, naziv objekta koji se koristi za pristup objektu u predlošku, a drugo objekt koji sadrži podatke.

Možemo i koristiti dodijeliti() metoda za prosljeđivanje podataka pogledima. Nema apsolutno nikakve razlike između view () i dodijeliti() metode - možemo odabrati bilo koji od njih:

assign ("article", articleService.search (ključna riječ));

Mapirajmo podatke u predlošku:

Članci ... $ {article.title}$ {article.author}$ {article.words}$ {article.date}

7. Upravljanje ovisnostima

Da bi upravljao objektima i instancama, ActiveWeb koristi Google Guice kao okvir za upravljanje ovisnostima.

Recimo da nam u našoj aplikaciji treba klasa usluge; ovo bi odvojilo poslovnu logiku od kontrolora.

Prvo napravimo sučelje usluge:

javno sučelje ArticleService {Lista getArticles (); Pretraživanje članaka (ključna riječ String); }

I provedba:

javna klasa ArticleServiceImpl provodi ArticleService {javni popis getArticles () {return fetchArticles (); } javno pretraživanje članaka (ključna riječ String) {Article ar = novi članak (); ar.set ("naslov", "Članak s" + ključna riječ); ar.set ("autor", "baeldung"); ar.set ("riječi", "1250"); ar.setDate ("datum", Instant.now ()); povratak ar; }}

Sad, povežimo ovu uslugu kao Guice modul:

javna klasa ArticleServiceModule proširuje AbstractModule {@Override protected void configure () {bind (ArticleService.class) .to (ArticleServiceImpl.class) .asEagerSingleton (); }}

Na kraju, registrirajte ovo u kontekstu aplikacije i ubrizgajte ga u kontroler, prema potrebi:

javna klasa AppBootstrap proširuje Bootstrap {public void init (AppContext context) {} public Injector getInjector () {return Guice.createInjector (new ArticleServiceModule ()); }}

Imajte na umu da ovo ime klase konfiguracije mora biti AppBootstrap i trebao bi se nalaziti u app.config paket.

Napokon, evo kako ga ubrizgavamo u kontroler:

@ Ubrizgajte privatni ArticleService articleService;

8. Ispitivanje

Jedinstveni testovi za aplikaciju ActiveWeb napisani su pomoću biblioteke JSpec iz JavaLite.

Koristit ćemo org.javalite.activeweb.ControllerSpec klase iz JSpeca za testiranje našeg kontrolera, a mi ćemo imenovati klase ispitivanja slijedeći sličnu konvenciju:

javna klasa ArticleControllerSpec proširuje ControllerSpec {// ...}

Primijetite, naziv je sličan upravljaču koji se testira s "Spec" na kraju.

Evo testnog slučaja:

@Test public void whenReturnedArticlesThenCorrect () {request (). Get ("index"); a (responseContent ()) .shouldContain ("Uvod u Mule"); }

Primijetite da zahtjev() metoda simulira poziv kontroloru i odgovarajuću HTTP metodu dobiti(), uzima naziv radnje kao argument.

Također možemo proslijediti parametre kontroloru pomoću parametar () metoda:

@Test javna praznina givenKeywordWhenFoundArticleThenCorrect () {request (). Param ("key", "Java"). Get ("search"); a (responseContent ()) .shouldContain ("Članak s Javom"); }

Da bismo proslijedili više parametara, možemo i metodu lanca povezati s ovim fluidnim API-jem.

9. Postavljanje aplikacije

Aplikaciju je moguće rasporediti u bilo koji spremnik servleta kao što su Tomcat, WildFly ili Jetty. Naravno, najjednostavniji način implementacije i testiranja bio bi korištenje dodatka Maven Jetty:

... org.eclipse.jetty jetty-maven-plugin 9.4.8.v20171121 priručnik 10000 ...

Najnovija verzija dodatka je ovdje.

Sada, napokon - možemo to upaliti:

mvn jetty: trči

10. Zaključak

U ovom smo članku saznali o osnovnim konceptima i konvencijama okvira ActiveWeb. Uz ove, okvir ima više značajki i mogućnosti od onoga o čemu smo ovdje razgovarali.

Dodatne pojedinosti potražite u službenoj dokumentaciji.

Kao i uvijek, uzorak koda korištenog u članku dostupan je na GitHubu.

Dno Java

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

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