This section describes the structure of the software layers in the server architecture of the ICF (Internet Communication Framework).. In the server function, the ICF creates a response to request with the help of the corresponding application.
In the scenario described here, a client (such as a Web browser) sends an HTTP request to the server. The ICF forwards the request to an application. The application then gathers the requested data and sends it back to the client through the ICF as a response. The response data can then be displayed and/or further processed in the browser.
The arrows in the graphic represent the control flow and data flow.
The request is sent to the Internet Communication Manager (ICM) (1). The ICM decides whether the resource identified by the URL (the desired application) is realized in the ABAP stack or Java stack of the SAP NetWeaver Application Server.
If the application is an ABAP application, the request is forwarded to the task handler (2).
The task handler then starts the ICF controller, which is realized by the function module HTTP_DISPATCH_REQUEST (3).
The ICF controller sends the request to the ICF manager, which is implemented by the ABAP class CL_HTTP_SERVER (4). Here, a server control block is created. Gradually, this block stores all data for the request, including the response.
Once the server control block has been created, the request data is requested by the ICM (5+6+7).
The ICM then sends the request data to the ICF manager (8+9+10), where it is stored in the Request attribute of the server control block.
The special HTTP request handler that then handles the request is determined by the URL in the ICF controller (11). The URL is split into its path components.
In the URL http:// < hostname > : < port > /bc/ping, the path component < hostname >:< port > is the virtual host, and the path component /bc/ping is the server path or name.
The assignment of a virtual host and service to an HTTP request handler is maintained in transaction SICF. All path components are processed from left to right to identify the correct ICF services. Multiple HTTP request handlers can be assigned to one service. The attribute IF_HTTP_EXTENSION~FLOW_RC controls the order in which the individual HTTP request handlers are called.
Once the HTTP request handlers have been determined, the client is authenticated (12).
There are a number of logon procedures. If the logon fails, the system attempts to log on again before terminating communication.
After successful authentication, the request is processed by one or more HTTP request handlers. To do this, the ICF controller (the function module HTTP_DISPATCH_REQUEST) passes control to the HTTP request handler (13). Each of these handlers implements the interface IF_HTTP_EXTENSION. The special properties of a specific HTTP request handler are defined in the implementation of the method HANDLE_REQUEST().
The HTTP request handler first gets the content of the request object from the server control block (attribute rRequest). This block is managed by the ICF manager (14). To do this, the handler uses the method HANDLE_REQUEST().
The request handler can interact flexibly with applications (15); for example, an existing ABAP program can be called or the database accessed.
During processing, the HTTP request handler can fill the response object with data by setting the Response attribute with the data (16).
Once the HTTP request handler has performed all tasks, it returns control to the ICF controller (function module HTTP_DISPATCH_REQUEST) (17).
The steps (13+14+15+16+17) can be performed repeatedly so that multiple HTTP request handlers can be used for a single request. This setting is made in transaction SICF.
The ICF controller (function module HTTP_DISPATCH_REQUEST) now has control again. The controller requests the server control block data from the ICF manager (18).
The data is serialized from the internal memory representation to HTTP format, and sent to the ICF controller in the HTTP response (19).
The ICF controller passes the data to the task handler (20), the task handler passes the data to the ICM (21), and the ICM passes the data to the client (22). Here, the data can be displayed as an HTML page, for example.