Uvod u brzinu Apača

1. Pregled

Brzina je pokretački mehanizam zasnovan na Javi.

To je mrežni okvir otvorenog koda dizajniran da se koristi kao komponenta prikaza u MVC arhitekturi i pruža alternativu nekim postojećim tehnologijama poput JSP-a.

Brzina se može koristiti za generiranje XML datoteka, SQL, PostScript i većine drugih tekstualnih formata.

U ovom ćemo članku istražiti kako se on može koristiti za stvaranje dinamičnih web stranica.

2. Kako djeluje brzina

Osnovna klasa brzine je VelocityEngine.

Orkestrira čitav postupak čitanja, raščlanjivanja i generiranja sadržaja pomoću podatkovnog modela i predloška brzine.

Jednostavno rečeno, evo koraka koje trebamo slijediti za bilo koju tipičnu primjenu brzine:

  • Inicijalizirajte motor brzine
  • Pročitajte predložak
  • Stavite model podataka u objekt konteksta
  • Spojite predložak s podacima konteksta i prikažite prikaz

Prođimo kroz primjer slijedeći ove jednostavne korake:

VelocityEngine velocityEngine = novi VelocityEngine (); velocityEngine.init (); Predložak t = velocityEngine.getTemplate ("index.vm"); VelocityContext context = new VelocityContext (); context.put ("ime", "Svijet"); StringWriter Writer = novi StringWriter (); t.merge (kontekst, pisac);

3. Ovisnosti Mavena

Da bismo radili s Velocity-om, našem projektu Maven moramo dodati sljedeće ovisnosti:

 org.apache.brzina brzine 1.7 org.apache.brzina brzine-alati 2.0 

Najnovija verzija obje ove ovisnosti može biti ovdje: brzina i brzi alati.

4. Jezik predloška brzine

Velocity Template Language (VTL) pruža najjednostavniji i najčišći način uključivanja dinamičnog sadržaja u web stranicu pomoću VTL referenci.

VTL referenca u predlošku brzine započinje s $ i koristi se za dobivanje vrijednosti povezane s tom referencom. VTL također nudi skup direktiva koje se mogu koristiti za manipuliranje izlazom Java koda. Te direktive počinju sa #.

4.1. Reference

Postoje tri vrste referenci u Brzini, varijable, svojstva i metode:

  • varijable - definirano unutar stranice pomoću #set direktiva ili vrijednost vraćena iz polja Java objekta:
    #set ($ message = "Hello World")
  • Svojstva - odnose se na polja unutar objekta; mogu se odnositi i na a getter metoda svojstva:
    $ kupac.ime
  • metode - pogledajte metodu na Java objektu:
    $ customer.getName ()

Konačna vrijednost koja proizlazi iz svake reference pretvara se u niz kada se generira u konačni izlaz.

4.2. Direktive

VTL nudi bogat set smjernica:

  • postavljen - može se koristiti za postavljanje vrijednosti reference; ova se vrijednost može dodijeliti varijabli ili referenci svojstva:
    #set ($ message = "Hello World") #set ($ customer.name = "Brian Mcdonald")
  • kondicionale#if, #elseif i #drugo direktive pružaju način generiranja sadržaja na temelju uvjetnih provjera:
    #if ($ worker.designation == "Manager") 

    Menadžer

    #elseif ($ worker.designation == "Stariji programer")

    Viši softverski inženjer

    #drugo

    Pripravnik

    #kraj
  • petlje#za svakoga Direktiva omogućuje prelazak preko kolekcije objekata:
      #foreach ($ proizvod u $ productList)
    • $ proizvod
    • #kraj
  • uključuju#include element pruža mogućnost uvoza datoteka u predložak:
    #include ("one.gif", "two.txt", "three.html" ...)
  • raščlaniti#parse naredba omogućuje dizajneru predloška da uvozi drugu lokalnu datoteku koja sadrži VTL; Brzina će tada raščlaniti sadržaj i prikazati ga:
    #parse (Predložak)
  • procijeniti#evaluate direktiva se može koristiti za dinamičko vrednovanje VTL-a; to omogućuje predlošku da procijeni a Niz u vrijeme prikazivanja, na primjer radi internacionalizacije predloška:
    #set ($ firstName = "David") #set ($ lastName = "Johnson") #set ($ dynamicource = "$ firstName $ lastName") #evaluate ($ dynamicource)
  • pauza#pauza direktiva zaustavlja svako daljnje prikazivanje trenutnog opsega izvršavanja (tj. #za svakoga, #parse)
  • Stop#Stop direktiva zaustavlja svako daljnje prikazivanje i izvršavanje predloška.
  • velocimacros#macro direktiva omogućuje dizajneru predloška da definira ponovljeni segment VTL-a:
    #macro (stolnjaci)  #kraj

    Ovu makronaredbu sada možete staviti na bilo koje mjesto u predlošku kao #stolnjaci ():

    #macro (stolice $ color $ productList) #foreach ($ product in $ productList) $ product.name #end #end

4.3. Druge značajke

  • matematika - pregršt ugrađenih matematičkih funkcija koje se mogu koristiti u predlošcima:
    #set ($ posto = $ broj / 100) #set ($ ostatak = $ dividenda% $ djelitelj)
  • opseg operatora - koji se mogu koristiti zajedno s #set i #za svakoga:
    #set ($ array = [0..10]) #foreach ($ elem u $ arr) $ elem #end

