С чего начать
Начнем мы, как всегда, с запуска нашего Delphi. После появления формы перебросим из палитры компонентов TIdHTTPServer (который, по большому счету, и будет выполнять за нас всю грязную работу по соединению с клиентом и общению с ним). Нам же останется лишь переадресовывать запросы клиента на соответствующие файлы. Кроме того, я порекомендовал бы также перетащить на форму еще и TButton. И в его реакции на нажатие написать код запуска нашего сервера:
procedure TForm1.Button1Click (Sender: TObject); begin Self.IdHTTPServer1.Active:=True; end; , а в событие Form1.OnDestroy (): procedure TForm1.FormDestroy (Sender: TObject); begin Self.IdHTTPServer1.Active:=False; end;Теперь поподробнее рассмотрим событие idHTTPServer.OnCommandGet, которое имеет тип:
TIdHTTPGetEvent = procedure (AThread: TIdPeerThread; RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo) of object;Где:
- AThread - поток, который содержит информацию о подключении;
- параметр RequestInfo содержит информацию о запрашиваемых данных;
- ResponseInfo используется для передачи результата выполнения запроса.
Для проверки работоспособности нашего сервера создадим файл (Response.txt) примерно следующего содержания:
<html><head> <title>Testing</title> </head> <body> <h1>This is the test</h1> </body> </html>
А в обработчике события idHTTPServer1.OnCommandGet напишем такой код:
ResponseInfo.ContentStream:=TFileStream.Create ('D:\Response.txt',fmOpenRead);После запуска сервера открываем наш уже настроенный браузер и набираем любой адрес. В результате мы должны получить то, что было написано в файле Response.txt. Но это нам мало что дает - какой бы адрес мы ни использовали, результат будет одним и тем же. Для получения чего-то более похожего на веб-сервер нужна небольшая доработка:
if RequestInfo.Host='www.test.com' then begin ResponseInfo.ContentStream:=TFileStream.Create ( 'D:\Projects\HTMLProjects\MySite\' +RequestInfo.Document,fmOpenRead); end;Что мы здесь делаем:
- во-первых, проверяем, какой хост запрашивает клиент;
- если это www.test.com, то переадресовываем запрос на соответствующий файл, содержащийся в каталоге с полной копией нашего сайта (D:\Projects\HTMLProjects\MySite);
- посылаем результат клиенту.
Теперь, если в поле браузера ввести строку www.test.com/index.html, мы увидим начальную страницу (если она называется index.html) нашего сайта - со всеми ссылками, рисунками, скриптами и аплетами.