Bevezetés az Apache sebességébe

1. Áttekintés

A Velocity Java alapú sablonmotor.

Ez egy nyílt forráskódú webkeret, amelyet az MVC architektúrájának nézetkomponenseként terveztek használni, és alternatívát kínál néhány létező technológiához, például a JSP-hez.

A sebesség használható XML fájlok, SQL, PostScript és a legtöbb más szöveges formátum előállítására.

Ebben a cikkben azt vizsgáljuk, hogy miként lehet dinamikus weboldalakat létrehozni.

2. Hogyan működik a sebesség?

A sebesség fő osztálya a VelocityEngine.

Az adatmodell és a sebességsablon segítségével a tartalom olvasásának, elemzésének és létrehozásának teljes folyamatát hangszereli.

Egyszerűen fogalmazva, itt vannak a lépések, amelyeket meg kell követnünk bármilyen tipikus sebesség-alkalmazásnál:

  • Inicializálja a sebességmotort
  • Olvassa el a sablont
  • Helyezze az adatmodellt a context objectbe
  • Egyesítse a sablont a kontextusadatokkal, és renderelje a nézetet

Menjünk át egy példát kövesse ezeket az egyszerű lépéseket:

VelocityEngine velocityEngine = új VelocityEngine (); velocityEngine.init (); Sablon t = velocityEngine.getTemplate ("index.vm"); VelocityContext context = új VelocityContext (); context.put ("név", "Világ"); StringWriter író = new StringWriter (); t.merge (kontextus, író);

3. Maven-függőségek

A Velocity-vel való együttműködéshez a következő függőségeket kell hozzáadnunk a Maven-projektünkhöz:

 org.apache.velocity sebesség 1.7 org.apache.velocity speed-tools 2.0 

Mindkét függőség legújabb verziója itt lehet: sebesség és sebesség eszközök.

4. Sebesség sablon nyelve

A Velocity Template Language (VTL) a legegyszerűbb és legtisztább módja annak, hogy a dinamikus tartalmat egy weboldalba beépítsük VTL hivatkozások segítségével.

A VTL referencia a sebességsablonban a-val kezdődik $ és az adott referenciához társított érték lekérésére szolgál. A VTL irányelveket is tartalmaz, amelyek felhasználhatók a Java kód kimenetének manipulálására. Ezek az irányelvek kezdődnek #.

4.1. Hivatkozások

A Velocity-ben háromféle hivatkozás létezik, változók, tulajdonságok és módszerek:

  • változók - az oldalon belül definiálva #készlet a Java objektum mezőjéből visszaadott irányelv vagy érték:
    #set ($ message = "Hello World")
  • tulajdonságait - hivatkozás az objektumon belüli mezőkre; utalhatnak a getter az ingatlan módszere:
    $ customer.name
  • mód - lásd a Java objektumon található módszert:
    $ customer.getName ()

Az egyes hivatkozásokból származó végső értékeket karakterláncokká konvertáljuk, amikor az a végső kimenetbe kerül.

4.2. Irányelvek

A VTL gazdag irányelveket tartalmaz:

  • készlet - felhasználható referenciaérték beállítására; ez az érték hozzárendelhető egy változóhoz vagy egy tulajdonság referenciához:
    #set ($ message = "Hello World") #set ($ customer.name = "Brian Mcdonald")
  • feltételes#if, #elseif és #más az irányelvek lehetőséget nyújtanak a tartalom feltételes ellenőrzéseken alapuló előállítására:
    #if ($ worker.designation == "Menedzser") 

    Menedzser

    #elseif ($ worker.designation == "Senior Developer")

    Vezető szoftvermérnök

    #más

    Gyakornok

    # vége
  • hurkok#az egyes irányelv lehetővé teszi az objektumok gyűjteménye közötti hurkolást:
      #foreach ($ termék a $ productList-ben)
    • $ termék
    • # vége
  • tartalmazza#include elem lehetővé teszi fájlok importálását a sablonba:
    #include ("one.gif", "two.txt", "three.html" ...)
  • elemzés#parse utasítás lehetővé teszi a sablontervező számára egy másik helyi fájl importálását, amely VTL-t tartalmaz; A Velocity majd elemzi a tartalmat és megjeleníti:
    #parse (sablon)
  • értékelni#értékelés irányelv használható a VTL dinamikus értékelésére; ez lehetővé teszi a sablon értékelését a Húr rendereléskor, például a sablon nemzetközivé tétele érdekében:
    #set ($ firstName = "David") #set ($ lastName = "Johnson") #set ($ dynamicsource = "$ firstName $ lastName") #értékelés ($ dynamicsource)
  • szünet#szünet irányelv megállítja a jelenlegi végrehajtási hatókör (azaz #az egyes, #parse)
  • álljon meg#álljon meg irányelv megállítja a sablon további előállítását és végrehajtását.
  • velocimacros#makró irányelv lehetővé teszi a sablontervező számára, hogy meghatározza a VTL ismételt szegmensét:
    #macro (tablerows)  # vége

    Ez a makró mostantól a sablon tetszőleges helyére #táblázatok ():

    #macro (tablerows $ color $ productList) #foreach ($ product in $ productList) $ product.name # vég # vég

4.3. Más funkciók

  • matek - néhány beépített matematikai függvény, amely sablonokban használható:
    #set ($ percent = $ number / 100) #set ($ maradék = $ osztalék% $ osztó)
  • tartomány üzemeltetője - amely együtt használható a #készlet és #az egyes:
    #set ($ array = [0..10]) #foreach ($ elem in $ arr) $ elem # vég

5. Velocity Servlet

A Velocity Engine elsődleges feladata a sablon alapján tartalom létrehozása.

