На этом шаге мы рассмотрим реализацию ответа серверного приложения.
Теперь перейдем ко второй части нашей задачи - получению данных от клиента и их публикации на сервере. Публиковать, на самом деле ничего не будем, просто прочитаем данные и вернем полученную информацию клиенту, чтобы быть уверенными - мы все прочитали правильно. Чтобы выполнить эту задачу нам надо создать заготовку приложения Web-сервера, что мы уже делали и как это делать - вы знаете. Тип приложения можете выбрать сами; по умолчанию везде далее предполагается тип CGI Stand-alone Executable. После того, как создано новое приложение, создаем в нем объект-действие с именем заданным по умолчанию, заходим в его обработчик события OnAction и добавляем в него следующие строки:
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin Response.Content := ' <html><head><title> ' + 'Подтверждение получения данных</title></head><body> '; Response.Content := Response.Content + '<h1>Подтверждение получения данных. </h1>'; Response.Content := Response.Content + '<p>Ваше сообщение добавлено в конференцию.'; Response.Content := Response.Content + '<p>ваше имя: '+ Request.ContentFields.Values['name']; Response.Content : = Response.Content + '<p>тема сообщения: '+ Request.ContentFields.Values['subject']; Response.Content := Response.Content + '<p>ваш e-mail: '+ Request.ContentFields.Values['email']; Response.Content := Response.Content + '<p>текст сообщения:<p> '+ Request.ContentFields.Values['body']; Response.Content := Response.Content + '</body></html>'; end;
После просмотра текста процедуры, видно как можно получать данные, отправленные клиентом и как-то их использовать дальше. Процедура-обработчик события OnAction получает через свои параметры два объекта Response и Request. Подробно мы поговорим о них позже, сейчас только скажем что в первый из них серверное приложение помещает ответ клиенту, а из свойств второго объекта, которые доступны только для чтения, приложение может достать данные, пришедшие от клиента. Если форма использует метод Post, то данные, как и в нашем случае, помещаются в свойство ContentFields. Если в запросе применяется метод Get, то данные запроса будут находится в свойстве QueryFields. В любом случае эти свойства - объекты класса TStrings и для работы с ними вам нужно использовать их свойства Strings или Values. Второй вариант удобнее, поскольку обратившись к очередному параметру запроса по имени, вы получаете значение этого параметра, тогда как из свойства Strings вы будете извлекать строки вида "имя_параметра=значение_параметра". В нашем случае, для параметра subject мы могли бы получить строку вида "subject=тема_сообщения". Примеры с заполненной формой и ответом, полученным клиентом от нашего серверного приложения, приведены на рисунках 1 и 2.
Рис.1. Внешний вид формы
Рис.2. Подтверждение серверного приложения
На следующем шаге мы продолжим создавать серверные приложения.