The System.Web.UI.Page class includes a collection of server-side controls. Everything that ever makes its way out to the client browser was somehow generated by a server-side control. Even literal text on the page was rendered using a LiteralControl. When the ASP.NET runtime compiles a page, it scans the ASPX file for any tag that says runat=server and adds a member variable representing that control to the page's control tree. Nothing escapes being packaged as a control—when ASP.NET finds literal text on the page, ASP.NET packages that as a literal control. When it comes time for the page to render, ASP.NET walks the control list and asks each control in the list to render itself.
Visual Studio 2005 includes a useful designer that lets you drag and drop controls onto a page. This development environment lets you feel as though you're developing normal applications for a single machine, even though the UI is represented as HTML over HTTP.
We'll take a look at writing a custom control in the next chapter.