Active Server Pages (ASP)

 

Active Server Pages sind eine Technologie, mit der Code serverseitig ausgeführt werden kann. ASP ist kein Gestaltungselement! Immer, wenn ein Browser eine Datei mit der Erweiterung *.ASP von einem Webserver anfordert, wird dort die ASP-Engine ASP.DLL gestartet und die Datei ausgeführt. An den Browser wird eine reine HTML-Datei zurückgeliefert!

 

Voraussetzungen:

·        Windows NT Server 4.0 mit Service Pack 3 und Windows NT 4 Option Pack (inkludiert Internet Information Server 4.0); wichtig: ASP-Erweiterungen müssen installiert sein!

 

Weniger optimal sind IIS 2.0 oder IIS 3.0 auf NT Server 4.0. Als Entwicklungsumgebung kann auch Windows 95/98 mit dem Personal Web Server verwendet werden.

 

Werkzeuge zur Erstellung einer ASP-Datei:

 

·        Editor (selbst eintippen)

·        Microsoft Visual InterDev

·        Macromedia Drumbeat

 

WWW-Adressen zum Thema ASP:

www.wrox.com

            ist ein Diskussionsforum mit vielen (englischsprachigen) Informationen zum Thema Web-

            programmierung und ASP

 

ASP-Code ordnet sich prinzipiell dem HTML-Standard unter.

Serverseitiger Code ist erkennbar an den speziellen Tag-Begrenzungen

<% Code %>

 

Die Programmierung von ASP-Code erfolgt üblicherweise in Visual Basic-Script (VBScript). Die Sprache ist in der 1. Zeile des HTML-Codes anzugeben (es sollte auch am IIS VBScript als Standardsprache eingestellt sein!):

<%@ LANGUAGE="VBSCRIPT" %>

 

 

Beispiel 1: Heutiges Datum

<%@ LANGUAGE="VBSCRIPT" %>

<% Option Explicit %>

<html>

  <head>

    <title>Datum, Zeit, ...</title>

  </head>

 

  <body>

    Heute ist

    <% =FormatDateTime(now(),vbLongDate) %>

  </body>

</html>

 


Eingebaute Objekte:

 

Fünf Objekte sind in VBScript bereits eingebaut und ersetzen die herkömmliche Ein-/Ausgabesteuerung von Visual Basic:

 

 

Beispiel zum Request-Objekt:

 

<%@ LANGUAGE="VBSCRIPT" %>

<% option explicit %>

<HTML>

  <HEAD>

    <TITLE>

      ASP: Beispiel 60

    </TITLE>

  </HEAD>

  <BODY>

    <% =Request.ServerVariables("PATH_INFO") %>

  </BODY>

</HTML>

 

Beispiel zum Server-Objekt:

 

<%@ LANGUAGE="VBSCRIPT" %>

<% option explicit %>

<HTML>

  <HEAD>

    <TITLE>

      ASP: Beispiel 62

    </TITLE>

  </HEAD>

  <BODY>

    <% dim pi %>

    <% pi = Request.ServerVariables("PATH_INFO") %>

    virtueller Pfad: <% =pi %> <BR>

    physisches Verzeichnis am Server: <% =Server.MapPath(pi) %>                        

  </BODY>

</HTML>


 

Beispiel zum Response-Objekt: Auslesen der Server-Variablen

 

<%@ LANGUAGE="VBSCRIPT" %>

<% option explicit %>

 

<HTML>

  <HEAD>

    <TITLE>

      ASP: Beispiel 64

    </TITLE>

  </HEAD>

  <BODY>

    <H1>Server Variables Collection</H1><BR>

    <% dim item %>

    <% dim iloop %>

    <% for each item in request.servervariables

         for iloop = 1 to request.servervariables(item).count

            response.write (item & " = " & request.servervariables(item)(iloop)) %>

           <BR>

         <% next %> 

    <% next %>

  </BODY>

</HTML>

 

Es gibt eine Reihe von Environment Variablen, die mit dem Server gestartet werden,

·        QUERY_STRING
Diese Variable enthält den Rückgabestring mit Aufbau wie oben beschrieben.

·        CONTENT_TYPE
Diese Variable gibt den MIME-TYPE an, welche den Typ der Daten angibt (z.B. text/plain, text/html oder irgendein Graphiktyp)

·        CONTENT_LENGTH
Gibt die Länge des Datenstrings in Zeichen an.

·        PATH_INFO
Gibt zusätzliche Pfadinformationen an.

·        PATH_TRANSLATED
Gibt zusätzliche Pfadinformationen in einer endgültig verwendbaren Form übersetzt an.

·        REMOTE_ADDR
Gibt die IP-Adresse des Clients an.

·        REMOTE_HOST
Gibt den Namen des Clients an (HOSTNAME).

·        REMOTE_USER
Gibt den authentischen Benutzernamen des Clients an (jeder Benutzer, der mit einem WWW-Server arbeitet, der wird auf diesem Server als der Benutzer „wwwrun“ angemeldet – nicht vergessen, entsprechende Berechtigungen für diesen Benutzer zu setzen).

·        REMOTE_IDENT
Gibt den Benutzernamen so an, wie er vom IDENT_PROTOKOLL (definiert in RFC 931) vorgegeben wurde.

·        AUTH_TYPE
Art der verwendeten Bestätigung (in welcher Form erfolgt die Autorisierung à Sicherheit).

·        REQUEST_METHOD
Gibt den Namen der Methode an (GET oder POST).

·        SCRIPT_NAME
Gibt den Namen des CGI Programmes an, z.B. „/cgi-bin/script.cgi“ (Angabe also relativ zu „cgi-bin“).

·        SERVER_PORT
Standardanschluß à Port 80 für einen WWW-Server.

·        SERVER_PROTOCOL
Name des vom Server verwendeten Protokolls (z.B. HTTP/1.0).

 

Diese Variablen bezogen sich auf den Client und dem Weg zwischen Client und Server. Folgende Variablen beziehen sich nur auf den Server:

·        HTTP_USER_AGENT
Name des anfragenden Servers (z.B. Mozilla/1.1M Windows, 16 Bit).

·        HTTP_ACCEPT
Enthält eine Liste von MIME-Typen, die der Client verarbeiten kann.

