Java Web и формирование Web страницы на базе шаблона

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 страницы на базе шаблона. Дерзайте... и не забывайте оставлять свои комменты, предложения и замечания в тему данного поста.  


Способ итерации по ассоциативному массиву через for
Способ итерации по ассоциативному массиву через for
HashMap<String, String> selects = new HashMap<String, String>();
selects.put("$tit", $tit);
selects.put("$bod", $bod);

for(Map.Entry<String, String> entry : selects.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println("key: " + key + " value: " + value);
html = html.replace(key, value);
}

2017 05 13 10:51:00  Добавил:   Admin


   Всего комментариев: 1

* Заполните все поля
* Тема

* Ваше имя

* Ваш email: (нигде не публикуется)

*Новость (реплика)

Введите код подтверждения с картинки (проверка от автороботов):

 

email при указании не будет опубликован. Адреса с http:// преобразуются в ссылки автоматически. Теги запрещены.
Перейти и растаять в своей любимой социалке