Добавление на сервер обработки управляющей структуры while-endwhile
Следующий пример показывает использование цикла с условием окончания while-endwhile в соответствующем файле while_endwhile.srf. Чтобы сохранить количество выполнений цикла, был добавлен компонент данных типа int, называемый count (счетчик). Этой переменной в конструкторе класса обработчика присваивается начальное значение, равное 0, а затем при каждом обращении к ShouldThisBeDoneAgain ("должно ли это быть сделано снова") значение count увеличивается на единицу.
Итерация продолжается до тех пор, пока выражение count <= 10 не станет ложным. Обратите внимание, что в коде C++ на самом деле цикла с условием окончания while нет, а находится он в соответствующем .srf-файле. Кроме того, в классе обработчика имеется два метода замены дескрипторов GetNextNumber (Получить следующее число) и GetNextNumberSquared (Получить квадрат следующего числа). Эти методы соответствуют двум дескрипторам из .srf-файла, появляющимся в цикле с условием окончания while.
// Обработчик для проверки цикла с условием // окончания while – endwhile [request_handler("while_endwhile")] class C_while_endwhile_ATLServerAppHandler { protected: // защищенный int count; // счетчик C_while_endwhile_ATLServerAppHandler(): count(0) // счетчик { } [ tag_name(name="ShouldThisBeDoneAgain") ] HTTP_CODE ShouldThisBeDoneAgain(void) { count++; // счетчик++; if (count <= 10) // если (счетчик <= 10) return HTTP_SUCCESS; else return HTTP_S_FALSE; } [ tag_name(name="GetNextNumber") ] HTTP_CODE GetNextNumber(void) { m_HttpResponse << "The square of " << count << " is "; // Квадрат //счетчика return HTTP_SUCCESS; } [ tag_name(name="GetNextNumberSquared") ] HTTP_CODE GetNextNumberSquared(void) { m_HttpResponse << count*count; return HTTP_SUCCESS; } };
Соответствующий файл while_endwhile.srf отображает таблицу с числами и их квадратами. В примере видно, что дескрипторы могут быть вложены так, как требуется. Это приводит к тому, что дескрипторы GetNextNumber и GetNextNumberSquared заменяются несколько раз [Комментарии вида <! – комментарий – > вставлены для удобства – Прим ред.].
<html> <BODY> <! – ТЕЛО – > <Р>{{handler ATLServerApp.dll/while_endwhile}}</P> <! – обработчик – > <р> <TABLE> <! – таблица – > {{while ShouldThisBeDoneAgain}} <TR> <TD>{{GetNextNumber}}</TD> <TD>{{GetNextNumberSquared}}</TD> </TR> {{endwhile}} </TABLE> <! – таблица – > </P> </BODY> <! – тело – > </html>
Результат можно увидеть, перейдя по адресу http://localhost/ATLServerApp/while_endwhile.srf. Что получается при этом переходе, показано на рис. 12.12.
Рис. 12.12. Просмотр while_endwhile.srf