Von Client-Techniken zur ASPX-Technologie Für alle Schritte in dieser Dokumentation wird das Programm "Taschenrechner" verwendet. Es gibt drei Textfelder x, y und z für die Zahlen, ein Select-Control für die Rechenoperation und einen Button, um die Berechnung durchzuführen. Programme am Client Einfache interaktive Internet-Seiten verwenden JavaScript-Programme, um auf Useranfragen zu reagieren und bei Bedarf die Seite neu zu gestalten. Die Angaben und die Ergebnisse bleiben Bestandteil derselben Seite. Allerdings sind diese Techniken auf einfache Probleme beschränkt, denn der Zugriff auf Daten erfolgt üblicherweise am Server und nicht beim User. rechner0.htm Die Textfelder und die Auswahl der Rechenoperationen werden mit name= benannt; damit kann der Inhalt im Rahmen einer Funktion ausgewertet werden. Das Event onClick() ruft die Funktion rechne(). rechne() benutzt die die Funktion eval() zur Berechnung des Ergebnisses. eval() erlaubt die Auswertung von Ausdrücken zur Laufzeit. Damit die Ausdrücke nicht so lang werden, wurde document.rechner mit r abgekürzt. Client-Server-Programm mit Datenübergabe zum Server Daher muss man das Programm in zwei Teile aufteilen: einen Teil, der die Interaktion mit dem User besorgt, das ist eine einfache HTML-Seite und ein Server-Skript, das die Daten verarbeitet und ausgibt. rechner1.htm rechner1.asp Die Auswertefunktion in der HTML-Datei wandert bei einem Client-Server-Programm in das Server-Skript, daher muss in der HTML-Datei die Komunikation mit dem Server beschrieben werden. Das sind einmal die Attribute action und method im form-Tag, die das empfangede Skript und die Kommunikationsmethode angeben. Weiters muss das Steuerelement button in submit geändert werden, damit der Klick nicht eine Funktion anspricht sodern die Eingaben auf der HTML-Seite an das Serverskript sendet. Das Serverscript arbeitet mit VBScript und übernimmt die Daten aus der Kommandozeile mit der Methode Request.QueryString() in gleichnamige Variablen und benutzt wieder die Funktion eval() zur Berechnung des Ergebnisses. Das Ergebnis wird angezeigt; der Benutzer bekommt mit einem Link die Möglichkeit, die vorige Seite wieder aufzurufen. Client-Server-Programm mit gegenseitiger Datenübergabe Bei sich wiederholenden Aufgaben ist zweckmäßig, wenn eine erfolgte Berechnung am Server gleich wieder als Input auf der HTML-Seite erscheint, daher muss das Server-Script auch die HTML-Seite mit einem Parameter-Satz aufrufen. rechner2.htm rechner2.asp Am Serverscript wird daher das Ergebnis nicht angezeigt sondern mit Response.Redirect() zum Client zurückgeschickt. Die Funktione CStr() wird benötigt, um die Zahlenwerte in Strings für die Rückgabe zu verwandeln. Am Client muss ein Skript diese Daten zu übernehmen und dann in die Felder eintragen. Da das Zerlegen des Komandozeilenstrings durch JavaScript nicht besonders unterstützt wird, muss eine eigene Funktion GetParValue() geschrieben werden. Das Skript besteht aus zwei Teilen: der erste Teil übernimmt die Parameter von der Kommandozeile und speichert sie in gleichnamigen Variablen, der zweite Teil trägt die übernommenen Werte in die Steuerelemente. Client-Server-Programm in derselben Datei Bei der vorigen Version fällt auf, dass die Übergabe und Übernahme der Paramter auf beiden Seiten zu programieren ist, noch dazu in jeweils verschiedenen Sprachen. Es ist daher vorteilhaft, Eingabemaske und Auswerteskript in derselben Seite zu vereinigen. Mit dieser Vorgangsweise sind wir schon nahe am Konzept von ASPX, denn auch bei ASPX-Skripts (besser ASPX-Programmen) ruft eine Seite immer sich selbst auf. Der Vorteil: Programme und HTML-Elemente derselben Seite können direkt kommunizieren. Skript generiert Skript rechner3.asp Die serverseitige Skriptsprache kann die jeweils benötigten Skripts am Client generieren, das Clientscript muss daher nicht alle möglichen Fälle abdecken, sondern nur den für diese Seite zutreffenden. Hier ist es die Zeile document.rechner.op.options[<%=i%>].selected = true die je nach ausgewählter Rechenoperation einen anderen Wert für i einsetzt. Dieses Skript hat größtmögliche Ähnlichkeit mit einer ASPX-Datei. Durch die Zusammenlegung von Clientskript und Serverskript in einer Datei ergibt sich ein gewisser Overhead. Eine gleichartige ASPX-Datei vereinigt die Vorteile der gemeinsamen Datei mit jenen der getrennten Version. Bei ASPX-Programmen gibt es zwar nur eine Programmdatei, der Programmierer hat daher volle Übersicht; diese Datei wird aber in einen (unsichtbaren) serverseitigen Binärkode und einen zum Client geschickten HTML-Kode aufgeteilt. Über Parameterübergabe zwischen diese Teilen muss man sich nicht kümmern, die wird von ASPX übernommen. Aus dem Skript wird ein vollwertiges Programm, denn am Server arbeiten vier Kompiler. Der erste Aufruf einer Seite dauert etwas länger, weil der Kode kompiliert wird; alle folgenden Aufrufe arbeiten maximaler Geschwindigkeit. Bei Fehlern im Kode gibt es eine Seite mit Fehlermeldungen, Fehlertoleranz von Skriptsprachen oder gar HTML sind nicht gegeben. Vergleich ASP und ASPX Verglichen werden die Dateien rechner3.asp und rechner.aspx. In ASPX-Dateien hat das form-Tag keine Attribute, weil die aktuelle Datei immer auch gleichzeitig das Ziel ist Die Steuerelemente der HTML-Seite werden mit dem id-Attribut angepsrochen (und nicht mit dem name-Attribut) Jedes HTML-Element, das vom Skript angesprochen werden soll, erhält das zusätzliche Attribut runat="server" Der Skript-Teil in ASPX ist eigentlich ein compiliertes Programm, daher müssen alle verwendeten Variablen typisiert werden. Hier wurde die Spache JScript eingesetzt; sie hat die größte Ähnlichkeit mit JavaScript und besitzt auch die für unser Beispiel benötigte Funktion eval() (übrigens als einzige der vier verfügbaren Sprachen). Die Eventfunktion heißt nicht onClick() sondern OnServerClick(); das ist notwendig, weil dadurch die bereits früher definierten Clientevents ihren Namen und ihre Funktionalität beibehalten Die Kommunikation der beiden Teile ist bei üblichen HTML-Seiten eine Textkommunikation. die Variablen werden ohne Verschlüsselung zwischen Client und Server transportiert. Diese Schnittstelle ist ohne zusätzliche Maßnahmen leicht angreifbar, weil man auch andere als die dafür vorgesehenen HTML-Seiten als Input verwenden kann und die Parameter verändern kann.