Java Web и формирование Web страницы на базе шаблона
Мысль по написанию данного поста возникла при попытке сформировать Web страницу в среде Java EE на базе html шаблона не используя различного рода вставки в шаблон на скриптлетах типа <%= ... %>. Подобного рода вставки в шаблоне, которые очень схожи по сути своей работы с технологией PHP, на мой взгляд, путают весь процесс создания сайта на базе шаблона, и не дают возможность использовать, для уже готового скрипта Web ресурса, любой другой не привязанный к скрипту html шаблон.
Для примера, в скрипте CMS Acvarif-CMS использовался несколько иной вариант работы скрипта CMS с шаблоном. Суть его состоит в том, что любой шаблон можно загрузить в переменную-строку, проще говоря в буфер. Далее строка шаблона в буфере преобразовывается до нужного вида представляющего собой уже готовую страницу сайта с полным набором всего необходимого для данной конкретной страницы.
Далее преобразованная строка просто передается в браузер. Только вот метод преобразования строки шаблона до нужного вида не использует различного рода вставки-скриптлеты. В шаблоне во всех необходимых местах находятся строки-ключи, которые PHP скриптом заменяются на строки значения. Это могут быть рамки меню, рекламы, картинок, ссылок, строки с Javascript и вообще все, что угодно.
Такой вариант построения страниц сайта дает возможность использовать любой шаблон. Легко можно использовать шаблон привязанный к какому-либо скрипту или CMS, изъяв из него скриптлеты и расставив ключи в нужных местах.
Теперь по сути: Технология PHP позволяет выполнять замену в строке с помощью всего нескольких элементарных функций. Пример замены ключей на значения в html шаблоне выглядит так:
if(is_file("$template"))
// чтение файла в виде строки в переменную $html
$html = file_get_contents("$template");
else
$html = "Отсутствует файл шаблона $template";
foreach ($params as $key=>$value)
// Перемещение содержимого переменных на выделенные %% места в шаблоне
$html = str_replace('%'.$key.'%', $value, $html);
// Вывод подготовленного шаблона в браузер
echo($html);
Теперь возвращаясь к Java for Web. В Java тоже можно сделать со строкой шаблона примерно то же самое, что и в PHP. А именно, загрузить шаблон в буфер в виде строки, выполнить в нем все необходимые замены строковых ключей на соответствующие им значения. В коде выглядит это так:
public class JavaTest {
// метод получения строки из файла
public static String read(String fileName) throws FileNotFoundException {
//Этот спец. объект для построения строки
StringBuffer sb = new StringBuffer();
//Определяем файл
File file = new File(fileName);
// проверка на существование файла
exists(fileName);
try {
//Объект для чтения файла в буфер
BufferedReader in = new BufferedReader(new FileReader( file.getAbsoluteFile()));
try {
//В цикле построчно считываем файл
String s;
while ((s = in.readLine()) != null) {
sb.append(s);
sb.append("n");
}
} finally {
//Также не забываем закрыть файл
in.close();
}
} catch(IOException e) {
throw new RuntimeException(e);
}
//Возвращаем полученный текст с файла
return sb.toString();
}
// проверка существования файла
private static void exists(String fileName) throws FileNotFoundException {
File file = new File(fileName);
if (!file.exists()){
throw new FileNotFoundException(file.getName());
}
}
public static void main(String[] args) {
// путь файлу html страницы
String fileName = "Здесь путь к файлу шаблона(напр. C:/template.html)";
// инициализация строки для преобразования
String html = null;
try {
html = JavaTest.read(fileName);
} catch (FileNotFoundException ex) {
Logger.getLogger(JavaTest.class.getName()).log(Level.SEVERE, null, ex);
}
// строки страницы
String $tit = "Титул";
String $bod = "Тело страницы";
// матрица ключей и переменных соответствующих ключам
Map item = new HashMap<>();
// добавляем в массив элементы с ключами key (напр."$tit") и значениями value (напр.$tit).
// Если элемент с таким ключом уже существует в массиве, то его значение просто изменяется.
item.put("$tit", $tit);
item.put("$bod", $bod);
// тест
String title = (String)item.get("$tit");
String hint = (String)item.get("$bod");
System.out.println(title);
System.out.println(hint);
// итератор по ключам ассоциированной матрицы item
Iterator keySetIterator = item.keySet().iterator();
// проход по ключам и замещение в строке html строк с ключами
// на строки соответствующие ключам
while(keySetIterator.hasNext()){
String key = keySetIterator.next();
String value = (String) item.get(key);
// вывод ключей и их значений на консоль
System.out.println("key: " + key + " value: " + value);
html = html.replace(key, value);
}
// вывод на консоль html страницы с замещениями строк
System.out.println(html);
}
}
Умудренные опытом работы с Java Web вполне могут послать в сторону фреймворков типа Spring и др., но это уже совсем другая тема. А простейший Java шаблонизатор может быть хорошим началом для изучения Java Web. Ну вот, собственно, и все, что хотелось-бы сообщить по поводу Java формирования Web страницы на базе шаблона. Дерзайте... и не забывайте оставлять свои комменты, предложения и замечания в тему данного поста.
Электроника :
- Техника электроника (11)
- Полезная электроника (4)
- Электроника для всех (5)
- Техника для дома (6)
- Cхемотехника ПЛИС (11)
- Пректирование PCAD (4)
Программирование :
- Микроконтроллеры (9)
- ПЛИС VHDL Verilog (29)
- C++ Builder (7)
- Visual Studio C++ C# (7)
- Java programming (7)
- Matlab programming (4)
Сайтостроение :
- Сайтостроение HTML (5)
- Сайтостроение PHP (8)
- PHP CMS на файлах (3)
- Web инструменты (9)
- Полезное вебмастеру (11)
- SEO раскрутка сайта (4)
- PHP скрипты (3)
Реклама :
Книги и учебники :
- Шаблоны сайтов (6)
- Книги и учебники (2)
Компьютер и интернет :
Поиск по сайту :
Реклама :
Облако меток :
Бесплатная подписка :
Статистика :
- Популярность (3)
- Посещаемость (3)
- Поисковые запросы (3)