A Motor önmagában nem tartalmaz webes funkciókat. Egy webalkalmazás megvalósításához servlet vagy servlet alapú keretrendszert kell használnunk.

A Velocity a dobozon kívüli megvalósítást biztosítja VelocityViewServlet, amely a sebesség-eszközök alprojekt része.

A beépített funkcionalitás kihasználása VelocityViewServlet, -től meghosszabbíthatjuk a servletünket VelocityViewServlet és felülírja a handleRequest () módszer:

public class ProductServlet kiterjeszti a VelocityViewServlet {ProductService service = new ProductService (); A @Override public Template handleRequest (HttpServletRequest kérés, HttpServletResponse válasz, kontextus kontextus) kivételt dob ​​a {List products = service.getProducts (); context.put ("termékek", termékek); return getTemplate ("index.vm"); }}

6. Konfiguráció

6.1. Webkonfiguráció

Most nézzük meg, hogyan kell konfigurálni a VelocityViewServlet ban,-ben web.xml.

Meg kell adnunk az opcionális inicializálási paramétereket, amelyek tartalmazzák sebesség.tulajdonságok és toolbox.xml:

 apache-velocity // ... sebesség org.apache.velocity.tools.view.VelocityViewServlet org.apache.velocity.properties /WEB-INF/velocity.properties // ... 

Meg kell adnunk ennek a szervletnek a leképezését is. A sebességsablonok összes kérése (* .vm) a sebesség szervletnek kell kiszolgálnia:

 sebességelrendezés * .vm 

6.2. Erőforrás-betöltő

A Velocity rugalmas erőforrás-betöltő rendszert biztosít. Lehetővé teszi egy vagy több erőforrás-betöltő egyidejű működését:

  • FileResourceLoader
  • JarResourceLoader
  • ClassPathResourceLoader
  • URLResourceLoader
  • DataSourceResourceLoader
  • WebappResourceLoader

Ezek az erőforrás-betöltők itt vannak konfigurálva sebesség.tulajdonságok:

resource.loader = webapp webapp.resource.loader.class = org.apache.velocity.tools.view.WebappResourceLoader webapp.resource.loader.path = webapp.resource.loader.cache = true

7. Sebességsablon

A sebességsablon az a hely, ahol az összes nézetgenerálási logika meg van írva. Ezek az oldalak a Velocity Template Language (VTL) segítségével íródnak:

 ...   ... 

$ products.size () Akciós termékek!

Büszkék vagyunk arra, hogy ezeket a kiváló termékeket csodálatos áron kínáljuk. ... #set ($ count = 1)

#foreach ($ termék $ termékben) # set ($ count = $ count + 1) # vég
Sorozatszámtermék névÁr
$ count)$ product.getName ()$ product.getPrice ()

8. Az oldalelrendezés kezelése

A Velocity egyszerű elrendezésvezérlést és testreszabható hibaképernyőket biztosít a Velocity Tool alapú alkalmazáshoz.

VelocityLayoutServlet ezt a képességet foglalja magában a megadott elrendezések megjelenítésére. VelocityLayoutServlet kiterjesztése a VelocityViewServlet.

8.1. Webkonfiguráció

Lássuk, hogyan kell konfigurálni a VelocityLayoutServlet. A kiszolgáló kisalkalmazás a sebességsablon-oldalak kéréseinek elfogására van meghatározva, az elrendezésspecifikus tulajdonságok pedig a sebesség.tulajdonságok fájl:

 // ... velocityLayout org.apache.velocity.tools.view.VelocityLayoutServlet org.apache.velocity.properties /WEB-INF/velocity.properties // ... velocityLayout * .vm // ... 

8.2. Elrendezési sablonok

Az elrendezési sablon meghatározza a sebesség oldal tipikus felépítését. Alapértelmezés szerint a VelocityLayoutServlet keres Alapértelmezett.vm az elrendezés mappa alatt. Néhány tulajdonság felülírása megváltoztathatja ezt a helyet:

tools.view.servlet.layout.directory = layout / tools.view.servlet.layout.default.template = Alapértelmezett.vm 

Az elrendezési fájl fejlécsablonból, láblécsablonból és egy sebességváltozóból áll $ screen_content amely megjeleníti a kért sebesség oldal tartalmát:

  Velocity #parse ("/ fragments / header.vm") $ screen_content #parse ("/ fragments / footer.vm") 

8.3. Elrendezés specifikáció a kért képernyőn

Egy adott képernyő elrendezése meghatározható sebességváltozóként az oldal elején. Ezt úgy tehetjük meg, hogy ezt a sort betesszük az oldalra:

#set ($ layout = "MyOtherLayout.vm")

8.4. Elrendezés specifikáció a kérelem paraméterben

Hozzáadhatunk egy kérési paramétert a lekérdezési karakterlánchoz layout = MyOtherLayout.vm és a VLS megtalálja, és az alapértelmezett elrendezés keresése helyett az adott elrendezésen belül rendereli a képernyőt.

8.5. Hiba képernyők

A testreszabott hiba képernyő a sebesség elrendezésével valósítható meg. VelocityLayoutServlet két változót nyújt $ error_cause és $ stack_trace hogy bemutassam a kivétel részleteit.

A Hiba oldal itt konfigurálható sebesség.tulajdonságok fájl:

tools.view.servlet.error.template = Hiba.vm

9. Következtetés

Ebben a cikkben megtudtuk, hogy a Velocity hogyan hasznos eszköz a dinamikus weboldalak megjelenítéséhez. Emellett különböző módon láttuk a sebességgel biztosított kiszolgálók használatát.

Van egy cikkünk, amely a Velocity konfigurációra összpontosít a Spring MVC-vel itt, Baeldungban.

Az oktatóanyag teljes kódja elérhető a GitHub oldalon.