The Web Module
The Web module (Web.HTTPApp.TWebModule) is a descendant of System.Classes.TDataModule and may be used in the same way: to provide centralized control for business rules and non-visual components in the Web application.
Add any content producers that your application uses to generate response messages. These can be the built-in content producers such as a Web server that acts as a client in a multi-tiered database application.
In addition to storing non-visual components and business rules, the Web module also acts as a Web dispatcher, matching incoming HTTP request messages to action items that generate the responses to those requests.
You may have a data module already that is set up with many of the non-visual components and business rules that you want to use in your Web application. You can replace the Web module with your pre-existing data module. Simply delete the automatically generated Web module and replace it with your data module. Then, add a Web.HTTPApp.TWebDispatcher component to your data module, so that it can dispatch request messages to action items, the way a Web module can. If you want to change the way action items are chosen to respond to incoming HTTP request messages, derive a new dispatcher component from Web.HTTPApp.TCustomWebDispatcher, and add that to the data module instead.
Your project can contain only one dispatcher. This can either be the Web module that is automatically generated when you create the project, or the TWebDispatcher component that you add to a data module that replaces the Web module. If a second data module containing a dispatcher is created during execution, the Web server application generates a runtime error.
Note: The Web module that you set up at design time is actually a template. In ISAPI and NSAPI applications, each request message spawns a separate thread, and separate instances of the Web module and its contents are created dynamically for each thread.
Warning: The Web module in a DLL-based or SO-based (for Linux platform) Web server application is cached for later reuse to increase response time. The state of the dispatcher and its action list is not reinitialized between requests. Enabling or disabling action items during execution may cause unexpected results when that module is used for subsequent client requests.