На этом шаге мы рассмотрим методы обработки запросов и свойства объектов-действий.
Речь идет о свойстве MethodType. Метод обработки по своему названию подразумевает, что можно предусмотреть разные варианты обработки запроса для различных методов. Под методами здесь понимаются методы протокола HTTP. Возможные значения свойства MethodType следующие:
У объектов-действий есть логическое свойство Enabled, которое позволяет исключить объект из списка действий, и тогда диспетчер не будет его рассматривать при анализе запросов. Когда это действие понадобится, его можно включить вновь. Выполнить эту операцию можно из обработчика события BeforeDispatch.
Последнее важное свойство, о котором нужно сказать, это свойство Default. Если у какого-либо объекта-действия это свойство выставляется в True, то этот объект объявляется действием по умолчанию. Это значит то, что когда в процессе обработки запроса Web-диспетчер дойдет до конца списка действий, а обработка запроса не закончится, то диспетчер передаст запрос на обработку действию по умолчанию. При этом, диспетчер не проверяет свойства PathInfo и MethodType этого объекта. Он не обращает внимания даже на свойство Enabled. Поэтому если необходимо, чтобы метод по умолчанию срабатывал только самым последним, необходимо установить его свойство Enabled в False. Обычно, действие по умолчанию обрабатывает, в том числе, и ошибки запроса. Если обработчик по умолчанию не приготовит для клиента сообщение об ошибке, т.е. если не заготовлен такой объект-действие по умолчанию, то в ответ на свой запрос клиент вообще не получит никакого ответа.
После того, как диспетчер находит для запроса объект-действие, он вызывает его. Далее, если у действия в свойстве Producer указан соответствующий компонент, то обработку выполняет этот компонент. Речь идет о компонентах страницы Internet. Компонент вызывает свой метод Content, который заполняет свойство Content объекта TWebResponce, другими словами, компонент формирует ответ клиенту. После того, как связанный с действием компонент выполнил свою работу, или если в свойстве Producer пусто, вызывается событие OnAction. Обработчику события передаются оба объекта TWebRequest и TWebResponce, и он завершает обработку запроса и формирование ответа. Возникает вопрос, какой способ обработки выбрать.
Если всю работу может выполнить компонент, то достаточно связать его с действием и оставить обработчик события OnAction пустым. С другой стороны, обработчик предоставляет больше возможностей и можно вызвать из него тот же компонент, или несколько компонентов и дополнить или отредактировать различные свойства Web-ответа.
Когда ответ готов, его можно послать клиенту из обработчика события OnAction, используя методы объекта TWebResponse, но можно этого и не делать, в этом случае Web-приложение отошлет ответ после того, как последний объект-действие закончит работу и сообщит об окончании формирования ответа.
Ответ считается сформированным, когда обработчик события OnAction вернет значение True через свой параметр Handled. Если эта процедура заканчивает свою работу и передает через Handled значение False, то обработка запроса продолжается: диспетчер пытается найти следующий подходящий объект-действие и так до тех пор, пока очередной обработчик события OnAction не установит Handled в True.
В связи с этим, в обработчике действия по умолчанию нельзя присваивать этому параметру значение False, так как в этом случае клиент не получит ответа на свой запрос.
Кроме того, либо в обработчиках OnAction, либо в действии по умолчанию, либо в обработчике события AfterDispatch нужно предусмотреть обработку ошибок, и если ответ не сформирован, то выставить соответствующий код ошибки.
На следующем шаге мы рассмотрим подробнее объект TWebRequest.