Az ActiveWeb bemutatása

Java Top

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Áttekintés

Ebben a cikkben bemutatjuk az Activeweb-et - a JavaLite teljes veremű webes keretrendszerét -, amely mindent megad a dinamikus webalkalmazások vagy a REST-teljes webszolgáltatások fejlesztéséhez.

2. Alapfogalmak és alapelvek

Az Activeweb kihasználja a „konvenció a konfiguráció felett” funkciót - ami azt jelenti, hogy konfigurálható, de ésszerű alapértelmezései vannak, és nem igényel további konfigurálást. Csak néhány előre meghatározott konvenciót kell követnünk, például az osztályok, módszerek és mezők elnevezését egy előre meghatározott formátumban.

Ez is egyszerűsíti a fejlesztést azáltal, hogy újrafordítja és újratölti a forrást a futó tárolóba (alapértelmezés szerint Jetty).

A függőségkezeléshez a Google Guice-ot használja DI keretrendszerként; Ha többet szeretne megtudni a Guice-ról, tekintse meg itt található útmutatónkat.

3. Maven Setup

A kezdéshez először adjuk hozzá a szükséges függőségeket:

 org.javalite activeweb 1.15 

A legújabb verzió itt található.

Ezenkívül az alkalmazás teszteléséhez szükségünk lesz a aktív web-tesztelés függőség:

 org.javalite activeweb-testing 1.15 teszt 

Itt tekintheti meg a legújabb verziót.

4. Alkalmazás felépítése

Amint megbeszéltük, az alkalmazás struktúrájának egy bizonyos konvenciót kell követnie; így néz ki egy tipikus MVC alkalmazás:

Ahogy látjuk, vezérlők, szolgáltatás, konfig, és modellek a saját alcsomagjukban kell elhelyezni kb csomag.

A nézeteknek itt kell lenniük WEB-INF / nézetek könyvtár, mindegyiknek saját alkönyvtára van a vezérlő nevén alapulva. Például app.controllers.ArticleController kell egy cikk/ alkönyvtár, amely az adott vezérlő összes nézetfájlját tartalmazza.

A telepítési leíró vagy a web.xml jellemzően tartalmaznia kell egy és a megfelelő . Mivel a keret egy servlet szűrő, az a helyett konfiguráció van egy szűrő konfiguráció:

... diszpécser org.javalite.activeweb.RequestDispatcher ... ...

Szükségünk van egy root_controller az alkalmazás alapértelmezett vezérlőjének meghatározása - hasonló a itthon vezérlő:

... root_controller home ...

5. Vezérlők

A vezérlők az ActiveWeb alkalmazás elsődleges elemei; és, amint azt korábban említettük, az összes vezérlőnek a app.controllers csomag:

