Далее я разместил код хэндлера Do, предполагается, что остальной код модуля не меняется. По сути, ему и не надо меняться, весь сервлет расположен в этом методе.
В сообщении m есть описание запроса .rq, и, в зависимости от запроса есть еще и данные .query.
Опишем простую форму, которая будет использовать метод POST для отправки данных на сервер.
Данные на сервер отправляются на адрес "/".
На сервере мы анализируем запрос, и если вдруг POST, то проверяем .query на NIL. Query содержит в себе список полей с идентификаторами, поэтому можно просто запросить по идентификатору значение этого поля val.
Далее мы значение поля отправляем обратно в виде строки. Вот и всё.
Код:
PROCEDURE (s: Servlet) Do (m: O3baseWebServlets.Msg);
VAR file: O3baseFiles.File; val: O3baseWebHttp.QVal;
PROCEDURE Generate (IN text: ARRAY OF CHAR);
VAR wr: O3baseFiles.Writer; i: INTEGER;
BEGIN
file := O3baseFiles.factory.Temp();
wr := file.WrNew();
i := 0;
WHILE i < LEN(text$) DO
wr.Char(text[i]);
INC(i)
END
END Generate;
BEGIN
Log.String(m.rq.uri$); Log.Tab; Log.String(m.rq.method$); Log.Ln;
IF (m.rq.uri$ = '/') THEN
IF m.rq.method$='GET' THEN
Generate('<html><body><form method="post" action="/"><input name="text"><input type="submit"></form></body></html>'); (* как будто загрузили с диска *)
ELSIF m.rq.method='POST' THEN
IF m.query#NIL THEN val:=m.query.Get('text') END;
IF val#NIL THEN
Generate('Hello, world!'+'</br>'+val.sp$);
END;
END;
END;
IF file # NIL THEN m.Respond(O3baseWebHttp.ResponseUtf8Html(file)) END;
END Do;