Многие люди видели или узнали о Velocity. Буквальный перевод названия: скорость, скорость, быстрота. Он используется в веб-разработке, но немногие из них в основном знают и используют Struts. и что связано со Struts, что ты думаешь о Velocity? Давайте попробуем разобраться в концепции Velocity. Во введении здесь мы подчеркиваем вопросы выбора технологии, чтобы каждый мог учитывать Velocity при выборе разработки проекта, а также позволить всем понять ее идеи. Очень хороший образ мышления, дающий каждому возможность изменить свое мнение и другой образ мышления.
Эта статья основана на том факте, что у вас есть определенный опыт разработки на Java и вы знаете MVC, Struts и другие модели разработки.
Velocity — это технология механизма шаблонов Java. Проект был предложен Apache и основан на другой технологии механизма — Webmacro. Так как же официальное определение скорости? Apache определяет его как: механизм шаблонов, основанный на Java, но позволяющий любому использовать простой и мощный язык шаблонов для ссылки на объекты, определенные в коде Java. Последняя версия — 1.4. Дополнительную информацию можно найти по адресу http://jakarta.apache.org/velocity/index.html .
Фактически, если говорить прямо, Velocity — это реализация архитектуры MVC, но она больше ориентирована на связь между Моделью и Представлением как мостом между ними. Я полагаю, что все знакомы со Struts, самой популярной архитектурой MVC. Многие разработчики широко используют архитектуру Struts, включая версии платформы управления IBM Websphere 5 или более поздние версии, которые являются хорошей практикой MVC и эффективно сокращают количество Java. код появляется в View (Jsp), но связь между Model и View по-прежнему опирается на технологию Taglib Struts. Представьте себе, что интерфейсный веб-дизайнер не знаком со Struts или даже с Taglib (я считаю, что быть знакомым довольно сложно. с ним, в том числе. То же самое касается и последующего обслуживающего персонала), что очень затруднит взаимодействие веб-дизайнеров и фронтенд-разработчиков. В реальной разработке до сих пор существует такой факт, что работа между веб-дизайнерами. и фронтенд-разработчикам может быть сложнее. Существует еще определенная степень связи. Как решить эту проблему в наибольшей степени? Давайте взглянем на Velocity или эту концепцию.
Давайте начнем с простейшего примера разработки Velocity, чтобы показать вам, как работает Velocity:
1. Создайте файл, имя файла: hellavelocity.vm, который является шаблоном скорости (фактически такой же, как html), содержимое:
Добро пожаловать, $name, на Javayou.com!
сегодня $date.
2. Создайте Java-файл HelloVelocity.java с содержимым:
пакет com.javayou.velocity;
импортировать java.io.StringWriter;
импортировать java.util.*;
импортировать org.apache.velocity.app.VelocityEngine;
импортировать org.apache.velocity.Template;
импортировать org.apache.velocity.VelocityContext;
/**
* @author Liang.xf 14 декабря 2004 г.
*/
общественный класс HelloVelocity {
public static void main(String[] args) выдает исключение {
//Инициализируем и получаем движок Velocity
VelocityEngine ve = новый VelocityEngine();
ве.инит();
//Получаем шаблон скорости
Шаблон t = ve.getTemplate("hellovelocity.vm");
//Получаем контекст скорости
Контекст VelocityContext = новый VelocityContext();
//Заполняем данные контекстом
context.put("имя", "Лян");
context.put("дата", (новая дата()).toString());
//Для последующего отображения заранее введите значение списка
Список temp = новый ArrayList();
temp.add("1");
temp.add("2");
context.put("список", темп);
//выходной поток
Автор StringWriter = новый StringWriter();
//конвертируем вывод
t.merge(контекст, писатель);
System.out.println(writer.toString());
}
}
3. Загрузите zip-архив Velocity 1.4 по адресу http://jakarta.apache.org/site/binindex.cgi , разархивируйте его, чтобы получить Velocity-1.4.jar, и используйте его для компиляции вышеуказанного класса HelloVelocity.java.
4. Копируем hellavelocity.vm на 1 в текущую директорию запуска. Для запуска HelloVelocity также требуются другие пакеты, которые можно получить из скачанного файла 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. Текущая структура выглядит следующим образом:
Добро пожаловать, Лян, на Javayou.com!
сегодня вторник, 14 декабря, 19:26:37 по центральному поясному времени 2004 года.
Выше приведен простейший результат выполнения. Как насчет этого? Дайте мне примерное представление. Две определенные переменные $name и $date в шаблоне hellavelocity.vm — это соответственно context.put("name", "Liang") и context.put. ( "date", (new Date()).toString()) заменяется набором значений.
С этой точки зрения обработка бизнес-процессов, включая бизнес-результаты, в основном решается на уровне модели, тогда как уровень представления в основном отображается только с использованием простого VTL (языка шаблонов Velocity). Таким образом, не будет ли Jsp ненужным? Да, эта модель использования немного похожа на более ранний метод CGI :) Velocity автоматически выводит код, и Velocity также очень эффективен в этом отношении, поскольку Velocity используется в Turbine для генерации большого количества кода.
В Velocity определения переменных начинаются с «$», а $ служит идентификатором Velocity. Буквы, цифры, штрихи и подчеркивания можно использовать в качестве определенных переменных в Velocity.
Кроме того, нам также необходимо обратить внимание на определения характеристических переменных Velocity, таких как: $student.No, $student.Address, которые имеют два уровня значения: первый — если студент является хеш-таблицей, ключ No и будет быть извлечено из хеш-таблицы. Значение адреса, а второй тип заключается в том, что это может быть вызывающий метод, то есть две вышеуказанные переменные будут преобразованы в Student.getNo() и Student.getAddress(). Velocity имеет объект для значения, возвращаемого Java-кодом в сервлете, а также может вызывать методы объекта, такие как $student.getAddress() и т. д. Я не буду здесь приводить примеры и вдаваться в подробности.
Приведенный выше пример — это всего лишь простой пример. Конечно, многих людей такие примеры больше не удовлетворяют. В реальных приложениях нам часто приходится выполнять выборочное отображение и перечислять некоторые итеративные данные, такие как списки списков и, конечно, Скорость ( в частности, это должен быть язык шаблонов VTL) также поддерживает эту функцию. Кроме того, он также поддерживает некоторые другие часто используемые отображения, такие как переменные внутри шаблона (например, переменные в Jsp), а также более мощные, такие как создание макросов для автоматизации. .Продолжим.
Мы по-прежнему используем приведенный выше пример и меняем содержимое шаблона hellavelocity.vm на:
#set($iAmVariable = "хорошо!")
Добро пожаловать, $name, на Javayou.com!
сегодня $date.
$iAmVariable
Повторно выполните приведенную выше команду запуска, результат:
Добро пожаловать, Лян, на Javayou.com!
сегодня вторник, 14 декабря, 22:44:39 по центральному стандартному времени 2004 года.
хороший!
Вы можете видеть, что переменные в шаблоне определяются как операторы, начинающиеся с #set, что несложно понять. После выполнения переменные $iAmVariable в шаблоне преобразуются в определенные значения:
хороший!
Давайте еще раз рассмотрим простой вариант. Измените содержимое шаблона hellavelocity.vm на:
#set ($admin = "админ")
#set ($user = "пользователь")
#if ($admin == $user)
Добро пожаловать, админ!
#еще
Добро пожаловать, пользователь!
#конец
Выполняем команду запуска, результат:
Добро пожаловать, пользователь!
Вы можете видеть, что операторы суждения простые #if (), #else, #end, не очень сложные.
Продолжим рассматривать данные итерации и изменим содержимое шаблона hellavelocity.vm на:
#foreach($product в $list)
$продукт
#конец
Выполняем команду запуска, результат:
№1
#2
Не удобно ли в примере перечислить заранее сохраненные значения в VelocityContext List? Просто используйте #foreach ($variable в xx). Если приведенный выше список заменен хеш-таблицей, вы можете использовать следующий синтаксис:
#foreach($key в $hashVariable.keySet() )
Значение $key: $ hashVariable.get($key)
#конец
Я не думаю, что эти сценарии вообще сложны.
Многие также спросят, а что, если это javabean? Хорошо, давайте добавим боб:
пакет com.javayou.velocity;
/**
* @author Liang.xf 14 декабря 2004 г.
*/
Студент публичного класса {
//Обратите внимание, что атрибуты класса являются общедоступными
общедоступная строка нет = "";
общедоступный строковый адрес = "";
общественный студент (String _no, String _address) {
нет = _нет;
адрес = _адрес;
}
публичная строка getAddress() {
обратный адрес;
}
public void setAddress (строковый адрес) {
этот.адрес = адрес;
}
публичная строка getNo() {
вернуть нет;
}
public void setNo(String no) {
это.но = нет;
}
}
Этот Student представляет собой полноценный JavaBean или компонент данных, общий класс, используемый для загрузки данных. Затем мы модифицируем HelloVelocity.java, чтобы:
temp.add("1");
temp.add("2");
Заменить на:
temp.add(new Student("123", "Гуанчжоу");
temp.add(new Student("456", "Чжухай");
Затем измените содержимое 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 --
#foreach (элемент $в списке $)
Это элемент $.
$velocityCount
#конец
-- внутренний foreach --
-- внешний foreach --
Это элемент $.
$velocityCount
-- внешний foreach --
#конец
Как видите, 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.
Должно быть много людей, желающих узнать о Velocity, но, возможно, немногие смогут реально применить его в проектах (некоторые проекты все еще используют его, например Jute, ведь по сравнению с Jsp Jsp более стандартен и широко используется). и многие инструменты разработки были использованы. Поддержка разработки Jsp. Но функция Velocity не ограничивается конкуренцией с Jsp. Как видно из вышеизложенного, она очень эффективна в автоматическом выводе кода. Как упоминалось ранее, Turbine использует Velocity для генерации большого количества кода. Вы также можете вносить небольшие изменения. Очень хорошая идея превратить это в генератор кода или другой шаблон.
Хорошо, давайте рассмотрим некоторые распространенные проблемы, на которые необходимо обратить внимание, если вы хотите углубиться в Velocity для реализации проектов. Первый — это вопрос интернационализации.
Сама Velocity поддерживает преобразование шаблонов в международную кодировку. Взгляните на методы, предоставляемые Velocity:
Публичный шаблон getTemplate (шаблон Stirng, кодировка строк),
Предполагается, что этот подход не может обеспечить полную интернационализацию.
Самая простая концепция интернационализации в Struts — использование международных языковых тегов в Jsp, и каждый язык использует свою библиотеку языковых тегов. В более широком смысле это можно сделать вручную. Да, это требует лишь небольшой ручной обработки.
К счастью, кто-то уже решил упомянутую выше проблему и создал инструменты Velocity: MessageTool, который предоставляет переменную text для хранения интернационализированных меток. Таким образом, вам нужно просто написать код метки, например: $text.get('title). ' ), более конкретный контент также можно найти по адресу http://jakarta.apache.org/velocity/tools/struts/MessageTool.html .
Ладно, на этом всё основано на введении Velocity, давайте поговорим о других расширениях. Некоторые люди отметили, что Velocity не является стандартной структурой MVC. Да, в начале мы говорили, что Velocity — это просто хорошая комбинация модели и представления и просто хороший механизм шаблонов. В конце концов, хорошей комбинации MVC еще не существует. был сформирован. К счастью, Apache запустил VelocityStruts, основанный на сочетании Struts и Velocity. Мы можем представить эту часть утверждения в следующем разделе. Вот краткое введение в его концепцию. Он основан на структуре Struts и действии бизнес-логики. обработка Наконец, бизнес-процесс переносится на уровень отображения на основе скорости, тем самым заменяя Jsp в качестве уровня просмотра. Выше мы также видели, что приведенные примеры в основном основаны на принципах и демонстрациях и не тесно связаны с веб-разработкой. Мы объединим этот аспект при описании содержимого VelocityStruts.
Введение в использование Velocity — код на Java
1. Сначала инициализируйте объект
Контекст VelocityContext = новый VelocityContext();
Автор StringWriter = новый StringWriter();
Кодировка строки2 = "ГБК";
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,coding2, context,writer);
7. Наконец, вызовите Generator.writeToFile(), чтобы сгенерировать файл.
8. Функция writeToFile выглядит следующим образом:
FileOutputStream = новый FileOutputStream(theFile);
of.write(writer.toString().getBytes("GBK"));
// Строка tt =writer.toString();
из.flush();
из.закрыть();
Эта статья взята из блога CSDN. При перепечатке указывайте источник: http://blog.csdn.net/sunrui_work/archive/2009/12/18/5029982.aspx.