a public class ArticleController kiterjeszti az AppControllert {// ...}

Figyelje meg, hogy a vezérlő kiterjed org.javalite.activeweb.AppController.

5.1. Vezérlő URL-leképezése

A vezérlőket az egyezmény alapján automatikusan hozzárendelik egy URL-hez. Például, ArticleController feltérképezésre kerül:

// host: port / contextroot / article

Ez most leképezi őket a vezérlő alapértelmezett alapértelmezett műveletére. A műveletek nem más, mint a vezérlőn belüli módszerek. Nevezze el az alapértelmezett módszert index():

public class ArticleController kiterjeszti az AppController {// ... public void index () {render ("articles"); } // ...}

Más módszerek vagy műveletek esetén csatolja a metódus nevét az URL-hez:

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

Az URL:

// host: port / contextroot / article / search

Akár HTTP-módszereken alapuló vezérlői műveletek is lehetnek. Csak jegyezze fel a módszert bármelyikkel @POST, @PUT, @DELETE, @GET, @HEAD. Ha nem jegyzünk fel egy műveletet, az alapértelmezés szerint GET-nek minősül.

5.2. Vezérlő URL felbontása

A keretrendszer a vezérlő nevét és az alcsomag nevét használja a vezérlő URL létrehozásához. Például app.controllers.ArticleController.java az URL:

// host: port / contextroot / article

Ha a vezérlő egy alcsomagban van, akkor az URL egyszerűen:

// host: port / contextroot / baeldung / article

Egynél több szóval rendelkező vezérlőnévhez (például app.controllers.PublishedArticleController.java), az URL aláhúzással válik elválasztva:

// host: port / contextroot / published_article

5.3. Kérési paraméterek lekérése

Egy vezérlő belsejében hozzáférést kapunk a kérési paraméterekhez a param () vagy params () módszerek a AppController osztály. Az első módszer egy String argumentumot vesz fel - a lekérhető paraméternek a nevét:

public void search () {Karakterlánc kulcsszó = param ("kulcs"); nézet ("keresés", articleService.search (kulcsszó)); }

És használhatjuk a későbbieket az összes paraméter megszerzéséhez, ha szükséges:

public void search () {Térképkritérium = params (); // ...}

6. Nézetek

Az ActiveWeb terminológiájában a nézeteket gyakran sablonoknak nevezik; ez főleg azért van, mert JSP-k helyett Apache FreeMarker sablonmotort használ. A FreeMarker-ről itt olvashat többet.

Helyezze a sablonokat WEB-INF / nézetek Könyvtár. Minden vezérlőnek rendelkeznie kell egy alkönyvtárral a neve alapján, amely tartalmazza az összes szükséges sablont.

6.1. Vezérlő nézet-hozzárendelése

Ha egy vezérlőt eltalálnak, az alapértelmezett művelet index() végrehajtásra kerül, és a keretrendszer kiválasztja a WEB-INF / nézetek / cikk /index.ftl sablonozza a vezérlő nézetek könyvtárát. Hasonlóképpen, bármely más művelet esetében a nézetet a művelet neve alapján választanák meg.

Nem mindig ezt szeretnénk. Előfordulhat, hogy a belső üzleti logika alapján vissza szeretnénk adni néhány nézetet. Ebben a forgatókönyvben vezérelhetjük a folyamatot a Vakol() módszer a szülőtől org.javalite.activeweb.AppController osztály:

public void index () {render ("cikkek"); }

Vegye figyelembe, hogy az egyéni nézetek helyének ugyanabban a nézet könyvtárban kell lennie az adott vezérlő számára is. Ha nem ez a helyzet, akkor a sablon nevét tegye a sablon lakóhelyének könyvtárnevéhez, és adja át a Vakol() módszer:

render ("/ common / error");

6.3. Megtekintések adatokkal

Adatok küldéséhez a nézetekhez a org.javalite.activeweb.AppController biztosítja a Kilátás() módszer:

nézet ("cikkek", articleService.getArticles ());

Ehhez két paraméter szükséges. Először a sablonban lévő objektum eléréséhez használt objektumnév, másodszor pedig az adatokat tartalmazó objektum.

Használhatjuk is hozzárendelni() módszer az adatok továbbításához a nézetekhez. Abszolút nincs különbség a view () és a hozzárendelni() módszerek - bármelyiket választhatjuk:

hozzárendelés ("cikk", articleService.search (kulcsszó));

Feltérképezzük az adatokat a sablonban:

Cikkek ... $ {Article.title}$ {Article.author}$ {article.words}$ {Article.date}

7. A függőségek kezelése

Az objektumok és példányok kezeléséhez az ActiveWeb a Google Guice programot használja függőségkezelési keretrendszerként.

Tegyük fel, hogy szükségünk van egy szolgáltatási osztályra az alkalmazásunkban; ez elválasztaná az üzleti logikát a vezérlőktől.

Először hozzunk létre egy szolgáltatási felületet:

nyilvános felület ArticleService {List getArticles (); Cikkkeresés (String kulcsszó); }

És a megvalósítás:

public class ArticleServiceImpl implementálja a ArticleService {public List getArticles () {return fetchArticles (); } nyilvános cikkkeresés (karakterlánc kulcsszó) {cikk ar = új cikk (); ar.set ("cím", "Cikk" + kulcsszóval); ar.set ("szerző", "baeldung"); ar.set ("szavak", "1250"); ar.setDate ("dátum", Instant.now ()); visszatérés ar; }}

Most kössük ezt a szolgáltatást Guice modulként:

public class ArticleServiceModule kiterjeszti az AbstractModule {@Orride védett void configure () {bind (ArticleService.class) .to (ArticleServiceImpl.class) .asEagerSingleton (); }}

Végül regisztrálja ezt az alkalmazás kontextusában, és szükség szerint fecskendezze be a vezérlőbe:

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

Ne feledje, hogy ennek a config osztálynévnek meg kell lennie AppBootstrap és annak a app.config csomag.

Végül a következőképpen adjuk be a vezérlőbe:

@ Injekciózza a privát ArticleService cikketService;

8. Tesztelés

Az ActiveWeb alkalmazás egység tesztjeit a JavaSite JSpec könyvtár segítségével írják.

Használjuk a org.javalite.activeweb.ControllerSpec osztály a JSpec-től a vezérlőnk teszteléséhez, és hasonló konvenciót követve nevezzük meg a tesztosztályokat:

public class ArticleControllerSpec kiterjeszti a ControllerSpec {// ...}

Figyelje meg, hogy a név hasonló a vezérlőhöz, amelyet tesztel, a végén egy „Spec” jellel.

Itt van a teszteset:

@Test public void whenReturnedArticlesThenCorrect () {request (). Get ("index"); a (responseContent ()) .shouldContain ("Bevezetés az öszvérbe"); }

Figyeljük meg, hogy a kérés() metódus szimulálja a vezérlőhívást és a megfelelő HTTP metódust kap(), argumentumként veszi a művelet nevét.

A paramétereket átadhatjuk a vezérlőnek a params () módszer:

@Test public void givenKeywordWhenFoundArticleThenCorrect () {request (). Param ("kulcs", "Java"). Get ("keresés"); a (responseContent ()) .shouldContain ("Cikk Java-val"); }

Több paraméter átadásához láncolhatunk metódust is ezzel a folyékony API-val.

9. Az alkalmazás telepítése

Telepítheti az alkalmazást bármely szervlet-konténerbe, például Tomcat, WildFly vagy Jetty. Természetesen a telepítés és a tesztelés legegyszerűbb módja a Maven Jetty plugin használata:

... org.eclipse.jetty móló-maven-plugin 9.4.8.v20171121 kézi 10000 ...

A bővítmény legújabb verziója itt van.

Most végre - felgyújthatjuk:

mvn móló: futás

10. Következtetés

Ebben a cikkben megismerkedtünk az ActiveWeb keretrendszer alapfogalmaival és konvencióival. Ezek mellett a keretrendszer több funkcióval és képességgel rendelkezik, mint amit itt tárgyaltunk.

További részletekért olvassa el a hivatalos dokumentációt.

És mint mindig, a cikkben használt mintakód elérhető a GitHubon.

Java alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT