Úvod do rámca Ninja

1. Prehľad

V súčasnosti je pre vývoj webových aplikácií k dispozícii veľa rámcov založených na JEE, ako sú Spring, Play a Grails.

Možno máme svoje dôvody zvoliť si jednu z nich pred ostatnými. Naša voľba však závisí aj od prípadu použitia a problému, ktorý sa snažíme vyriešiť.

V tomto úvodnom tutoriále preskúmame webový rámec Ninja a vytvoríme jednoduchú webovú aplikáciu. Zároveň preskúmame niekoľko základných funkcií, ktoré poskytuje.

2. Ninja

Ninja je plnohodnotný, ale ľahký webový rámec, ktorý na vykonanie práce využíva existujúce knižnice Java.

Vďaka funkciám od HTML po vykreslenie JSON, vytrvalosti až po testovanie je to komplexné riešenie pre tvorbu škálovateľných webových aplikácií.

Vyplýva to z konfigurácia konvencie paradigma a kategorizuje kód v balíkoch ako modely, kontrolóri, a služby.

Ninja používa populárne knižnice Java pre kľúčové funkcie ako Jackson pre vykreslenie JSON / XML, Guice pre správu závislostí, Hibernate pre vytrvalosť a Flyway pre migráciu databázy.

Pre rýchly vývoj ponúka SuperDevMode na rýchle načítanie kódu. Umožňuje nám to okamžite vidieť zmeny vo vývojovom prostredí.

3. Inštalácia

Ninja vyžaduje na vytvorenie webovej aplikácie štandardnú sadu nástrojov:

  • Java 1.8 alebo novšia
  • Maven 3 alebo novší
  • IDE (Eclipse alebo IntelliJ)

Na rýchle nastavenie projektu Ninja použijeme archetyp Maven. Zobrazí sa výzva na zadanie ID skupiny, ID artefaktu a čísla verzie, za ktorým nasleduje názov projektu:

mvn archetype: generate -DarchetypeGroupId = org.ninjaframework \ -DarchetypeArtifactId = ninja-servlet-archetype-simple

Alebo pre existujúci projekt Maven môžeme pridať najnovšiu ninja-core závislosť do pom.xml:

 org.ninjaframework ninja-core 6.5.0 

Potom spustíme príkaz Maven na prvú kompiláciu súborov:

mvn čistá inštalácia

Na záver spustíme aplikáciu pomocou príkazu Maven od Ninja:

mvn ninja: beh

Voila! Naša aplikácia je spustená a bude k dispozícii na adrese localhost: 8080:

4. Štruktúra projektu

Pozrime sa na štruktúru projektu podobnú Maven, ktorú vytvoril Ninja:

Rámec vytvára niekoľko balíkov na základe konvencií.

Triedy Java sú zaradené do kategórie konf, radiče, modelya služby adresáre v src / main / java.

Podobne, src / test / java má zodpovedajúce triedy jednotkových testov.

The názory adresár pod src / main / java obsahuje súbory HTML. A src / main / java / assets adresár obsahuje zdroje, ako sú obrázky, tabuľky štýlov a súbory JavaScriptu.

5. Kontrolór

Sme pripravení diskutovať o niekoľkých základných vlastnostiach rámca. Kontrolór je trieda, ktorá dostane požiadavku a vráti odpoveď s konkrétnymi výsledkami.

Najprv si prediskutujeme niekoľko konvencií, ktoré treba dodržať:

  • Vytvorte triedu v priečinku radiče zabaliť a doplniť meno znakom Kontrolór
  • Metóda slúžiaca žiadosti musí vrátiť objekt súboru Výsledok trieda

Vytvorme ApplicationController triedy jednoduchou metódou na vykreslenie HTML:

@Singleton public class ApplicationController {public Result index () {return Results.html (); }}

Tu je index metóda vykreslí HTML volaním súboru html metóda Výsledky trieda. The Výsledok objekt obsahuje všetko, čo je potrebné na vykreslenie obsahu, ako je kód odpovede, hlavičky a súbory cookie.

Poznámka: Guice @Singleton anotácia umožňuje v aplikácii iba jednu inštanciu radiča.

6. Pohľad

Pre index Ninja vyhľadá súbor HTML - index.ftl.html pod views / ApplicationController adresár.

Ninja používa na vykreslenie HTML šablónový modul Freemarker. Takže všetky súbory pod názory by mal mať .ftl.html predĺženie.

Vytvorme index.ftl.html súbor pre index metóda:

  Ninja: Index User Json 

Tu sme použili Ninja i18n značka na získanie ahojMsg majetok z message.properties spis. Ďalej o tom budeme diskutovať v časti o internacionalizácii.

7. Trasa

Ďalej definujeme trasu pre požiadavku dosiahnuť index metóda.