5. Servlet brzine

Primarni posao Velocity Engine je generiranje sadržaja na temelju predloška.

Engine sam po sebi ne sadrži nikakve funkcionalnosti povezane s webom. Da bismo implementirali web aplikaciju, trebamo koristiti servlet ili okvir zasnovan na servletima.

Brzina pruža jednu izvanrednu implementaciju VelocityViewServlet, koji je dio potprojekta brzi alati.

Da biste iskoristili ugrađenu funkcionalnost koju pruža VelocityViewServlet, možemo produžiti naš servlet od VelocityViewServlet i poništiti handleRequest () metoda:

javna klasa ProductServlet proširuje VelocityViewServlet {ProductService usluga = nova ProductService (); @Override javni predložak handleRequest (zahtjev HttpServletRequest, odgovor HttpServletResponse, kontekst konteksta) baca izuzetak {Popis proizvoda = usluga.getProducts (); context.put ("proizvodi", proizvodi); return getTemplate ("index.vm"); }}

6. Konfiguracija

6.1. Web konfiguracija

Pogledajmo sada kako konfigurirati VelocityViewServlet u web.xml.

Moramo navesti neobavezne parametre inicijalizacije koji uključuju brzina.svojstva i toolbox.xml:

 apache-velocity // ... brzina org.apache.velocity.tools.view.VelocityViewServlet org.apache.velocity.properties /WEB-INF/velocity.properties // ... 

Također moramo navesti mapiranje za ovaj servlet. Svi zahtjevi za predloške za brzinu (* .vm) mora posluživati ​​servlet brzine:

 brzinaLayout * .vm 

6.2. Utovarivač resursa

Brzina pruža fleksibilan sustav za učitavanje resursa. Omogućuje istodobno rad jednog ili više učitavača resursa:

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

Ovi su učitavači resursa konfigurirani u brzina.svojstva:

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

7. Predložak brzine

Predložak brzine mjesto je na kojem je napisana sva logika generiranja pogleda. Ove su stranice napisane korištenjem jezika predložaka brzine (VTL):

 ...   ... 

$ products.size () Proizvodi na akciji!

Ponosni smo što nudimo ove fine proizvode po ovim nevjerojatnim cijenama. ... #set ($ count = 1)

#foreach ($ proizvod u $ proizvodima) #set ($ count = $ count + 1) #end
Serijski brojime proizvodaCijena
$ count)$ product.getName ()$ product.getPrice ()

8. Upravljanje izgledom stranice

Velocity pruža jednostavnu kontrolu rasporeda i prilagodljive zaslone pogrešaka za aplikaciju temeljenu na Velocity Tool.

VelocityLayoutServlet enkapsulira ovu sposobnost generiranja navedenih rasporeda. VelocityLayoutServlet je produžetak za VelocityViewServlet.

8.1. Web konfiguracija

Pogledajmo kako konfigurirati VelocityLayoutServlet. Servlet je definiran za presretanje zahtjeva za stranice predloška brzine, a specifična svojstva izgleda definirana su u brzina.svojstva datoteka:

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

8.2. Predlošci izgleda

Predložak izgleda definira tipičnu strukturu stranice brzine. Prema zadanim postavkama VelocityLayoutServlet traži Zadani.vm ispod mape izgleda. Nadjačavanje nekoliko svojstava može promijeniti ovo mjesto:

tools.view.servlet.layout.directory = layout / tools.view.servlet.layout.default.template = Default.vm 

Datoteka izgleda sastoji se od predloška zaglavlja, predloška podnožja i varijable brzine $ screen_content koja prikazuje sadržaj tražene stranice brzine:

  Brzina #parse ("/ fragmenti / zaglavlje.vm") $ screen_content #parse ("/ fragmenti / footer.vm") 

8.3. Specifikacija izgleda na traženom zaslonu

Izgled za određeni zaslon može se definirati kao varijabla brzine na početku stranice. To se postiže stavljanjem ovog retka na stranicu:

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

8.4. Specifikacija izgleda u parametru zahtjeva

U niz upita možemo dodati parametar zahtjeva layout = MyOtherLayout.vm i VLS će ga pronaći i prikazati zaslon unutar tog rasporeda, umjesto da traži zadani izgled.

8.5. Zasloni s pogreškama

Zaslon prilagođene pogreške može se implementirati pomoću rasporeda brzine. VelocityLayoutServlet pruža dvije varijable $ pogreška_uzrok i $ stack_trace predstaviti detalje o iznimkama.

Stranica s pogreškama može se konfigurirati u brzina.svojstva datoteka:

tools.view.servlet.error.template = Pogreška.vm

9. Zaključak

U ovom smo članku naučili kako je brzina koristan alat za prikazivanje dinamičnih web stranica. Također, vidjeli smo različite načine korištenja servleta pod uvjetom brzine.

Također imamo članak usredotočen na konfiguraciju brzine s Spring MVC ovdje na Baeldungu.

Kompletni kôd ovog vodiča dostupan je na GitHub-u.