Component-based, non-templating web framework