In short it decouples software components from protocol-specific API.
For example, Web MVC framework such as Spring MVC, it creates domain object from ServletRequest, so we can have software components that work with domain object, that improves reuseability (can be used outside a web container) and testability (can be tested without a web container).
SCJA 1.0, SCJP 1.4, SCWCD 1.4, SCBCD 1.3, SCJP 5.0, SCEA 5, SCBCD 5; OCUP - Fundamental, Intermediate and Advanced; IBM Certified Solution Designer - OOAD, vUML 2; SpringSource Certified Spring Professional
Context Object wraps protocol specific information, such as HTTP and hides that from its clients. So it decouples the clients from the protocol-specific functionality. A typical usage is: - a FrontController creates a RequestContext object which wraps the HttpServletRequest - the FrontController passes the RequestContext object to the ApplicationController - now the ApplicationController is totally unaware of HTTP, so it works at a higher level of abstraction, e.g.: requestContext.getSomeParameter() - the ApplicationController might pass the RequestContext object further, to a Command object (implementing the Service to Worker pattern) - etc.