מבוא למהירות אפאצ'י

1. סקירה כללית

Velocity הוא מנוע תבניות מבוסס Java.

זוהי מסגרת אינטרנט קוד פתוח המיועדת לשמש כמרכיב תצוגה בארכיטקטורת MVC, והיא מספקת אלטרנטיבה לכמה טכנולוגיות קיימות כמו JSP.

ניתן להשתמש ב- Velocity ליצירת קבצי XML, SQL, PostScript ורוב הפורמטים האחרים מבוססי טקסט.

במאמר זה נחקור כיצד ניתן להשתמש בו ליצירת דפי אינטרנט דינמיים.

2. איך מהירות עובדת

מעמד הליבה של המהירות הוא VelocityEngine.

זה מתאר את כל התהליך של קריאה, ניתוח ויצירת תוכן באמצעות מודל נתונים ותבנית מהירות.

במילים פשוטות, להלן השלבים שעלינו לבצע עבור כל יישום מהירות אופייני:

  • אתחל את מנוע המהירות
  • קרא את התבנית
  • שים את מודל הנתונים באובייקט הקשר
  • מיזג את התבנית עם נתוני הקשר והפוך את התצוגה

בוא נעבור דוגמא לפי השלבים הפשוטים הבאים:

VelocityEngine velocityEngine = חדש VelocityEngine (); velocityEngine.init (); תבנית t = velocityEngine.getTemplate ("index.vm"); הקשר VelocityContext = VelocityContext חדש (); context.put ("שם", "עולם"); סופר StringWriter = חדש StringWriter (); t.merge (הקשר, כותב);

3. תלות Maven

כדי לעבוד עם Velocity, עלינו להוסיף תלות הבאה לפרויקט Maven שלנו:

 org.apache.velocity velocity 1.7 org.apache.velocity velocity-tools 2.0 

הגרסה האחרונה של שתי התלות הללו יכולה להיות כאן: מהירות וכלים מהירים.

4. שפת תבנית מהירות

שפת תבנית מהירות (VTL) מספקת את הדרך הפשוטה והנקייה ביותר לשילוב התוכן הדינמי בדף אינטרנט באמצעות הפניות ל- VTL.

התייחסות VTL בתבנית המהירות מתחילה עם $ ומשמש לקבלת הערך המשויך לאותו הפניה. VTL מספק גם קבוצה של הוראות שבהן ניתן להשתמש כדי לתפעל את הפלט של קוד Java. ההוראות האלה מתחילות עם #.

4.1. הפניות

ישנם שלושה סוגים של הפניות במהירות, משתנים, מאפיינים ושיטות:

  • משתנים - מוגדר בתוך הדף באמצעות #מַעֲרֶכֶת הנחיה או ערך שהוחזר משדה אובייקט Java:
    #set ($ message = "שלום עולם")
  • נכסים - התייחסו לשדות בתוך אובייקט; הם יכולים להתייחס גם לא גטר שיטת הנכס:
    $ customer.name
  • שיטות - עיין בשיטה באובייקט Java:
    $ customer.getName ()

הערך הסופי הנובע מכל הפניה מומר למחרוזת כאשר הוא מועבר לפלט הסופי.

4.2. הוראות

VTL מספק מערכת עשירה של הוראות:

  • מַעֲרֶכֶת - ניתן להשתמש בו לקביעת ערך הפניה; ניתן להקצות ערך זה למשתנה או להפניה למאפיין:
    #set ($ message = "Hello World") #set ($ customer.name = "בריאן מקדונלד")
  • תנאים# אם, # אלסיף ו #אַחֵר הוראות מספקות דרך לייצר את התוכן על סמך בדיקות מותנות:
    #if ($ employee.designation == "מנהל") 

    מנהל

    #elseif ($ employee.designation == "מפתח בכיר")

    מהנדס תוכנה בכיר

    #אַחֵר

    חָנִיך

    #סוֹף
  • לולאות#לכל אחד ההנחיה מאפשרת לולאה על אוסף של אובייקטים:
      #foreach ($ מוצר ב- $ productList)
    • מוצר $
    • #סוֹף
  • לִכלוֹל#לִכלוֹל רכיב מספק את היכולת לייבא קבצים לתבנית:
    #include ("one.gif", "two.txt", "three.html" ...)
  • לְנַתֵחַ#לְנַתֵחַ הצהרה מאפשרת למעצב התבניות לייבא קובץ מקומי נוסף המכיל VTL; מהירות תנתח את התוכן ותעשה זאת:
    #parse (תבנית)
  • להעריך#להעריך ניתן להשתמש בהנחיה להערכת VTL באופן דינמי; זה מאפשר לתבנית להעריך א חוּט בזמן העיבוד, למשל לשם בינאום התבנית:
    #set ($ firstName = "David") #set ($ lastName = "Johnson") #set ($ dynamicsource = "$ firstName $ lastName") #evaluate ($ dynamicsource)
  • לשבור#לשבור ההנחיה מפסיקה כל ביצוע נוסף של היקף הביצוע הנוכחי (כלומר #לכל אחד, #לְנַתֵחַ)
  • תפסיק#תפסיק ההוראה מפסיקה כל העברה וביצוע נוספים של התבנית.
  • velocimacros# מקרו הוראה מאפשרת למעצב התבניות להגדיר קטע חוזר של VTL:
    #macro (tablerows)  #סוֹף

    כעת ניתן להכניס את המאקרו הזה לכל מקום בתבנית כ- #טבלאות ():

    #macro (tablerows $ color $ productList) #foreach ($ product in $ productList) $ product.name # סוף # סוף

