на начало
На главную страницу
Форум   

Статья :: Обработка форм


Обработка форм

В данном примере к ATLserverApp.h добавляется класс обработчика запросов, называемый C_process_post_AppHandler. В этом классе имеется метод ProcessPost, который получает доступ к переменной, переданной из формы с помощью объекта HTTP-запроса. Коллекцию CHttpRequestParams можно получить из метода CHttpRequest: :GetFormVars. Затем для получения из формы значения с определенным именем используется метод CHttpRequestParams :: Exchange В нашем примере таким именем значения является "txtName". Значение, содержащееся в szName, мы будем передавать назад клиенту — всего лишь для доказательства того, что этот метод работает.

// Обработчик (handler), который обрабатывает POST
[request_handler("process_post")]
class C_process_post_AppHandler
{
protected: // защищенный
[ tag_name(name="ProcessPost") ]
HTTP_CODE ProcessPost(void)
{
// использовать переменную формы
const CHttpRequestParams &request = // константа
m_HttpRequest.GetFormVars();
CValidateContext valCtx;
LPCSTR szName;
request.Exchange("txtName", SszName, fivalCtx); // запрос.
// Обмен
m_HttpResponse
<< "Welcome to ATL Server, " << szName << "<p>";
// «"Добро пожаловать в ATL Server,
" return HTTP_SUCCESS;
}
};

Вот файл process_post. srf, который предоставляет доступ к только что описанному методу ProcessPost:

{{handler ATLServerApp.dll/process_post}}
{{ProcessPost}}

На этот раз непосредственного доступа к process_post .srf через броузер не будет. Доступ теперь возможен через другой, HTML-файл, содержащий форму. Второй файл [При создании решения в среде Visual Studio html-файл автоматически копируется в виртуальный каталог размещения вместе с srf-файлами.] называется SimpleForm.html и содержит следующий HTML-код. Обратите внимание, что этот HTML-код регистрирует запрос, содержащий значение с именем "txtName".

<HTML>
<HEAD>
</HEAD>
<BODY> <!-- ТЕЛО -->
<form method="post" <!-- метод -->
action= <!-- действие -->
"http://localhost/ATLServerApp/process_post.srf">
Enter your name:
<!-- Введите ваше имя -->
<input name="txtName" type="text" size="30">
<!-- имя = "txtName" тип = "текстовый" размер = "30" -->
<input name="cmdEcho" type="submit" value="Echo">
<!-- входное имя = "cmdEcho" тип = "представить" значение =
// "Echo" -->
</form>
</BODY> <!-- тело -->
</HTML>

И опять же, будет полезно, используя отладчик, понаблюдать, что происходит внутри динамически подключаемой библиотеки (DLL) расширения интерфейса прикладного программирования Internet-сервера (ISAPI). Вы увидите, что функция HttpExtension-Proc из ATLServerAppIsapi . dll принимает параметр EXTENSION_CONTROL_BLOCK, который содержит данные, перечисленные в табл. 12.2. Содержимое этих элементов берется из формы, определяемой впоказанном выше файле SimpleForm.html.
В этом примере SimpleForm.html использует метод POST (ЗАПИСАТЬ), и данные переносятся в тело запроса. В классе обработчика доступ к этим данным выполняется с помощью массива FormVars (Переменные формы). Если файл SimpleForm.html был изменен для использования метода GET (ПОЛУЧИТЬ), тогда в строке запроса должны находиться данные [В элементе FORM (ФОРМА) атрибут метода может указывать один из двух методов отправки данных формы на Web-сервер, а именно GET (ПОЛУЧИТЬ) или POST (ЗАПИСАТЬ). Первый из них в конце универсального идентификатора ресурса (URI), указанного атрибутом действия элемента FORM (ФОРМА), вставляет знак вопроса, а затем — данные формы. Метод POST (ЗАПИСАТЬ) помещает эти данные в тело HTTP-запроса ]. Впрочем, массив FormVars также можно использовать для доступа к данным формы. В табл. 12.3 показаны значения параметра EXTENSION_ CONTROL_BLOCK в том случае, если бы элемент FORM (ФОРМА) был изменен для использования метода GET (ПОЛУЧИТЬ).
На рис. 12.18. показан файл SimpleForm.html с заполненной формой. Когда вы щелкнете на кнопке Echo (Эхо), то с помощью переменной формы осуществляется доступ к process_post. srf. Эта переменная содержит значение Bob (Боб). Результат показан на рис. 12.19.
Таблица 12.2. Структура EXTENSION_CONTROL BLOCK с указанием метода POST (ЗАПИСАТЬ)

Элемент структуры Значение
IpszMethod "POST" ("ЗАПИСАТЬ")
IpszQuerystring till
IpszPathlnfo "ATLServerApp/process_post.srf"
pbData "txtName=Bob&cmdEcho=Echo"

Таблица 12.3. Структура EXTENSION_CONTROL_BLOCK с указанием метода GЕТ (ПОЛУЧИТЬ)

Элемент структуры Значение
IpszMethod "GET" ("ПОЛУЧИТЬ")
IpszQuerystring "txtName=Bob&cmdEcho=Echo"
IpszPathlnfo "ATLServerApp/process_post.srf"
pbData 0

 

18.gif

Рис. 12.18. Просмотр формы, которая находится в SimpleForm.htm

19.gif

Рис. 12.19. Результат представления формы, которая находится в SimpleForm htm


Обработка форм

страницы в данном разделе 
Глава 12. Web-узлы и Web-службы, работающие на основе ATL Server Web-узлы и Web-службы, работающие на основе ATL Server
История технологий, работающих с динамическим содержимым Web Приложения на основе ATL Server
ATL Server основан на интерфейсе прикладного программирования Internet-сервера (ISAPI) Архитектура приложения, использующего ATL server
Создание проекта ATL Server Project (Проект на основе ATL Server) Динамически подключаемая библиотека (DLL) расширения интерфейса прикладного программирования Internet-сервера (ISAPI)
Динамически подключаемая библиотека (DLL) Web-приложения Создание и запуск проекта на основе ATL Server
Добавление в сервер еще одного обработчика Добавление на сервер обработки управляющей структуры if-else-endif
Добавление на сервер обработки управляющей структуры while-endwhile Передача параметров серверному обработчику
Поддержка состояния сеанса Получение доступа к переменным сервера
Обработка форм Службы сеанса
Создание проекта Web-службы на основе ATL Server (ATL Server Web Service Project) Код Web-службы на основе ATL Server: ATLServerWebService.h
Создание клиентской программы, обращающейся к Web-службе Добавление функций в Web-службу на основе ATL Server
Изменение клиентской программы, работающей с Web-службой Передача структур в качестве входных и выходных параметров
Резюме >  


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста