ASP hat zwei unterschiedliche Bedeutungen: "Active Server Pages" und "Application Service Providing". Im Folgenden soll es nur um "Microsoft Active Server Pages" gehen.
Einen Vergleich von MS-ASP zu anderen Techniken finden Sie unter Serverseitige Programmiertechniken für dynamische Webseiten mit Datenbankanbindung.
MS-ASP ist eine Technik zur Einbettung von serverseitig ausgeführten Skripten in HTML-Seiten. MS-ASP kann im Prinzip mit verschiedenen Skriptsprachen kombiniert werden, wird aber fast nur mit VBScript verwendet. Fast alle Beispiele und Dokumentationen setzen VBScript voraus. Da VBScript alleine nicht mächtig genug ist, wird komplexerer Code in COM- oder ActiveX-Komponenten verlagert. Die Microsoft-ActiveX-Library ist nur unter Windows mit dem Microsoft Internet Information Server (IIS) verfügbar.
Im Nachfolger von MS-ASP, dem neuen ASP.NET, kommt nicht mehr VBScript zur Anwendung. Es können theoretisch alle .NET-Programmiersprachen eingesetzt werden. In den üblichen Dokumentationen und Beispielen wird Visual Basic .NET und C# verwendet. Informationen zu .NET und C# finden Sie unter C#, IL, CLR und .NET.
Übliche Position für ASP-Aufrufe im HTML-Dokument |
|
<html> <head> ... </head> <body> <% Response.Write( "Hallo 1!" ) %> <% ="Hallo 2!" %> ... </body> </html> |
<html> schließt das gesamte HTML-Dokument ein. <head> schließt den Header ein. <body> schließt den Hauptteil ein. ASP-Kommandos sind in <% ... %> eingeschlossen und befinden sich meistens im Hauptteil. Sie können auch in einer externen Datei enthalten sein, die per SSI-Include eingebunden wird: <!--#include file=incl.asp"--> oder <!--#include virtual=/inc/incl.asp"--> file bezeichnet einen Pfad relativ zur aktuellen Datei, virtual einen virtuellen Pfad. |
Einige Konventionen und Operatoren |
|
'KommentarText | Komentare werden mit Hochkomma begonnen. |
Response.Write( _ "Hallo !" ) |
Der Unterstrich '_' verbindet Zeilen (und darf nicht in Namen benutzt werden). |
Dim VariablenName Dim ArrayName(11) |
Dim deklariert Variablen (kann aber weggelassen werden). Arrays werden mit runden Klammern deklariert. Die Zählung beginnt bei 0, der angegebene Index bezeichnet den höchstmöglichen Index, es gibt also ein Element mehr als den angegebenen Wert. |
OPTION EXPLICIT | Damit müssen Variablen mit Dim deklariert werden. |
Set objInstName = ... Set objInstName = Nothing |
Set deklariert Objekt-Instanzen (kann aber weggelassen werden). Z.B. Set fso = Server.CreateObject("Scripting.FileSystemObject") Mit Nothing wird die Objekt-Instanz wieder aus dem Speicher entfernt. Z.B. Set fso = Nothing |
Function funktionsname( parm ) ... funktionsname = ... End Function |
Funktionen returnieren ein Ergebnis. Der Rückgabewert muss dem Funktionsnamen zugewiesen werden. Die Parameter werden in Klammern eingeschlossen. |
Sub prozedurname1( parm ) ... End Sub Sub prozedurname2 parm1 parm2 ... End Sub |
Prozeduren returnieren kein Ergebnis. Mehrere Parameter dürfen nicht in Klammern eingeschlossen werden. Ein einzelner Parameter kann mit oder ohne Klammern übergeben werden. |
"", vbTab |
Sonderzeichen: "" für ", vbTab für Tabulator. Z.B. Response.Write( vbTab & "--""--" ) |
& | Addition zweier Strings (+ geht auch). |
+, -, *, /, \, Mod, ^ | Arithmetische Operatoren (\ = ganzzahlige Division, Mod = Modulo, ^ = Exponent). |
=, <>, <, >, <=, >= | Vergleichs-Operatoren (= für Gleichheit, <> für Ungleichheit). |
And, Or, Xor, Not | Logische Operatoren. |
Verzweigungen und Schleifen |
|
If ... Then ... Elseif ... Then ... Else ... End If | If Else. |
Select Case ... Case ... ... Case ... ... ... Case Else ... End Select |
Select Case. |
For Each ... ... Next |
For Each. |
For x=1 To 10 ... Next | For (ohne Step wird um 1 erhöht). |
For x=1 To 10 Step 2 ... Next | For. |
While ... ... Wend |
While. |
Do While ... ... Loop |
Do While. |
Do Until ... ... Loop |
Do Until. |
Einige Daten und Funktionen |
|
len( str ) | Returniert Länge des Strings str. |
InStr( str, subStr ) InStrRev( str, subStr ) |
Returniert Position des subStr in str. InStrRev beginnt von hinten. |
Left( str, nAnzahl ) Mid( str, nStart, nAnzahl ) Mid( str, nStart ) Right( str, nAnzahl ) |
Returniert Teilstrings. |
Now, Date, Time |
Datum + Uhrzeit, nur Datum, nur Uhrzeit (auf dem Server). Now+30 bedeutet: in 30 Tagen. |
Year(), Month(), Day(), Weekday(), Hour(), Minute(), Second() |
Einzelne Zeitangaben eines Datumswertes, z.B. Day(Now). |
DateDiff( format, datum1, datum2 ) |
Differenz zweier Datumwerte. Mit format wird die Rückgabe-Einheit definiert: yyyy=Jahre, q=Quartale, m=Monate, d=Tage, h=Stunden, n=Minuten, s=Sekunden. Z.B. DateDiff( "d", #01/01/2000#, Now ) |
Request... Response... |
Request: Anfrage-Daten vom Client. Response: Ausgabe in HTML-Seite für Client. |
Request.ServerVariable( "..." ) Request.ServerVariable("SCRIPT_NAME") Request.ServerVariable("HTTP_USER_AGENT") |
ServerVariable: Eine die Umgebungsvariablen beinhaltende Kollektion. SCRIPT_NAME: Pfad + Name der aktuellen ASP-Datei. HTTP_USER_AGENT: Client-Browser. |
Request.Form( "..." ) Request.QueryString( "..." ) |
Form: Per POST (per HTTP) übergebene Formulareingaben lesen. QueryString: Per GET (per URL) übergebene Formulareingaben lesen. |
Response.Write( "..." ) ="..." |
Textausgabe. Die Kurzform (="...") funktioniert nur, wenn keine anderen ASP-Anweisungen im <%...%>-Block sind. |
Response.Redirect( "andereseite.asp" ) | Umleitung. Vorher darf es keine HTML-Ausgaben geben. |
Session( "..." ) = "..." Request.Cookies... Response.Cookies... |
In der Kollektion Session können zu einem bestimmten Benutzer gehörenden Daten gespeichert werden (IDs, Name, Warenkorb, ...) (verwendet Cookies). Z.B. Benutzername speichern: Session("Benutzername") = Request.Form("Benutzername") Z.B. Benutzername prüfen: If Session("Benutzername") = "" Then ... Die Kollektionen Request.Cookies und Response.Cookies bieten weitergehende Möglichkeiten (Expires, Domain, Path). |
Set fso = Server.CreateObject( _ "Scripting.FileSystemObject" ) Set dat = fso.OpenTextFile( _ Server.MapPath( _ "/dateiname.txt" ), _ opt, erstell ) dat.ReadAll dat.ReadLine dat.WriteLine dat.Write dat.Close Set dat = Nothing Set fso = Nothing |
Dateizugriff. OpenTextFile erwartet den physikalischen Pfad (z.B. C:\INetPub\WwwRoot\Datei.txt). Ein virtueller kann mit Server.MapPath umgewandelt werden. Als zweiter Parameter wird der Öffnungs-Modus übergeben: 1=Lesen, 2=Schreiben, 8=Anhängen. Fehlt der dritte Parameter und soll in die Datei geschrieben werden, gibt es eine Fehlermeldung, wenn sie noch nicht existiert. Ist der dritte Parameter True wird in diesem Fall eine neue Datei erstellt. |
Beispiel: Alle Formulardaten anzeigen |
|
<html><body><table> <tr><td>Name</td><td>Wert</td></tr> <% For Each element in Request.Form %> <tr> <td><% =element %></td> <td><% =Request.Form(element) %></td> </tr> <% Next %> </table></body></html> |
Diese ASP-Datei muss von der das Formular enthaltenden HTML-Seite aufgerufen werden mit: <form action="formulardatenanzeige.asp" method="post"> |
Beispiel: Formulardaten überprüfen |
|
<% name = True sprache = True If Request.Form("Versand") = _ "Abschicken" Then If Request.Form("Vorname") = "" Then _ name = False End If If Request.Form("Sprache") = "" Then _ sprache = False End If If (name AND sprache) = True Then Response.Redirect("danke.asp") End If End If %> <html> <body> <% If (name AND sprache) = False Then %> <p>Bitte füllen Sie alle Felder aus !</p> <% End If %> <form method="post"> <% If name=False Then %> <font color="#FF0000"><% End If %> Name <% If name=False Then %> </font><% End If %> <input type="text" size="20" name="Vorname" value= "<% =Request.Form("Vorname") %>"> <br> <% If sprache=False Then %> <font color="#FF0000"><% End If %> Lieblingssprache <% If sprache=False Then %> </font><% End If %> <select name="Sprache" size="3"> <option value="ASP" <% If Request.Form("Sprache")="ASP" Then %> selected <% End If %>>ASP</option> <option value="PHP" <% If Request.Form("Sprache")="PHP" Then %> selected <% End If %>>PHP</option> <option value="JSP" <% If Request.Form("Sprache")="JSP" Then %> selected <% End If %>>JSP</option> </select> <br> <input type="submit" name="Versand" value="Abschicken"> </form> </body> </html> |
In diesem ASP-Dokument stehen das Formular und der die Ergebnisse auswertende ASP-Code zusammen in einer Datei. Deshalb wird das action-Attribut im <form>-Tag nicht gesetzt, wodurch die eingegebenen Formulardaten an die gleiche Seite zurückgesand werden. Um den ersten Aufruf (ohne Formulardaten) vom zweiten Aufruf (mit eventuell nur teilweise ausgefüllten Formulardaten) unterscheiden zu können, bekommt der Submit-Button einen Namen: <input type="submit" name="Versand" value="Abschicken"> Dann kann der erste vom zweiten Aufruf unterschieden werden mit: If Request.Form("Versand") = "Abschicken" Bei vollständig ausgefüllten Daten wird auf eine Bestätigungsseite umgeschaltet: Response.Redirect("danke.asp") Davor darf es keine HTML-Ausgaben geben. Bei fehlenden Angaben wird das Formular erneut versand und die Felder mit fehlenden Einträgen rot gefärbt: <font color="#FF0000"> |
Beispiele: Datenbankzugriff |
|
Erklärungen zu ODBC-DSN-Namen und SQL: siehe SQL. Für Microsoft-Access-Datenbankdateien (.mdb) genügt als Eröffnungskommando: cn.Open "DSN=meinDsnName" Soll eine Datenbank per ODBC angesprochen werden, wird "ODBC;" vorangestellt: cn.Open "ODBC;DSN=meinDsnName" Ist die Datenbank passwortgeschützt, müssen Benutzername und Passwort mit angegeben werden: cn.Open "ODBC;DSN=meinDsnName;UID=meinName;PWD=geheim" Source-Code-Beispiele sind funktionsfähig, aber ohne Fehlerbehandlung. |
|
<% Set cn = Server.CreateObject( _ "ADODB.Connection" ) cn.Open "dsn=meinDsnName" cn.Execute( strSql ) cn.Close Set cn = Nothing %> |
SQL-Kommando (z.B. "INSERT ...") ausführen. |
<html><body> <% Dim dsnName Dim tabName if Request.Form( "submit" ) = _ "Datenbank lesen" Then dsnName = Request.Form( "dsn" ) tabName = Request.Form( "tab" ) Else dsnName = "Test-Datenbank" tabName = "Test-Tabelle" End If %> <form method="post"><pre> DSN-Name <input type="text" _ name="dsn" value="<%= dsnName %>"><br> Tabellenname <input type="text" _ name="tab" value="<%= tabName %>"><br> <input type="submit" name="submit" _ value="Datenbank lesen"> </pre></form> <table border=1 cellspacing=0> <% if Request.Form( "submit" ) = _ "Datenbank lesen" Then Set cn = Server.CreateObject( _ "ADODB.Connection" ) Set cmd = Server.CreateObject( _ "ADODB.Command" ) Set rs = Server.CreateObject( _ "ADODB.Recordset" ) cn.Open "dsn=" & dsnName strSql = "SELECT * FROM " & _ tabName cmd.CommandText = strSql cmd.CommandType = 1 Set cmd.ActiveConnection = cn rs.Open cmd, , 0, 1 While Not rs.EOF Response.Write( "<tr>" ) For Each feldelement in rs.Fields Response.Write( "<td>" & _ feldelement & "</td>" ) Next Response.Write( "</tr>" ) rs.MoveNext Wend rs.Close cn.Close Set rs = Nothing Set cmd = Nothing Set cn = Nothing End If %> </table> </body></html> |
SQL-Recordset einlesen und anzeigen mit VBScript. |
<%@ LANGUAGE="JSCRIPT" %> <html><body> <% var dsnName = "Test-Datenbank"; var tabName = "Test-Tabelle"; if( Request.Form( "submit" ) == "Datenbank lesen" ) { dsnName = Request.Form( "dsn" ); tabName = Request.Form( "tab" ); } %> <form method="post"><pre> DSN-Name <input type="text" name="dsn" value="<%= dsnName %>"><br> Tabellenname <input type="text" name="tab" value="<%= tabName %>"><br> <input type="submit" name="submit" value="Datenbank lesen"> </pre></form> <table border=1 cellspacing=0> <% if( Request.Form( "submit" ) == "Datenbank lesen" ) { var db = Server.CreateObject( "ADODB.Connection" ); db.Open( dsnName ); var rs = db.Execute( "SELECT * FROM " + tabName ); while( !rs.EOF ) { %> <tr> <% for( i=0; i<rs.Fields.Count; i++ ) { %> <td><%= rs(i) %></td> <% } %> </tr> <% rs.MoveNext(); } db.Close(); } %> </table> </body></html> |
SQL-Recordset einlesen und anzeigen mit JScript. |