لقد شاهد العديد من الأشخاص السرعة أو تعلموا عنها، والترجمة الحرفية للاسم هي: السرعة، والسرعة، والسرعة، وهي تُستخدم في تطوير الويب، ولكن لم يستخدمها الكثير من الأشخاص بشكل أساسي والدعامات ذات الصلة، ما رأيك في السرعة؟ دعونا نجربها ونفهم مفهوم السرعة من خلال المقدمة هنا، نؤكد على المشكلات المتعلقة باختيار التكنولوجيا، حتى يتمكن الجميع من أخذ السرعة في الاعتبار عند اختيار تطوير المشروع، وكذلك السماح للجميع بفهم أفكارها طريقة تفكير جيدة جدًا، تمنح الجميع تغييرًا في القلب وطريقة تفكير مختلفة.
تعتمد هذه المقالة على حقيقة أن لديك أساسًا معينًا في تطوير Java وتعرف MVC وStruts ونماذج التطوير الأخرى.
السرعة عبارة عن تقنية محرك قالب Java تم اقتراح المشروع بواسطة Apache وتم استخلاصه من تقنية محرك أخرى، Webmacro. إذن ما هو التعريف الرسمي للسرعة؟ يعرفه Apache على أنه: محرك قالب يعتمد على Java، ولكنه يسمح لأي شخص باستخدام لغة قالب بسيطة وقوية للإشارة إلى الكائنات المحددة في كود Java. أحدث إصدار هو 1.4. يمكنك العثور على مزيد من المعلومات على http://jakarta.apache.org/velocity/index.html .
في الواقع، بصراحة، السرعة هي تطبيق لبنية MVC، لكنها تركز أكثر على العلاقة بين النموذج والعرض كجسر بينهما. أعتقد أن الجميع على دراية بـ Struts، وهي البنية الأكثر شيوعًا لـ MVC. يستخدم العديد من المطورين بنية Struts على نطاق واسع، بما في ذلك إصدارات النظام الأساسي للإدارة من IBM Websphere 5 أو أعلى، وهي ممارسة جيدة لـ MVC، وتقلل بشكل فعال من Java يظهر الكود في العرض (Jsp)، لكن الاتصال بين النموذج والعرض لا يزال يعتمد على تقنية Taglib الخاصة بـ Struts. فقط تخيل ما إذا كان مصمم الويب الأمامي ليس على دراية بـ Struts أو حتى Taglib (أعتقد أنه من الصعب جدًا أن تكون على دراية بها). معها، بما في ذلك موظفي الصيانة اللاحقين)، مما يجعل من الصعب جدًا على مصممي الويب ومهندسي تطوير الواجهة الأمامية التعاون مع بعضهم البعض في التطوير الحقيقي، لا تزال هناك حقيقة مفادها أن العمل بين مصممي الويب وقد يكون مطورو الواجهة الأمامية أكثر تعقيدًا. لا يزال هناك درجة معينة من الاقتران. كيف يمكن حل هذه المشكلة إلى أقصى حد؟ دعونا نلقي نظرة على السرعة أو هذا المفهوم.
لنبدأ بأبسط مثال على تطوير السرعة لنوضح لك كيفية عمل السرعة:
1. قم بإنشاء ملف، اسم الملف هو: hellavelocity.vm، وهو قالب السرعة (في الواقع نفس html)، المحتوى هو:
مرحبًا بـ $name في Javayou.com!
اليوم هو تاريخ $.
2. أنشئ ملف Java، HelloVelocity.java، بالمحتوى:
package com.javayou.velocity;
import java.io.StringWriter;
import java.util.*;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
/**
* @ المؤلف Liang.xf 2004-12-14
*/
الطبقة العامة HelloVelocity {
public static void main(String[] args) يطرح الاستثناء {
// تهيئة محرك السرعة والحصول عليه
VelocityEngine ve = new VelocityEngine();
ve.init();
// احصل على قالب السرعة
القالب t = ve.getTemplate("hellovelocity.vm");
// احصل على سياق السرعة
VelocityContext context = new VelocityContext();
// املأ البيانات في السياق
context.put("name", "Liang");
context.put("date", (new Date()).toString());
// للعرض لاحقًا، أدخل قيمة القائمة مقدمًا
قائمة مؤقتة = new ArrayList();
temp.add("1");
temp.add("2");
context.put("list", temp);
// دفق الإخراج
StringWriterwriter = new StringWriter();
// تحويل الإخراج
t.merge(context,writer);
System.out.println(writer.toString());
}
}
3. قم بتنزيل ملف Velocity 1.4 المضغوط من http://jakarta.apache.org/site/binindex.cgi ، وقم بفك ضغطه للحصول على velocity-1.4.jar، واستخدمه لتجميع الفئة HelloVelocity.java أعلاه.
4. انسخ ملف hellavelocity.vm on 1 إلى الدليل الحالي للتشغيل. يتطلب تشغيل HelloVelocity أيضًا حزمًا أخرى، والتي يمكن الحصول عليها من الملف velocity1.4.zip الذي تم تنزيله، \velocity - 1.4\build\lib، ثم ضعه. بعد تقديم commons-collections.jar وlogkit-1.0.1.jar، قم بتشغيل java -cp .\bin -Djava.ext.dirs=.\lib2 com.javayou.velocity.HelloVelocity، بافتراض أن الفصل قد تم تجميعه. إلى الدليل .\ bin، ويتم وضع حزم الفئات التي نحتاجها في الدليل .\lib2 وتكون بنية التشغيل كما يلي:
مرحبًا بـ Liang في Javayou.com!
اليوم هو الثلاثاء 14 ديسمبر الساعة 19:26:37 بتوقيت وسط أمريكا 2004.
ما ورد أعلاه هو أبسط نتيجة تشغيل، ماذا عن ذلك؟ اسمحوا لي أن أعرف بشكل تقريبي المتغيرين المحددين $name و$date في قالب hellavelocity.vm هما context.put("name"، "Liang") و context.put. (تم استبدال "date"، (new Date()).toString()) بمجموعة القيمة.
من وجهة النظر هذه، يتم حل معالجة العمليات التجارية، بما في ذلك نتائج الأعمال، بشكل أساسي في طبقة النموذج، في حين يتم عرض طبقة العرض بشكل أساسي فقط باستخدام VTL (لغة قالب السرعة) البسيطة. بهذه الطريقة، ألن يكون Jsp غير ضروري؟ نعم، نموذج الاستخدام هذا يشبه إلى حد ما طريقة CGI السابقة :) تعمل السرعة تلقائيًا على إخراج التعليمات البرمجية، كما أن السرعة أيضًا قادرة جدًا في هذا الصدد على استخدام السرعة في Turbine لإنشاء الكثير من التعليمات البرمجية.
في السرعة، تبدأ التعريفات المتغيرة بـ "$"، ويعمل $ كمعرف للسرعة. يمكن استخدام الحروف والأرقام والحدود والتسطير كمتغيرات محددة في السرعة.
بالإضافة إلى ذلك، نحتاج أيضًا إلى الاهتمام بالتعريفات المتغيرة المميزة للسرعة، مثل: $student.No، $student.Address، والتي لها مستويان من المعنى: الأول هو إذا كان الطالب قابلاً للتجزئة، والمفتاح No وwill يتم استخراج قيمة العنوان من جدول التجزئة، والنوع الثاني هو أنه قد يكون أسلوب استدعاء، أي أنه سيتم تحويل المتغيرين أعلاه إلى Student.getNo() و Student.getAddress(). تحتوي السرعة على كائن للقيمة التي يتم إرجاعها بواسطة كود Java في servlet، ويمكنها أيضًا استدعاء أساليب الكائن، مثل $student.getAddress()، وما إلى ذلك. لن أقدم أمثلة وأخوض في التفاصيل هنا.
المثال أعلاه هو مجرد مثال بسيط، بالطبع، لم يعد الكثير من الأشخاص راضين عن مثل هذه الأمثلة في التطبيقات الفعلية، فغالبًا ما نحتاج إلى إجراء بعض العروض الانتقائية وتعداد بعض البيانات التكرارية، مثل قوائم القائمة، وبالطبع السرعة (). على وجه التحديد، يجب أن تكون لغة قالب VTL) تدعم أيضًا هذه الوظيفة، بالإضافة إلى أنها تدعم أيضًا بعض شاشات العرض الأخرى شائعة الاستخدام، مثل المتغيرات داخل القالب (مثل المتغيرات في Jsp)، وأخرى أكثر قوة مثل إنشاء وحدات ماكرو لتحقيق الأتمتة. دعونا نواصل القراءة.
مازلنا نستخدم المثال أعلاه ونغير المحتوى في قالب hellavelocity.vm إلى:
#set( $iAmVariable = "جيد!")
مرحبًا بـ $name في Javayou.com!
اليوم هو تاريخ $.
$iAmVariable
أعد تنفيذ أمر التشغيل أعلاه، وتكون النتيجة:
مرحبًا بـ Liang في Javayou.com!
اليوم هو الثلاثاء 14 ديسمبر الساعة 22:44:39 بتوقيت وسط أمريكا 2004.
جيد!
يمكنك أن ترى أن المتغيرات الموجودة في القالب تم تعريفها على أنها عبارات تبدأ بـ #set، وهو أمر ليس من الصعب فهمه بعد التنفيذ، يتم تحويل المتغيرات $iAmVariable في القالب إلى القيم المحددة:
جيد!
دعونا نلقي نظرة على خيار بسيط مرة أخرى، قم بتغيير المحتوى الموجود في قالب hellavelocity.vm إلى:
#set ($admin = "admin")
#set ($المستخدم = "المستخدم")
#if ($admin ==$user)
مرحبا المشرف!
#آخر
مرحباً بالمستخدم!
#نهاية
قم بتنفيذ أمر التشغيل، والنتيجة هي:
مرحباً بالمستخدم!
يمكنك أن ترى أن عبارات الحكم بسيطة فقط #if ()، #else، #end، وليست معقدة للغاية.
دعنا نستمر في إلقاء نظرة على بيانات التكرار وتغيير المحتوى في القالب hellavelocity.vm إلى:
#foreach(منتج $ في قائمة $)
منتج $
#نهاية
قم بتنفيذ أمر التشغيل، والنتيجة هي:
#1
#2
أليس من الملائم إدراج القيم المحفوظة مسبقًا في قائمة VelocityContext في المثال؟ ما عليك سوى استخدام #foreach ($متغير في xx). إذا تم استبدال القائمة أعلاه بجدول Hashtable، فيمكنك استخدام بناء الجملة التالي:
#foreach($key في $hashVariable.keySet() )
قيمة $key: $ hashVariable.get($key)
#نهاية
لا أعتقد أن هذه النصوص معقدة على الإطلاق.
سوف يتساءل الكثير من الناس أيضًا، ماذا لو كان جافابيان؟ حسنًا ، دعنا نضيف حبة الفول:
package com.javayou.velocity;
/**
* @ المؤلف Liang.xf 2004-12-14
*/
طالب الصف العام {
// لاحظ أن سمات الفصل عامة
سلسلة عامة لا = ""؛
عنوان السلسلة العامة = ""؛
الطالب العام (سلسلة _ لا، سلسلة _ عنوان) {
لا = _لا؛
العنوان = _address;
}
سلسلة عامة getAddress() {
عنوان المرسل؛
}
عنوان مجموعة الفراغ العام (عنوان السلسلة) {
this.address = عنوان;
}
سلسلة عامة getNo() {
العودة لا؛
}
مجموعة الفراغ العامة لا (سلسلة لا) {
this.no = no;
}
}
هذا الطالب عبارة عن Javabean كامل، أو Data Bean، وهي فئة شائعة تستخدم لتحميل البيانات، ثم نقوم بتعديل HelloVelocity.java إلى:
temp.add("1");
temp.add("2");
استبدل بـ:
temp.add(new Student("123", "Guangzhou"));
temp.add(new Student("456", "Zhuhai"));
ثم قم بتغيير محتويات hellavelocity.vm إلى:
#foreach ($s في $students)
<$velocityCount> العنوان: $s.address
#نهاية
إعادة ترجمة وتنفيذ أمر التشغيل، وكانت النتائج كما يلي:
<1> العنوان: قوانغتشو
<2> العنوان: تشوهاى
بهذه الطريقة، تتم طباعة بيانات الطالب الموجودة في القائمة، وبذلك تكون قد انتهيت! يتم استخدام متغير السرعة المدمج $velocityCount هنا، والذي يشير إلى رقم تسلسل التعداد الافتراضي. ويبدأ من 1. ويمكن أيضًا تغييره إلى 0، ولكن يجب تغييره في Velocity.properties حزمة velocity-1.4.jar ضمن الدليل org\Apache\velocity \runtime\defaults .
كيفية التعامل مع التكرارات الأكثر تعقيدا؟ دعونا نلقي نظرة على مثال القالب التالي لتوضيح الأمر:
#foreach (عنصر في قائمة $)
--التوصيل الداخلي --
#foreach (عنصر في قائمة $)
هذا هو العنصر $.
$velocityCount
#نهاية
--التوصيل الداخلي --
-- التوسيع الخارجي --
هذا هو العنصر $.
$velocityCount
-- التوسيع الخارجي --
#نهاية
كما ترون، تدعم Velocity تداخل العلامات، وهي وظيفة قوية للغاية، ولن أعرضها بالتفصيل هنا، إذا كنت مهتمًا، فجرّبها بنفسك.
في الواقع، إذا فكرت في المثال الذي قدمناه للتو بتعمق أكثر، يمكنك أن ترى بالفعل، ما هو استخدام السرعة؟ هذا هو نموذج Servlet + Velocity بالإضافة إلى ذلك، هل مازلت تتذكر نموذج تطوير Jsp المبكر الخاص بنا Jsp+JavaBean؟ هنا، قمنا بتغيير إلى Servlet+JavaBean+Velocity. فكر في الأمر، هل تم استبدال Jsp+JavaBean، وقمنا بإزالة كود Java من Jsp (vm) بشكل أكثر دقة، إذا كنت تستخدم Struts (Servlet+Jsp)، فستكون التكلفة أن كود Java يظهر دائمًا بشكل أو بآخر في JSP، حتى لو كان من الممكن القيام بذلك بدون كود Java، فإن المطورين الذين قاموا بإنشاء أنظمة معمارية معقدة يعرفون أن التكلفة باهظة جدًا أيضًا، ومن حيث قابلية الصيانة، هناك بعض الصعوبات في التطوير المتكامل. مع مصممي الويب، يمكننا أن نشعر هنا أن نموذج Servlet+JavaBean+Velocity يدرك بشكل أفضل مفهوم OOD. من حيث الكفاءة، لا داعي للقلق، فهذه المجموعة أكثر كفاءة من طريقة Servlet+Jsp.
يجب أن يكون هناك العديد من الأشخاص الذين هم على استعداد لتعلم السرعة، ولكن ربما لا يستطيع الكثيرون تطبيقها فعليًا على المشاريع (لا تزال بعض المشاريع تستخدمها، مثل Jute، مقارنةً بـ Jsp، فإن Jsp أكثر معيارًا ويستخدم على نطاق واسع). وقد تم استخدام العديد من أدوات التطوير لدعم تطوير Jsp. لكن وظيفة Velocity لا تقتصر على المنافسة مع Jsp. كما يتبين مما سبق، فهي قوية جدًا في إخراج التعليمات البرمجية تلقائيًا، كما ذكرنا سابقًا، تستخدم Turbine السرعة لإنشاء الكثير من التعليمات البرمجية، ويمكنك أيضًا إجراء تغييرات طفيفة إنها فكرة جيدة جدًا تحويلها إلى منشئ أكواد أو إنشاء قوالب أخرى.
حسنًا، دعونا نلقي نظرة على بعض المشكلات الشائعة التي يجب الانتباه إليها إذا كنت تريد التعمق في مشروع Velocity لتنفيذ المشاريع. الأول هو مسألة التدويل.
تدعم Velocity نفسها تحويل الترميز الدولي للقوالب. ألق نظرة على الأساليب التي توفرها Velocity:
القالب العام getTemplate (قالب Stirng، ترميز السلسلة)،
ومن المتوقع أن هذا النهج لا يمكن أن يحقق التدويل الكامل.
إن أبسط مفهوم للتدويل في Struts هو استخدام علامات اللغة الدولية على Jsp، وتستخدم كل لغة مكتبة علامات لغة مختلفة، وبالتالي يمكن القيام بذلك يدويًا. نعم، يتطلب الأمر القليل من المعالجة اليدوية.
لحسن الحظ، قام شخص ما بالفعل بحل المشكلة المذكورة أعلاه وإنشاء أدوات Velocity:MessageTool، التي توفر النص المتغير ليحتوي على تسميات دولية، وبهذه الطريقة، ما عليك سوى كتابة رمز التسمية، مثل: $text.get('title ') ، يمكن أيضًا العثور على محتوى أكثر تحديدًا على http://jakarta.apache.org/velocity/tools/struts/MessageTool.html .
حسنًا، كل هذا يعتمد على مقدمة Velocity، فلنتحدث عن الامتدادات الأخرى. علق بعض الأشخاص على أن Velocity ليس بنية MVC قياسية. نعم، لقد قلنا في البداية أن Velocity مجرد مزيج جيد بين النموذج والعرض، وهو مجرد محرك قالب جيد، ولم يتم الجمع بين MVC جيدًا بعد تم تشكيلها. لحسن الحظ، أطلقت Apache VelocityStruts بناءً على مزيج من Struts وVelocity، ويمكننا تقديم هذا الجزء من البيان في موضوع لاحق، وإليك مقدمة موجزة لمفهومها وأخيرًا، يتم نقل عملية الأعمال إلى طبقة العرض بناءً على السرعة، وبالتالي استبدال Jsp كطبقة العرض. لقد رأينا أيضًا أعلاه أن الأمثلة المذكورة تعتمد أساسًا على المبادئ والعروض التوضيحية، ولا تتكامل بشكل وثيق مع تطوير الويب، وسوف ندمج هذا الجانب عند وصف محتوى VelocityStruts.
مقدمة لاستخدام السرعة - الكود في Java
1. قم أولاً بتهيئة الكائن
VelocityContext context = new VelocityContext();
StringWriterwriter = new StringWriter();
ترميز السلسلة 2 = "GBK";
2. PROPERTY_PATH = TEMPLATE_INIT_PATH في ملف خصائص النظام (حدد مسار ملف الخاصية المطلوب للسرعة.)
3. المحتويات في الخصائص
file.resource.loader.path = D:/resin/webapps/mip/files/templateupload/ (حيث يوجد القالب)
4. ثم قم بتهيئة Velocity.init(PROPERTY_PATH);
5. قم بمطابقة التسميات بالسرعة مع java context.put(key, value);
6. ثم قم بتحميل الملف Velocity.mergeTemplate(templateName, encoding2, context,writer);
7. أخيرًا، قم باستدعاء Generator.writeToFile() لإنشاء الملف.
8. وظيفة writeToFile هي كما يلي:
FileOutputStream of = new FileOutputStream(theFile);
of.write(writer.toString().getBytes("GBK"));
// String tt =writer.toString();
of.flush();
of.Close();
تأتي هذه المقالة من مدونة CSDN، يرجى الإشارة إلى المصدر عند إعادة الطباعة: http://blog.csdn.net/sunrui_work/archive/2009/12/18/5029982.aspx.