·        HTTP_REFERER
Enthält die URL der Form/des Dokuments, das die Quelle der Anfrage war (z.B. http://server/page.html ).

 


Komponenten:

 

Komponenten sind – ebenso wie die eingebauten Objekte – Sammlungen von Methoden und Eigenschaften. Der Unterschied ist, dass Komponenten auf eine ganz bestimmte Anwendung zugeschnitten sind. Mit IIS 4 werden neun Komponenten geliefert:

 

 

Die meisten Komponenten stammen aus der Klasse MSWC (Microsoft Web Components) und erweitern die eigentliche Funktionalität von ASP.

 

Um eine Komponente zu benutzen, muss eine Instanz erzeugt werden. Dazu verwendet man die Methode CreateObject() des Server-Objekts:

 

    <% set ad = Server.createobject("MSWC.AdRotator") %>

 

Wichtig: Eine solche Instanz (ad) ist nur innerhalb der Seite verwendbar, die das aufrufende Skript enthält. Wird die Seite beenden, so wird auch das Objekt gelöscht! (Typisch dafür ist die Verwendung der Anweisung SET).

 


Pagecounter:

 

Achtung! Erfordert die Installation des „Internet Information Server 4 Resource Kit“!

 

<%@ LANGUAGE="VBSCRIPT" %>

<% option explicit %>

 

<html>

 

  <head>

    <title> Pagecounter </title>

  </head>

 

  <body>

    <% Dim sz %>

    <% Set sz = Server.createobject("IISSAMPLE.PageCounter") %>  

    <% sz.PageHit %>

    Anzahl der Zugriffe auf diese Seite:

    <% =sz.Hits %>  

  </body>

 

</html>

 

Hinweis: Beachten Sie, dass die PageCounter-Komponente standardmäßig nicht unter der Klasse „MSWC“ installiert wird, sondern unter der Klasse „IISSAMPLE“!

 

Globales Counters-Objekt:

 

Der Zähler wird hier in der Datei GLOBAL.ASA definiert. Die folgende Zeile bewirkt die Erzeugung eines Zähler-Objekts am Server:

 

<OBJECT RUNAT="Server" SCOPE="Application" ID="zaehler" PROGID="MSWC.Counters"></OBJECT>

 

Der Code für die Erhöhung des Zählers ist in einem normalen ASP-Skript enthalten. Beachten Sie: Mit der globalen Definition können mehrere Zähler erzeugt und mitgeführt werden. Im folgenden Skript wird ein Zähler „Seiten“ erzeugt.

 

<%@ LANGUAGE="VBSCRIPT" %>

<% option explicit %>

<html>

  <head>

    <title> Globales Counters-Objekt </title>

  </head>

  <body>

    Anzahl der Zugriffe auf diese Seite:

    <% =zaehler.Increment("Seiten") %>  

  </body>

</html>

 

Der aktuelle Stand des Zählers wird in der Datei COUNTERS.TXT gespeichert, die üblicherweise im Verzeichnis C:\WINNT\system32\inetsrv abgelegt wird.

 

Inhalt der Datei COUNTERS.TXT für obiges Beispiel:

 

Seiten:3458

 

 

Beispiel: Ad Rotator

 

Diese Komponente hat nur eine einzige Methode – GetAdvertisement – mit der der nächste Banner zur Anzeige gebracht wird.

 

<%@ LANGUAGE="VBSCRIPT" %>

<% option explicit %>

<HTML>

  <HEAD>

    <TITLE>

      ASP: Beispiel 70

    </TITLE>

  </HEAD>

  <BODY>

    <% dim ad %>

    <% set ad = Server.createobject("MSWC.AdRotator") %>

    <% ad.clickable = false %>

    <% =ad.GetAdvertisement("/ilgscript/adrot_70.txt") %>

  </BODY>

</HTML>

 

Die Datei adrot_70.txt enthält Informationen zu den Werbebilden und die zugehörigen Links:

 

width 460

height 60

border  0

*

/ilgbild/ad_1.gif

http://www.microsoft.com

Microsoft USA

50

 

/ilgbild/ad_2.gif

http://www.hill-woltron.com

Personalberater HILL Woltron

50

 

1. Zeile: Bannergrafik

2. Zeile: Link zum Werbekunden

3. Zeile: Alternativer Text (so wie bei <IMG SRC=“..:“ ALT=“...“>

4. Zeile: Relative Häufigkeit der Banneranzeige in Prozent
Beispiel: Ad Rotator Nr. 2

 

 

<%@ LANGUAGE="VBSCRIPT" %>

<% option explicit %>

<HTML>

  <HEAD>

    <TITLE>

      ASP: Beispiel 72

    </TITLE>

  </HEAD>

  <BODY>

    <% dim ad %>

    <% set ad = Server.createobject("MSWC.AdRotator") %>

    <% ad.clickable = true %>

    <% =ad.GetAdvertisement("/ilgscript/adrot_72.txt") %>

  </BODY>

</HTML>

 

Die Datei adrot_72.txt enthält zusätzlich den Hinweis, auf welche Datei die Ausgabe geschrieben werden soll:

 

REDIRECT /ilgscript/asp_redir_72.asp

width 460

height 60

border  0

*

/ilgbild/ad_1.gif

http://localhost/default.htm

lokaler Server - Homepage Serverroot

50

 

/ilgbild/ad_2.gif

http://www.hill-woltron.com

Personalberater HILL Woltron

50

 

Die Datei asp_redir_72.asp enthält nur eine einzige Anweisung:

 

  <% Response.Redirect(Request.QueryString("url")) %>


Variablenübergabe an andere Seiten:

 

GET-Methode des Form-Tags in der HTML-Seite/QUERY_STRING-Servervariable:

Die Daten werden an eine Servervariable mit dem Namen „QUERY_STRING“ übergeben, die programmtechnisch (über das Request-Objekt) ausgelesen werden kann.

 

Beispiel:

http://server/pfad?elementname=wert&elementname=wert1+wert2&elementname=wert

 

Bedeutung der Zeichen:

+...ein Blank wird in + umgewandelt

?...Startzeichen für die Liste der Werte

&...Trennt die Werte der einzelnen Variablen

%...Sonderzeichen beginnen mit diesem Zeichen, dann folgt der HEX-Code

    für das Sonderzeichen wie z.B.

         %0A entspricht dem Zeichen CARRIAGE RETURN (\n)

         %0D entspricht dem Zeichen LINEFEED (\r)

 

Der Teil „elementname“ entspricht dem Namen einer Komponente der Form (z.B. der Name einer Textbox), wert entspricht dem Wert, der für diese Komponente festgelegt wurde (z.B. in eine Textbox „NAME“ wurde der Name „Franz Huber“ eingegeben, dann steht in dieser Liste
NAME=Franz+Huber).


 

Beispiel: Browser-Fähigkeiten

 

<%@ LANGUAGE="VBSCRIPT" %>

<% Option Explicit %>

 

<html>

 

<head>

<title>Browserfähigkeiten</title>

</head>

 

<body>

  <% Dim Browser %>

   

  Browser:

  <% =Request.Servervariables("http_user_agent") %> 

  <BR>

  <% Set Browser = Server.CreateObject("MSWC.Browsertype") %>

  <BR>

 

  <TABLE>

    <TR><TD>Browsertyp: </TD><TD><% =Browser.Browser %></TD></TR>

    <TR><TD>Version: </TD><TD><% =Browser.version %></TD></TR>

    <TR><TD>Cookies: </TD><TD><% =Browser.cookies %></TD></TR>

    <TR><TD>Frames: </TD><TD><% =Browser.frames %></TD></TR>

    <TR><TD>JavaScript: </TD><TD><% =Browser.javascript %></TD></TR>

    <TR><TD>VBScript: </TD><TD><% =Browser.vbscript %></TD></TR>

    <TR><TD>Plattform: </TD><TD><% =Browser.platform %></TD></TR>

  </TABLE>  

</body>

 b

</html>

 

Erklärung: Die in obiger Tabelle angezeigten Werte stammen aus der Datei BROWSCAP.INI, die am Server unter %Systemroot%\System32\inetsrv zu finden ist. Wenn Sie diese Datei mit einem Texteditor bearbeiten, können Sie auch neuere Browser anzeigen bzw. eigenwillige Ausgaben erzwingen.

 

Wesentlich ergänzte Versionen der Datei BROWSCAP.INI können zum Beispiel von http://www.cyscape.com/browscap heruntergeladen werden. Dort sind auch Einträge für neue Browser wie Opera, Netscape Navigator 6.0 und Internet Explorer 5.x vorhanden.

 

Beispiel:

 

;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;       Opera        ;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;

 

[Opera 3.0]

browser=Opera

Version=3.0

majorver=#3

minorver=#0

frames=True

tables=True

cookies=True

backgroundsounds=False

vbscript=False

javascript=True

javaapplets=False

activexcontrols=False

AK=False

SK=False

AOL=False

beta=False

Win16=False

Crawler=False

CDF=False

 

[Mozilla/3.0 (compatible; Opera/3.0; windows 3.1)*]

parent=Opera 3.0

platform=Win31

 

[Mozilla/3.0 (compatible; Opera/3.0; Windows 95/NT)*]

parent=Opera 3.0

platform=Win32

 

[Mozilla/3.0 (compatible; Opera/3.0b8; Windows 95/NT)*]

parent=Opera 3.0

platform=Win32

beta=True

 


 

Datenbankzugriff mit Active Server Pages mit Hilfe der ActiveX Data Objects

 

 Voraussetzungen:

·        Windows NT 4.0 Server mit Service Pack 3

·        Auf diesem Server ist das NT Option Pack 4 installiert (enthält Internet Information Server 4.0)

·        Nach der Installation des Option Packs könnte NT SP 4 auch nachinstalliert werden, aber keinesfalls vorher (sonst Absturz des Internet Information Servers)

·        Auf dem IIS ist eine Website installiert

·        Die Datei adovbs.inc muss aus dem Verzeichnis C:\Programme\Gemeinsame Dateien\System\ado in ein bekanntes Verzeichnis innerhalb der Website (zB C:\InetPub\WWWRoot) kopiert werden. (Diese Datei enthält die ActiveX Data Objects)

 

Was sind die ActiveX Data Objects?

Diese Objekte stellen eine Sammlung von Klassen – vergleichbar den Data Access Objects (DAO) – dar, die den Zugriff auf ODBC-Datenbanken direkt von VBScript aus ermöglichen.

 

Folgende sieben Objekte (Unterklassen) gehören zur Hauptklasse ADODB (ActiveX-Data-Object-Database):

·        Connection: Stellt die Verbindung zu einem SQL-Server her

·        RecordSet: Stellt die Datenschnittstelle zu den Tabellen der Datenbank her

·        Field: Erlaubt den Zugriff auf ein einzelnes Feld

·        Command: Sendet einzelne Kommandos an den SQL-Server oder startet gespeicherte Prozeduren

·        Property: Erlaubt den Zugriff auf Eigenschaften der SQL-Datenbank

·        Error: Objekt zur Behandlung von Fehlermeldungen

 

 

 

Vorgangsweise:

 

1.       Datenbank erstellen

 

2.       ODBC-Eintrag erstellen

 

3.       ASP-Datei programmieren

 


 

Zu 1. Datenbank erstellen:

Erstellen Sie Ihre Datenbank – wie gewohnt – mit dem Datenbank-Management-System, etwa Access. Speichern Sie die Datenbank in einem Verzeichnis Ihrer Website auf dem Server.

 

  


Zu 2. ODBC-Schnittstelle einrichten:

 

Starten Sie die Systemsteuerung und doppelklicken Sie auf das Icon “ODBC”. Wählen Sie die Karteikarte “System-DSN” und klicken Sie auf “Hinzufügen”.

 

 

Hier wählen Sie zunächst den ODBC-Treiber aus, mit dem Ihre Datenbank angesprochen werden soll (in unserem Fall Access):

 

 

 

 

Dann vergeben Sie für Ihre Datenbank einen Data Source Name (DSN), unter dem die Datenbank angesprochen wird. Sie können auch eine erklärende Beschreibung für Ihre Datenquelle vergeben. Vergessen Sie nicht, mit der Befehlsschaltfläche „Auswählen“ den lokalen Pfad sowie den Dateinamen für Ihre Datenbank anzugeben!

 

 


  zu 3. ASP-Datei programmieren:

 

 

Beispiel 3: Abfrage einer bestehenden Datenbank

 

<%@ LANGUAGE="VBSCRIPT" %>

<% Option Explicit %>

 

<HTML>

  <HEAD>

    <TITLE>Datenbankabfrage</TITLE>

  </HEAD>

 

  <BODY>

    <% Dim sc, sqlq, rs %>

    <!-- #include virtual="/adovbs.inc" -->

    <% Set sc=Server.CreateObject("ADODB.Connection") %>

    <% sc.open "Kommentare" %>

    <% sqlq="SELECT tblKommentare.nachname, tblKommentare.kommentar

       FROM tblKommentare" %>

    <% set rs = sc.execute(sqlq,,adCmdText) %>

    <% Do While Not rs.EOF %>

    <%    =rs("nachname") & " " %>

      <%    =rs("kommentar") %>

     <% rs.MoveNext %> <BR>

    <% Loop %>

 

  </BODY>

 

</HTML>

 

Vorgangsweise:

·        Server-Connection-Objekt erzeugen

·        SQL-String festlegen

·        RecordSet-Objekt erzeugen (dazu nötig: Abfrage-SQL-String)

·        Datenbankeinträge anzeigen (Do While-Schleife – Recordset-Inhalt in HTML-Seite anzeigen)


 

Auszug aus der Datei ADOVBS.INC:

 

Die Datei adovbs.inc enthält eine Reihe von Konstantenvereinbarungen, die ASP-Skripte weitaus besser lesbar machen.

 

<%

'--------------------------------------------------------------------

' Microsoft ADO

'

' (c) 1996 Microsoft Corporation.  All Rights Reserved.

'

'

'

' ADO constants include file for VBScript

'

'--------------------------------------------------------------------

 

'---- CursorTypeEnum Values ----

Const adOpenForwardOnly = 0

Const adOpenKeyset = 1

Const adOpenDynamic = 2

Const adOpenStatic = 3

 

' ..... und so weiter ......

%>

 

Mit der Anweisung

<!-- #include virtual="adovbs.inc" -->

kann die obige Datei so in eine ASP-Datei integriert werden, wie wenn der Code selbst an dieser Stelle eingefügt worden wäre.

 


Wie sieht obiges Beispiel vom Client aus aus?

 

 

Sichtbarer Quellcode am Client:

<HTML>

  <HEAD>

    <TITLE>Datenbankabfrage</TITLE>

  </HEAD>

 

  <BODY>

    zahler no comment <BR>

    losbichler good comment <BR>

    morgan bad comment <BR>

 

  </BODY>

 

</HTML>

 

Also: Am Client wird nur eine normale HTML-Seite angezeigt; die serverseitigen Befehle scheinen nicht!

 


Beispiel 4: Eintrag in eine Datenbank über ein client-seitiges Formular

 

<%@ LANGUAGE="VBSCRIPT" %>

<% Option Explicit %>

 

<HTML>

  <HEAD>

    <TITLE>Formular</TITLE>

  </HEAD>

 

  <BODY>

  <% Dim sc, sqlq, rs %>

  <!-- #include virtual="adovbs.inc" -->

 

  <% If Request.Form("eingName")="" _

        Or Request.Form("eingKommentar")="" Then %>

  <H4>Ihre Kommentare, bitte!</H4>

  <FORM METHOD="POST" ACTION="formular.asp">

    <P>Ihr Name:<BR>

    <INPUT TYPE="text" NAME="eingName">

    <P>Kommentar:<BR>

    <INPUT TYPE="text" NAME="eingKommentar">

    <P>

    <INPUT TYPE="submit" VALUE="Eintragen">

   </FORM>

   <% Else %>

      Sie haben folgende Daten eingetragen:

     <% =Request.Form("eingName") %>

     <BR>

     <% =Request.Form("eingKommentar") %>

 

    <% Set sc=Server.CreateObject("ADODB.Connection") %>

    <% Set rs=Server.CreateObject("ADODB.RecordSet") %>

    <% sc.Open "Kommentare" %>

    <% rs.Open "SELECT * FROM        tblKommentare", _

          sc,adOpenDynamic,adLockPessimistic,adCMDText %>

    <% rs.AddNew %>

    <% rs("nachname") = Request.Form("eingName") %>

    <% rs("kommentar") = Request.Form("eingKommentar") %>

    <% rs.Update %>

    <% rs.Close %>

    <% sc.Close %>

   <% End If %>

 

  </BODY>

 

</HTML>

 

 

 


So sieht diese Datei von der Client-Seite aus:

 

 

 

 


Der Beweis: Er hat’s wirklich eingetragen!!