Ninja používa Trasy trieda v konf balík na mapovanie adresy URL na konkrétnu metódu radiča.

Pridajme cestu na prístup k index metóda ApplicationController:

public class Routes implements ApplicationRoutes {@Override public void init (Router router) {router.GET (). route ("/ index"). with (ApplicationController :: index); }}

To je všetko! Všetci sme pripravení na prístup k index stránka na localhost: 8080 / index:

8. Vykresľovanie JSON

Ako už bolo spomenuté, Ninja používa Jackson na vykreslenie JSON. Na vykreslenie obsahu JSON môžeme použiť json metóda Výsledky trieda.

Pridajme userJson metóda v ApplicationController triedy a vykresliť obsah jednoduchého HashMap v JSON:

public Result userJson () {HashMap userMap = new HashMap (); userMap.put ("meno", "Norman Lewis"); userMap.put ("email", "[chránený e-mailom]"); vrátiť Results.json (). render (užívateľ); }

Potom pridáme požadované smerovanie pre prístup k userJson:

router.GET (). route ("/ userJson"). s (ApplicationController :: userJson);

Teraz môžeme vykresliť JSON pomocou localhost: 8080 / userJson:

9. Služba

Môžeme vytvoriť službu, aby sme udržali obchodnú logiku oddelenú od kontrolóra a vložili našu službu, kedykoľvek to bude potrebné.

Najprv si vytvorme jednoduchý UserService rozhranie na definovanie abstrakcie:

verejné rozhranie UserService {HashMap getUserMap (); }

Potom implementujeme UserService rozhranie v UserServiceImpl triedy a prepísať getUserMap metóda:

verejná trieda UserServiceImpl implementuje UserService {@Override public HashMap getUserMap () {HashMap userMap = new HashMap (); userMap.put ("meno", "Norman Lewis"); userMap.put ("email", "[chránený e-mailom]"); návrat userMap; }}

Potom zaviažeme UserService rozhranie s UserServiceImpl triedy pomocou funkcie injekcie závislostí Ninja, ktorú poskytuje Guice.

Pridajme väzbu do Modul trieda k dispozícii v konf balenie:

@Singleton modul verejnej triedy rozširuje AbstractModule {protected void configure () {bind (UserService.class) .to (UserServiceImpl.class); }}

Nakoniec vpichneme injekciu UserService závislosť v ApplicationController triedy pomocou @Inject anotácia:

