Úvod do ActiveWebu

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

V tomto článku ilustrujeme Activeweb - kompletný webový rámec od JavaLite - poskytujúci všetko potrebné pre vývoj dynamických webových aplikácií alebo webových služieb REST.

2. Základné koncepty a princípy

Activeweb využíva „konvenciu nad konfiguráciou“ - čo znamená, že je konfigurovateľný, ale má rozumné predvolené hodnoty a nevyžaduje ďalšiu konfiguráciu. Musíme len dodržať niekoľko preddefinovaných konvencií, ako sú pomenovanie tried, metód a polí v určitom preddefinovanom formáte.

Zjednodušuje to tiež vývoj rekompiláciou a opätovným načítaním zdroja do bežiaceho kontajnera (predvolene Jetty).

Pre správu závislostí používa ako rámec DI Google Guice; Ak sa chcete dozvedieť viac informácií o spoločnosti Guice, pozrite si nášho sprievodcu tu.

3. Nastavenie Maven

Na začiatok najskôr pridáme potrebné závislosti:

 org.javalite activeweb 1.15 

Najnovšiu verziu nájdete tu.

Na testovanie aplikácie budeme navyše potrebovať aktívne testovanie webu závislosť:

 org.javalite activeweb-testing 1.15 test 

Najnovšiu verziu nájdete tu.

4. Štruktúra aplikácie

Ako sme diskutovali, aplikačná štruktúra musí dodržiavať určitý dohovor; takto vyzerá typická aplikácia MVC:

Ako vidíme, radiče, služby, konfigura modely by mali byť umiestnené v ich vlastnom čiastkovom balíku v aplikácia balíček.

Pohľady by mali byť umiestnené v WEB-INF / zobrazenia adresár, z ktorých každý má svoj vlastný podadresár na základe názvu radiča. Napríklad app.controllers.Ar ArticleController by mal mať článok / podadresár obsahujúci všetky zobrazovacie súbory pre daný radič.

Deskriptor nasadenia alebo web.xml by mali zvyčajne obsahovať a a prisl . Pretože rámec je servletový filter, namiesto a konfigurácia existuje konfigurácia filtra:

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

Potrebujeme tiež root_controller definovať predvolený radič pre aplikáciu - podobný a Domov radič:

... root_controller home ...

5. Ovládače

Radiče sú primárnymi súčasťami aplikácie ActiveWeb; a ako už bolo spomenuté, všetky ovládače by mali byť umiestnené vo vnútri servera ovládače aplikácií balenie:

verejná trieda ArticleController rozširuje AppController {// ...}

Všimnite si, že radič sa rozširuje org.javalite.activeweb.AppController.

5.1. Mapovanie URL radiča

Ovládače sú na adresu URL mapované automaticky na základe konvencie. Napríklad, ArticleControlér bude namapované na:

// hostiteľ: port / contextroot / article

To by ich teraz namapovalo na predvolenú a predvolenú akciu v radiči. Akcie nie sú nič iné ako metódy vo vnútri ovládača. Pomenujte predvolenú metódu ako index ():

public class ArticleController rozširuje AppController {// ... public void index () {render ("articles"); } // ...}

Pre iné metódy alebo akcie pripojte názov metódy k adrese URL:

public class ArticleController extends AppController {// ... public void search () {render ("search"); }}

URL:

// hostiteľ: port / contextroot / article / search

Môžeme dokonca mať akcie radiča založené na metódach HTTP. Stačí anotovať metódu jedným z týchto spôsobov @POST, @PUT, @DELETE, @GET, @HEAD. Ak akciu anotujeme, štandardne sa to považuje za ZÍSKAŤ.

5.2. Rozlíšenie adresy URL radiča

Rámec používa na vygenerovanie URL radiča názov radiča a názov čiastkového balíka. Napríklad app.controllers.ArticleController.java URL:

// hostiteľ: port / contextroot / article

Ak je radič v čiastkovom balíku, adresa URL sa jednoducho stane:

// hostiteľ: port / contextroot / baeldung / article

Pre názov radiča, ktorý má viac ako jedno slovo (napríklad app.controllers.PublishedArticleController.java), bude adresa URL oddelená pomocou podčiarknutia:

// hostiteľ: port / contextroot / publikované_článok

5.3. Načítanie parametrov požiadavky

Vo vnútri radiča získame prístup k parametrom požiadavky pomocou param () alebo parametre () metódy z Trieda AppController. Prvá metóda prijíma argument String - názov parametra, ktorý sa má načítať:

public void search () {Reťazcové kľúčové slovo = param ("kľúč"); view ("hľadaj", articleService.search (kľúčové slovo)); }

A neskôr môžeme použiť na získanie všetkých parametrov, ak potrebujeme:

public void search () {kritérium mapy = params (); // ...}

6. Pohľady

V terminológii ActiveWeb sa zobrazenia často označujú ako šablóny; je to väčšinou preto, lebo namiesto šablón JSP používa šablónový modul Apache FreeMarker. Viac o FreeMarker si môžete prečítať v našom sprievodcovi tu.

Vložte šablóny dovnútra WEB-INF / zobrazenia adresár. Každý radič by mal mať podľa názvu podadresár, ktorý obsahuje všetky ním požadované šablóny.

6.1. Mapovanie pohľadu radiča

Po zasiahnutí ovládača je to predvolená akcia index () vykoná a rámec vyberie WEB-INF / zobrazenia / článok /index.ftl vytvorte šablónu adresára from views pre tento radič. Podobne pre každú inú akciu by sa zobrazenie zvolilo na základe názvu akcie.

Nie vždy by sme to chceli. Niekedy môžeme chcieť vrátiť niektoré zobrazenia založené na internej obchodnej logike. V tomto scenári môžeme proces riadiť pomocou render () metóda od rodiča org.javalite.activeweb.AppController trieda:

public void index () {render ("články"); }

Upozorňujeme, že umiestnenie vlastných zobrazení by malo byť tiež v rovnakom adresári zobrazení pre daný radič. Ak to tak nie je, uveďte predponu šablóny názvom adresára, v ktorom je šablóna umiestnená, a odovzdajte ju render () metóda:

render ("/ common / error");

6.3. Zhliadnutia s údajmi

Ak chcete odoslať údaje do zobrazení, stlačte org.javalite.activeweb.AppController poskytuje vyhliadka() metóda:

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

To trvá dva parametre. Po prvé, názov objektu použitého na prístup k objektu v šablóne a po druhé objekt obsahujúci údaje.

Môžeme tiež použiť priradiť() metóda na odovzdanie údajov do zobrazení. Medzi view () a nie je absolútne žiadny rozdiel priradiť() metódy - môžeme zvoliť ktorúkoľvek z nich:

assign ("článok", articleService.search (kľúčové slovo));

Mapujme údaje v šablóne:

Články ... $ {article.title}$ {article.author}$ {article.words}$ {article.date}

7. Správa závislostí

Na správu objektov a inštancií používa ActiveWeb Google Guice ako rámec pre správu závislostí.

Povedzme, že v našej aplikácii potrebujeme triedu služieb; to by oddelilo obchodnú logiku od kontrolórov.

Najprv vytvoríme rozhranie služby:

verejné rozhranie ArticleService {List getArticles (); Vyhľadávanie článkov (reťazcové kľúčové slovo); }

A implementácia:

verejná trieda ArticleServiceImpl implementuje ArticleService {verejný zoznam getArticles () {return fetchArticles (); } verejné vyhľadávanie článkov (reťazcové kľúčové slovo) {Article ar = nový článok (); ar.set ("názov", "Článok s" + kľúčovým slovom); ar.set ("autor", "baeldung"); ar.set ("slová", "1250"); ar.setDate ("dátum", Instant.now ()); návrat ar; }}

Teraz spojme túto službu ako modul Guice:

verejná trieda ArticleServiceModule rozširuje AbstractModule {@Override protected void configure () {bind (ArticleService.class) .to (ArticleServiceImpl.class) .asEagerSingleton (); }}

Nakoniec to zaregistrujte v kontexte aplikácie a podľa potreby ho vložte do ovládača:

public class AppBootstrap extends Bootstrap {public void init (AppContext context) {} public Injector getInjector () {return Guice.createInjector (new ArticleServiceModule ()); }}

Názov tejto triedy konfigurácie musí byť AppBootstrap a mala by sa nachádzať v app.config balíček.

Nakoniec to je postup, ako ho vložíme do ovládača:

@Inject private ArticleService articleService;

8. Testovanie

Testy jednotiek pre aplikáciu ActiveWeb sa zapisujú pomocou knižnice JSpec z JavaLite.

Použijeme org.javalite.activeweb.ControllerSpec triedy od JSpec, aby sme otestovali náš radič, a pomenujeme testovacie triedy podľa podobnej konvencie:

verejná trieda ArticleControllerSpec rozširuje ControllerSpec {// ...}

Všimnite si, že názov je podobný ovládaču, ktorý testuje, na konci je uvedená „Špecifikácia“.

Tu je testovací prípad:

@ Test public void whenReturnedArticlesThenCorrect () {request (). Get ("index"); a (responseContent ()) .shouldContain ("Úvod do Mule"); }

Všimnite si, že požiadavka () metóda simuluje volanie na radič a zodpovedajúcu metódu HTTP get (), berie názov akcie ako argument.

Parametre môžeme tiež odovzdať do ovládača pomocou parametre () metóda:

@Test public void givenKeywordWhenFoundArticleThenCorrect () {request (). Param ("key", "Java"). Get ("search"); a (responseContent ()) .shouldContain ("Článok s programom Java"); }

Ak chcete odovzdať viac parametrov, môžeme pomocou tohto plynulého rozhrania API tiež spojiť metódu.

9. Nasadenie aplikácie

Aplikáciu je možné nasadiť do ľubovoľného servletového kontajnera, ako sú Tomcat, WildFly alebo Jetty. Najjednoduchší spôsob nasadenia a testovania by samozrejme bolo použitie pluginu Maven Jetty:

... org.eclipse.jetty jetty-maven-plugin 9.4.8.v20171121 manuál 10 000 ...

Najnovšia verzia pluginu je tu.

Teraz konečne - môžeme to rozohnať:

mvn mólo: spustiť

10. Záver

V tomto článku sme sa dozvedeli o základných konceptoch a konvenciách rámca ActiveWeb. Okrem toho má rámec viac funkcií a schopností, ako sme tu diskutovali.

Ďalšie informácie nájdete v oficiálnej dokumentácii.

A ako vždy, vzorový kód použitý v článku je k dispozícii na GitHub.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

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