Kapitel 10: ASP.NET SoPra 2008 Kap. 10: ASP.NET (1/25)
Webanwendungen Wie programmiert man Webseiten? Experten für JavaScript, DOM benötigt? Jede dynamische Version jeder Webseite extra erstellen? Spezialanpassungen pro Browser? Experten für PHP, Perl,... benötigt? SoPra 2008 Kap. 10: ASP.NET (2/25)
Webanwendungen Lösung Programmiermodell Trennung von statischen und dynamischen Teilen, Trennung von GUI-Elementen und Anwendungslogik Programmierung in ordentlicher Programmiersprache dazu passende Laufzeitumgebung auf dem Server Laufzeitumgebung generiert HTML/JavaScript SoPra 2008 Kap. 10: ASP.NET (3/25)
Webanwendungen Vorteile Übersichtlich, wartbar, wiederverwendbar Keine Spezialkenntnisse nötig Beliebige Programmiersprachen unterstützt Bibliotheken für (komplexe) Standardelemente Einheitliches Look-and-Feel SoPra 2008 Kap. 10: ASP.NET (4/25)
Das.NET Framework VB C++ C# JScript J# Common Language Specification Windows Forms ASP.NET Web Services.NET Framework Class Library Common Language Runtime Windows Operating System Common Language: Microsoft Intermediate Language Typsystem, Metadaten, plattformunabhängig, Just-in-time Compiler entspricht ungefähr Java Byte Code SoPra 2008 Kap. 10: ASP.NET (5/25)
ASP.NET Framework für Webseiten und Controls (Themes, Skins, Web parts, Master pages) ASP.NET Compiler Benutzerauthentisierung und -autorisierung Unterstützung für Zustandsinformation zwischen Seitenzugriffen Unterstützung für Debugging/Tracing XML Web Services Deployment von Anwendungen AJAX Erweiterungen SoPra 2008 Kap. 10: ASP.NET (6/25)
ASP.NET Trennung von Code und Daten (Code-behind) GUI-Elemente (Controls), statische Teile, html: name.aspx C#-Methoden, Anwendungslogik: name.aspx.cs Zusammenhang über Events name.aspx und name.aspx.cs werden zusammen in.dll kompiliert. URL name.aspx: von.net Framework generierte Seite SoPra 2008 Kap. 10: ASP.NET (7/25)
Beispiel: Calendar.aspx <%@ Page Language="C#" CodeFile="Calendar.aspx.cs" %> <html xmlns="http://www.w3.org/1999/xhtml" > <body> <form id="form1" runat="server"> <asp:label ID="Label1" runat="server" BackColor="#C0FFC0" Font-Bold="True" Font-Size="XX-Large" Text="Mein Calender" Width="216px"> </asp:label> <asp:calendar ID="Calendar1" runat="server" OnSelectionChanged="update"> viele Attribute... </asp:calendar></body></html> SoPra 2008 Kap. 10: ASP.NET (8/25)
ASP.NET ASP.NET Web Controls: Attribut runat="server": Benutzerinteraktion wird zum Server zurückgeschickt (Standard HTML-Attribut) Neue Elemente: asp:label, asp:calendar, asp:updatepanel Neue Attribute: SelectedDayStyle Neue Events: OnSelectionChanged="update" Ajax: z. B. ajaxtoolkit:autocompleteextender SoPra 2008 Kap. 10: ASP.NET (9/25)
Mein Kalender SoPra 2008 Kap. 10: ASP.NET (10/25)
Der Browser erhält...... eine Standard HTML-Seite (ohne spezielle Tags) mit... hidden form für Benutzeraktionen + interner Zustand mit eventtarget, eventargument, viewstate, eventvalidation JavaScript-Methode den Kalender als <table> dopostback (füllt die Form und schickt sie weg) Jeder Tag: <a href="javascript: dopostback( Calendar1, 2330 )" (2330: Anzahl Tage seit 1.1.2000... ) Viele Style-Anweisungen Unterschiedlicher Code pro Browser SoPra 2008 Kap. 10: ASP.NET (11/25)
ASP.NET: Das Objektmodell Webseite = (abgeleitet von) class System.Web.UI.Page Controls (in name.aspx) = Felder im Page-Objekt ID der Control = Name des Feldes Web Control = Objekt/Klasse asp:label = class System.Web.UI.WebControls.Label Attribute = Properties/Felder der Klasse Eventhandler = C#-Methoden SoPra 2008 Kap. 10: ASP.NET (12/25)
Beispiel: Calendar.aspx.cs Die code-behind Datei: using System; using... public partial class Calendar : System.Web.UI.Page { protected void update(object sender, EventArgs e) { this.label1.text = this.calendar1.selecteddate.toshortdatestring(); } } SoPra 2008 Kap. 10: ASP.NET (13/25)
Eine Webseite <% Page... > Inherits= Klassenname Codefile= Dateiname MasterPageFile, Title, StylesheetTheme AutoEventWireup= true : Die Handler für Page events haben einen vordefinierten Namen, Page eventname (true ist der Default) SoPra 2008 Kap. 10: ASP.NET (14/25)
Beispiel: Calendar.aspx.cs Calendar Name der Seite (URL) (selbstdefinierte) Klasse in C# Label1, Calendar1: IDs in.aspx Felder in.cs update Wert von onselectionchanged in.aspx Methode in.cs SoPra 2008 Kap. 10: ASP.NET (15/25)
.NET und IIS.NET Framework aus.aspx und.aspx.cs wird temporäre, reine C# Datei erzeugt. Datei wird kompiliert..net Framework erzeugt HTML code. IIS Arbeitet über die Dateiendung:.aspx ASP.NET wird aufgerufen.htm(l): wird direkt an Browser geschickt SoPra 2008 Kap. 10: ASP.NET (16/25)
Seitenaufruf in ASP.NET SoPra 2008 Kap. 10: ASP.NET (17/25)
Application Life Cycle Beim ersten Aufruf einer Seite: ApplicationManager erzeugt Application Domain zur Trennung verschiedener Anwendungen. In der domain: HostingEnvironment wird erzeugt (mit Pfad zur Anwendung usw.) Für jeden Aufruf einer Seite: HttpContext wird erzeugt mit: HttpRequest (Browser-Anfrage: Parameter, Cookies, Browser Info) HttpResponse (Antwort an den Browser: für die fertige html-seite) HttpApplication wird erzeugt (benutzerdefiniert in Global.asax) Module werden erzeugt (z. B. für Session state) init-methode der Seite wird aufgerufen SoPra 2008 Kap. 10: ASP.NET (18/25)
Page life cycle Die Phasen einer Seite: 1. Page request von ASP.NET behandelt 2. Start Properties werden gesetzt (z. B. IsPostBack) 3. Page initialization Controls werden erzeugt 4. Load Postback Information verarbeiten 5. Validation für validator controls 6. Postback event handling 7. Rendering Seite für Client aufbereiten 8. Unload Seite wurde verschickt SoPra 2008 Kap. 10: ASP.NET (19/25)
Page life cycle Events Die zugehörigen Events: 1. Page PreInit: Mit IsPostBack feststellen, ob erster Seitenaufruf Dynamische Controls erzeugen Master Page und Themes setzen 2. Page Init: Lesen oder Setzen von Control properties 3. Page Load: Lesen und Ändern von Control properties 4. Control events (Button clicks, Formularfelder,... ) 5. Page PreRender: Letzte Änderungen an der Seite 6. Page Unload: Aufräumarbeiten (Logging beenden,... ) SoPra 2008 Kap. 10: ASP.NET (20/25)
WebServices in ASP.NET WebService: HTTP-Protokoll mit XML-Daten: W3C-Standard SOAP = Simple Object Access Protocol Standard zum Aufruf von Methoden und zur Parameterübergabe (sehr verbose) <soap12:envelope...><soap12:body> methode </soap12:body> Kurzform: nicht-standardisiertes XML POST WebService.asmx/getInfos WebService.asmx: URL des Webservice getinfos: aufgerufene Methode Antwort abhängig von Implementierung SoPra 2008 Kap. 10: ASP.NET (21/25)
WebServices in ASP.NET (2) Content-Type: application/json json = JavaScript Object Notation (IETF RFC 4627) Austausch von JavaScript Objekten, Arrays, primitiven Typen: [{ " type":"data", "name":"guck mal!", "file":"blinkeye.gif" }] Ergebnis kann mit eval verarbeitet werden Sicherheit: JavaScript Hijacking SoPra 2008 Kap. 10: ASP.NET (22/25)
WebServices: der Server Endung.asmx: <%@ WebService CodeBehind=".../myService.cs" %> myservice.cs: 1. Annotation für die Klasse: [WebService(Namespace = http://tempuri.org/ )] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1 1)] [System.Web.Script.Services.ScriptService] // Ajax-Extensions! 2. public class myservice : System.Web.Services.WebService 3. Annotation [WebMethod] pro Methode 4. Methode: public ImageInfo[] getimageinfos() {... } ASP.NET transformiert Antwort in XML oder json SoPra 2008 Kap. 10: ASP.NET (23/25)
Session Management Standardmäßig mit Cookies: ASP.NET generiert eindeutigen (temporären) Cookie Set-Cookie: ASP.NET SessionID=bwro13552lt... ; path=/; HttpOnly im Header einer Seite Browser schickt dann Cookie bei jeder Anfrage mit: Cookie: ASP.NET SessionID=bwro13552lt... Cookie wird erst erzeugt, wenn Session State verwendet wird: HttpContext.Current.Session Start event: kann in Session OnStart behandelt werden Timeout nach x Minuten SoPra 2008 Kap. 10: ASP.NET (24/25)
Session State Standardmäßig aktiviert Viele Möglichkeiten... Application state: HttpApplicationState global für die Anwendung, für kleine Datenmengen Session state: HttpSessionState pro Session, für temporäre (sensitive) Daten Profile Properties benutzerspezifisch, persistent Datenbankanschluss SoPra 2008 Kap. 10: ASP.NET (25/25)