Contents:
Overview
Foreword
ScriptGen module provides ALP with ability to execute Active Scripts. It uses
updated version of the newObjects ScriptManager2 component from the ALP
run-time library (always shipped with ALP). This generator
supports two different script types - ASP-like and raw scripts.
Both types share common object model and it is possible to combine the both kinds in one
application. However the main purpose of this module are the ASP pages
and the raw scripts are supported just as additional convenience for
developers (mostly useful for test purposes).
ASP-like scripts provide almost full compatibility with Microsoft Internet
Information Server and Active Server Pages supported by it. ASP-Like scripts and
the object model together
implement the most used part of the functionality that can be found in the ASP on the
IIS (see the compatibility notes
below).
In short about the internal architecture
Short explanation of the request processing:
Content generator holder (CGHolder) invokes the ScriptGen component and passes to it
the request in the standard CCGA form. ScriptGen component used is created by the CGHolder
over the configuration specified in the alp.application file (local combined with the
global). Thus in the moment of initialization ScriptGen knows what kind of work it must do
and what script type will be executed.
As a second step comes the negotiation between CGHolder and ScriptGen about the
global/custom objects. ScriptGen supports Application and Session objects. Thus CGHolder
determines if the current request belongs to a particular application and session and if
the current request is the first one for the Application and Session it asks ScriptGen to
create empty objects and saves them for the next requests. ScriptGen on its side obtains
from the CGHolder these objects and processes the request - creates and initializes the
environment objects such as Request, Server, Response.
After these objects become ready. ScriptGen initializes the ScriptHost and attaches
them to the host.
ScriptGen uses passes request to determine how to load the script and activates the
appropriate components if needed. At the end it has a prepared script that is loaded into
the ScriptHost and executed.
During the execution script communicates with the ScriptGen using the environment
objects and the output and other output information (such as headers) is passed back to
the CGHolder. CGHolder buffers the output and after the end of the execution transfers the
buffers to the client - usually Internet Explorer.
Compatibility depends on the Pluggable Protocol API provided by Microsoft. ALP must act
as a server and as a client at the same time and additionally it must synchronize its
client functions with the Internet Explorer browser - i.e. ALP targets tight integration
with the browser. Unfortunately there are several features realized in the OS as specific
exceptions for the HTTP(S) only. Thus it is impossible to use the
API provided features for the realization of that part of the functionality.
Fortunately most of the problems caused by it are avoidable and are
avoided in ALP. Another
problem is that some of the required features are not available on all the platforms
targeted by ALP (i.e. Windows 95). We are gradually extending ALP to
cover or simulate the features that are problematic on client computers.
Here is the list of the features status/availability:
- Query string - supported. CCGA assumes always name=value format of the
parameters in the query string (widely used format today). In ASP
this is de-facto standard.
- Post - Form posts are supported for the url encoded form fields (format
used by all browsers). Multipart forms (mostly used for file uploads) are supported
as well. File uploads may look a bit strange in ALP environment, but
in many cases (not only because of compatibility considerations)
they allow convenient user interface to be built. For example
putting/transferring images in data bases or binary files,
processing data specified by the user not relying on the file system
etc.
- Environment/Server variables - supported. ALP engine itself emulates
acceptable replacements for the values not available on the desktop - such as the host
name for example. Replacements are designed to be useful and not to cause confusion for
the scripts. Port 80 is always assumed and shown to the scripts in order to prevent them
from placing :port after the host name when they are creating URL
manually.
- URL - (See above notes too). ALP URL syntax is designed to
"cheat" the
scripts that it is a normal URL with the typical parts such as server, path, file,
parameters and in the same time the URL corresponds to a local path. That behavior helps
to build URL without knowing that the script runs on the desktop and gives ability
to use meaningful (for the local system) URLs that can be easily converted to a local path or
file: protocol URL.(see ALP URL for
details)
- Session and Application and global.asa file.
- The global.asa file is supported without only the type library
import option. This includes the Session_OnStart and
Application_OnStart events, <OBJECT RUNAT=SERVER ...> with
scoping. The type library (in ASP the constants from type
libaries can be imported in global.asa - for example the ADO
constants) import can be easilly replaced by using include files
with constants. This feature is not planned for support or if
added in future version it will not fully resemble the MS ASP.
This is because ALP may run also dynamically (as autorun
application for example) and the parameters required to import
type library (its GUID) are cannot be known in such a scenario.
- Session and Application have two collections StaticObjects and
Contents (dynamic values collection).
- Scripting languages - ASP-like pages may be
written in one or more languages. Using the SCRIPT RUNAT=SERVER tag
you can mix the scripting languages as needed. By default ALP is
configured to support VBScript and JScript/Javascript, but
additional
languages (other than JScript and VBScript) can be hosted by the ScriptGen if they are
installed on the system and configured. Portable applications should
redistribute any such languages because they are not preinstalled with the Windows or
IE (for example PerlScript, Pyton etc.).
- Binary transfers - Supported for the output and
input.
- Transactions and related features - ALP targets cross Windows platform
portability and the Transaction server is not installed by default on all the platforms.
Providing hardly integrated support for the transactions will make ALP dependend on it and
thus will limit its portability. However the transactions are used
mostly for server side optimization and they should not be used as
widely in ALP.
- Headers - Only MIME type (Content-Type) and
Content-Disposition headers have meaning with ALP - the other
headers are currently accepted but ignored. There is no universal
headers support in the pluggable protocols API and only a minimal set of headers can be
supported without simulation.
- Cookies - not supported. A decision has been made
to include such support for the ALP version after 1.2 (not including
1.2), but it will be more complicated than in WEB environment in
order to avoid the potential problems caused by the fact that the
HTTP cookies are not designed for the scenarios in which ALP runs.
In general the cookies are defined in the Internet standards over
the fact that the WEB servers have well-known constant
addresses/names. ALP is too dynamic to be able to just simulate this
without additional information (such as settings that allow ALP to
recognize one site even if it has been moved).
- Multilanguage support. With version 1.2 ALP supports all
the languages that can be represented in multibyte charsets. Using
the @CODEPAGE directive and the Session.CodePage property the pages
can be designed to support any installed language. Note that in ALP
these settings are more important than on IIS for ALP is designed to
support even the oldest Windows versions and cannot afford to employ
some of the features implemented in IIS only for the latest Windows
OS versions. So, ALP is more sensitive and if you are working with
non-european language, setting these options should be your first
job.
- ASP objects. The IIS developers know that there is way to
build COM objects exclusively designed to work in ASP environment -
with direct access to the ASP objects (such as Request, Response
etc.). The old-fashioned technique - through OnStartPage/OnEndPage
events is supported, but the classes built should use IDispatch
(Object or non-specified type in VB) to fetch the ScriptingContext
object and the other ASP objects. The COM+/Transaction server based
technique is not supported as it will rise the ALP deployment
requirements.
- Adjustable compatibility. In the way of the ALP development
we made some little mistakes in the implemented behavior of some of
the ASP objects and collections (for example the ALP 1.0 returned
Null for the unset Session values). To provide compatibility for the
both - application older ALP versions and maximum IIS compatibility
it is possible to set a compatibility level for each application in
its alp.application configuration file (or through the ALP settings
shell extension invoked for the corresponding ALP
site/application).
|