verejná trieda ApplicationController {@Inject UserService userService; // ...}

Všetci sme teda pripravení používať UserService‘S getUserMap metóda v ApplicationController:

public Result userJson () {HashMap userMap = userService.getUserMap (); vrátiť Results.json (). render (userMap); }

10. Rozsah blesku

Ninja poskytuje jednoduchý, ale efektívny spôsob riešenia úspešných a chybových správ z požiadaviek prostredníctvom svojej funkcie zvanej Flash Scope.

Ak ho chcete použiť v ovládači, pridáme FlashScope argument metódy:

public Result showFlashMsg (FlashScope flashScope) {flashScope.success ("Správa o úspechu"); flashScope.error ("Chybové hlásenie"); vrátiť Results.redirect ("/ home"); }

Poznámka: presmerovanie metóda Výsledky trieda presmeruje cieľ na zadanú adresu URL.

Potom pridáme smerovanie / blesk do showFlashMsg spôsob a upravte zobrazenie tak, aby zobrazovalo bleskové správy:

 $ {flash.error} $ {flash.success} 

Teraz môžeme vidieť FlashScope v akcii o localhost: 8080 / blesk:

11. Internacionalizácia

Ninja poskytuje zabudovanú funkciu internacionalizácie, ktorú je ľahké konfigurovať.

Najskôr definujeme zoznam podporovaných jazykov v application.conf spis:

application.languages ​​= fr, en

Potom vytvoríme predvolený súbor vlastností - správy.vlastnosti pre angličtinu - s pármi kľúč - hodnota pre správy:

header.home = Domov! helloMsg = Dobrý deň, vitajte v Ninja Framework!

Podobne môžeme do názvu súboru pridať jazykový kód pre súbor vlastností špecifický pre jazyk - napríklad message_fr.properties súbor pre francúzštinu:

header.home = Accueil! helloMsg = Bonjour, bienvenue dans Ninja Framework!

Keď budú konfigurácie pripravené, môžeme ľahko povoliť internacionalizáciu v ApplicationController trieda.

Máme dva spôsoby, buď použitím Lang triedy alebo Správy trieda:

@Singleton verejná trieda ApplicationController {@Inject Lang lang; @Inject Messages msg; // ...}

Potom pomocou Lang triedy, môžeme nastaviť jazyk výsledku:

Výsledok = Results.html (); lang.setLanguage ("fr", výsledok);

Podobne pomocou Správy triedy, môžeme dostať správu pre konkrétny jazyk:

Voliteľný jazyk = Optional.of ("fr"); Reťazec helloMsg = msg.get ("helloMsg", jazyk) .get ();

12. Perzistencia

Ninja podporuje JPA 2.0 a využíva Hibernate na umožnenie vytrvalosti vo webovej aplikácii. Tiež ponúka zabudovanú podporu databázy H2 pre rýchly vývoj.

12.1. Model

Vyžadujeme Subjekt triedy na spojenie s tabuľkou v databáze. Ninja sa pri tom riadi konvenciou vyhľadávania tried entít v modely balíček. Takže vytvoríme Používateľ trieda entít:

@Entity public class User {@Id @GeneratedValue (strategy = GenerationType.AUTO) Long id; public String meno; verejný reťazcový e-mail; }

Potom nakonfigurujeme režim dlhodobého spánku a nastavíme podrobnosti pripojenia k databáze.

12.2. Konfigurácia

V prípade konfigurácie režimu dlhodobého spánku Ninja očakáva persistence.xml súbor, ktorý má byť v src / main / java / META-INF adresár:

    org.hibernate.jpa.HibernatePersistenceProvider 

Potom pridáme podrobnosti o pripojení k databáze application.conf:

ninja.jpa.persistence_unit_name = dev_unit db.connection.url = jdbc: h2: ./ devDb db.connection.username = sa db.connection.password =

12.3. EntityManager

Nakoniec vložíme inštanciu súboru EntityManager v ApplicationController pomocou Guiceho Poskytovateľ trieda:

verejná trieda ApplicationController {@Inject Provider entityManagerProvider; // ...}

Sme teda pripravení použiť EntityManager vytrvať v Používateľ objekt:

@Transactional public Result insertUser (užívateľský užívateľ) {EntityManager entityManager = entityManagerProvider.get (); entityManager.persist (užívateľ); entityManager.flush (); vrátiť Results.redirect ("/ home"); }

Podobne môžeme použiť EntityManager prečítať Používateľ objekt z DB:

@UnitOfWork verejný výsledok fetchUsers () {EntityManager entityManager = entityManagerProvider.get (); Dotaz q = entityManager.createQuery ("VYBERTE x OD POUŽÍVATEĽA x"); Zoznam používateľov = (Zoznam) q.getResultList (); vrátiť Results.json (). render (používatelia); }

Tu, Ninja @UnitOfWork anotácia spracuje všetko o databázových pripojeniach bez toho, aby sa zaoberala transakciami. Preto sa môže hodiť pri dotazoch iba na čítanie, kde zvyčajne nevyžadujeme transakcie.

13. Validácia

Ninja poskytuje zabudovanú podporu pre validáciu fazule podľa dodržiavania špecifikácií JSR303.

Poďme preskúmať funkciu anotovaním vlastnosti v Používateľ subjekt s @NotNull anotácia:

verejná trieda Používateľ {// ... @NotNull verejný reťazec firstName; }

Potom upravíme už diskutované insertUser metóda v ApplicationController na povolenie validácie:

@Transactional public Result insertUser (FlashScope flashScope, @ JSR303Validation Užívateľský užívateľ, Validačné overenie) {if (validation.getViolations (). Size ()> 0) {flashScope.error ("Chyba overenia: Používateľa nie je možné vytvoriť"); } else {EntityManager entityManager = entitiyManagerProvider.get (); entityManager.persist (užívateľ); entityManager.flush (); flashScope.success ("Používateľ '" + používateľ + "' bol úspešne vytvorený"); } vrátiť Results.redirect ("/ home"); }

Použili sme Ninja @ JSR303Validation anotácia umožňujúca overenie platnosti Používateľ objekt. Potom sme pridali Validácia argument na prácu s validáciami pomocou metód ako hasViolations, getViolationsa addViolation.

Posledný FlashScope objekt slúži na zobrazenie chyby overenia na obrazovke.

Poznámka: Ninja dodržiava špecifikácie JSR303 pre validáciu fazule. Novým štandardom je však špecifikácia JSR380 (Bean Validation 2.0).

14. Záver

V tomto článku sme preskúmali webový rámec Ninja - kompletný rámec, ktorý poskytuje užitočné funkcie pomocou populárnych knižníc Java.

Na začiatok sme vytvorili jednoduchú webovú aplikáciu pomocou radiče, modely, a služby. Potom sme v aplikácii povolili vytrvalosť podpory JPA.

Zároveň sme videli niekoľko základných funkcií, ako sú trasy, vykresľovanie JSON, internacionalizácia a rozsahy Flash.

Na záver sme preskúmali podporu overovania poskytovanú rámcom.

Ako obvykle sú všetky implementácie kódu dostupné na GitHub.


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