4.3. תכונות אחרות

  • מתמטיקה - קומץ פונקציות מתמטיות מובנות, שיכולות לשמש בתבניות:
    # set ($ אחוז = $ מספר / 100) # set ($ שארית = $ דיבידנד% $ מחלק)
  • מפעיל טווח - שניתן להשתמש בהם בשילוב עם #מַעֲרֶכֶת ו #לכל אחד:
    #set ($ array = [0..10]) #foreach ($ elem ב- $ arr) $ elem #end

5. סרוולט מהירות

התפקיד העיקרי של מנוע המהירות הוא ליצור תוכן המבוסס על תבנית.

המנוע אינו מכיל פונקציות הקשורות לאינטרנט בפני עצמו. כדי ליישם יישום אינטרנט, עלינו להשתמש ב- servlet או במסגרת מבוססת servlet.

מהירות מספק יישום אחד מהקופסה VelocityViewServlet, שהוא חלק מתת-הפרויקט של כלים מהירות.

כדי להשתמש בפונקציונליות המובנית המסופקת על ידי VelocityViewServlet, אנחנו יכולים להאריך את סרוולט שלנו מ VelocityViewServlet ולדרוס את handleRequest () שיטה:

מחלקה ציבורית ProductServlet מרחיבה את VelocityViewServlet {שירות שירות המוצר = שירות מוצר חדש (); @Override התבנית הציבורית handleRequest (HttpServletRequest בקשה, HttpServletResponse תגובה, הקשר הקשר) זורק חריג {List products = service.getProducts (); context.put ("מוצרים", מוצרים); החזר getTemplate ("index.vm"); }}

6. תצורה

6.1. תצורת אינטרנט

בואו נראה עכשיו כיצד להגדיר את VelocityViewServlet בתוך ה web.xml.

עלינו לציין את פרמטרי האתחול האופציונליים הכוללים velocity.properties ו toolbox.xml:

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

עלינו גם לציין את המיפוי עבור סרוולט זה. כל הבקשות לתבניות מהירות (* .vm) צריך להיות מוגש על ידי סרוולט המהירות:

 velocityLayout * .vm 

6.2. מטעין משאבים

Velocity מספקת מערכת מעמיסי משאבים גמישים. זה מאפשר לטעינת משאבים אחד או יותר להיות פעיל באותו זמן:

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

מעמיסי משאבים אלה מוגדרים ב velocity.properties:

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

7. תבנית מהירות

תבנית המהירות היא המקום בו כתוב כל הלוגיקה של יצירת התצוגה. דפים אלה נכתבים באמצעות שפת תבנית מהירות (VTL):

 ...   ... 

$ products.size () מוצרים במבצע!

אנו גאים להציע מוצרים משובחים אלה במחירים מדהימים אלה. ... # סט ($ count = 1)

#foreach (מוצר $ במוצרים $) #set ($ count = $ count + 1) #end
סידורי #שם מוצרמחיר
ספירת $)$ product.getName ()$ product.getPrice ()

8. ניהול פריסת העמודים

Velocity מספק בקרת פריסה פשוטה ומסכי שגיאה הניתנים להתאמה אישית עבור יישום מבוסס כלי Velocity.

VelocityLayoutServlet מקפל יכולת זו לעיבוד הפריסות שצוינו. VelocityLayoutServlet הוא הרחבה ל- VelocityViewServlet.

8.1. תצורת אינטרנט

בואו נראה כיצד להגדיר את VelocityLayoutServlet. ה- servlet מוגדר ליירוט הבקשות לדפי תבנית המהירות והמאפיינים הספציפיים לפריסה מוגדרים velocity.properties קוֹבֶץ:

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

8.2. תבניות פריסה

תבנית פריסה מגדירה את המבנה האופייני של דף מהירות. כברירת מחדל, ה- VelocityLayoutServlet מחפש Default.vm מתחת לתיקיית הפריסה. עקיפת מספר נכסים יכולה לשנות את המיקום הזה:

tools.view.servlet.layout.directory = פריסה / tools.view.servlet.layout.default.template = Default.vm 

קובץ הפריסה מורכב מתבנית כותרת עליונה, תבנית תחתונה ומשתנה מהירות $ screen_content שמציג את התוכן של דף המהירות המבוקש:

  מהירות #parse ("/ fragments / header.vm") $ screen_content #parse ("/ fragments / footer.vm") 

8.3. מפרט פריסה במסך המבוקש

ניתן להגדיר פריסה למסך מסוים כמשתנה מהירות בתחילת דף. זה נעשה על ידי הצבת שורה זו בדף:

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

8.4. מפרט פריסה בפרמטר הבקשה

אנו יכולים להוסיף פרמטר בקשה במחרוזת השאילתה פריסה = MyOtherLayout.vm ו- VLS ימצאו אותו ויעבדו את המסך בפריסה זו במקום לחפש פריסת ברירת מחדל.

8.5. מסכי שגיאה

ניתן ליישם את מסך השגיאה המותאם אישית באמצעות פריסת מהירות. VelocityLayoutServlet מספק שני משתנים $ error_cause ו $ stack_trace להציג את פרטי החריגה.

ניתן להגדיר דף שגיאה ב velocity.properties קוֹבֶץ:

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

9. מסקנה

במאמר זה למדנו כיצד מהירות היא כלי שימושי לעיבוד דפי האינטרנט הדינמיים. כמו כן, ראינו דרכים שונות לשימוש בסרוולטים המסופקים במהירות.

יש לנו גם מאמר שהתמקד בתצורת מהירות עם MVC של אביב כאן בבלדונג.

הקוד השלם להדרכה זו זמין באתר GitHub.