Windows Programming Web Forms
Web Forms Μια νέα μόδα στην πληροφορική είναι «Κάνε αυτό το λογισμικό να είναι προσβάσιμο μέσω του Διαδικτύου» Παραδείγματα: ebay.com, amazon.com κ.α. Οι κύριες πλατφόρμες για την επίτευξη αυτού του στόχου είναι JSP, PHP, .ASP .NET, Coldfusion
J2EE VS. .NET .NET J2EE Χαρακτηριστικό C# Java Η C# και η Java προέρχονται από την C++ συντακτικά, και από την Lisp σε σκέψη. Αρκετές σημαντικές λειτουργίες (garbage collection, ιεραρχικά namespaces, exceptions, classes, structs) προήλθαν από την Lisp. Η C# δανείστηκε κάποια από τα component στοιχεία των JavaBeans (properties, attributes, events κ.λ.π.), προσθέτει μερικά δικά της (μεταδεδομένα), αλλά μας επιτρέπει να τα χρησιμοποιήσουμε με διαφορετική σύνταξη. Η Java τρέχει σε οποιαδήποτε πλατφόρμα με JVM. Η C# τρέχει σε οποιαδήποτε πλατφόρμα έχει λογισμικό που να υποστηρίζει τα ECMA πρότυπα της C# και του .NET. Η C# μεταγλωττίζεται σε IL. Κατόπιν, μεταγλωτίζεται περαιτέρω σε native code της εκάστοτε πλατφόρμας. Η Java τρέχει σαν JVM bytecodes, το οποίο είτε ερμηνέυεται στη Virtual Machine είτε γίνεται JIT compiled, ή επίσης μπορεί να μεταγλωττιστεί εξόλοκλήρου σε native code. .NET SDK Java API Τα high level .NET components περιλαμβάνουν υποστήριξη για κατανεμημένη πρόσβαση μέσω XML, SOAP και ADO+ ASP .NET JSP Ο ASP.Net κώδικας μπορεί να γραφεί σε VB,C# και σε άλλες γλώσσες που υποστηρίζουνε μεταγλώττιση σε IL. Το JSP χρησιμοποιεί Java Κώδικα, μεταγλωττισμένο σε bytecodes (είτε κατ’απαίτηση, είτε κατά ομάδες αρχείων)
J2EE VS .NET .NET J2EE Χαρακτηριστικό IL CLR JVM Το .NET CLR επιτρέπει συγγραφή κώδικα σε διάφορες γλώσσες. Το JVM επιτρέπει σε Java bytecodes να τρέξουνε σε οποιαδήποτε πλατφόρμα που έχει εγκατεστημένο το JVM. COM, SOAP CORBA Το .ΝΕΤ προάγει τη χρήση του SOAP ενώ η JAVA τη χρήση του CORBA για υποδομή επικοινωνίας μεταξύ απομακρυσμένων υπηρεσιών. Το SOAP είναι ένα standard πρωτόκολλο, ενώ το CORBA, όπως και η JAVA είναι ιδιόκτητος μηχανισμός. WEB Forms Java Swing Στο J2EE, τα web components που είναι βασισμένα σε JSP είναι διαθέσιμα σε standard πλατφόρμα, μόνο μέσω Java IDE. Τα Win Forms και τα Web Forms υποστηρίζονται μέσω Visual Studio και εν μέρει μέσω άλλων εργαλείων. Υποστήριξη για το Java Swing υπάρχει σε πολλά Java IDE και εργαλεία. ADO .NET JDBC, EJB Τα EJB και JDBC αφήνουν το πρωτόκολλο μεταφοράς δεδομένων στη διακριτική ευχέρεια του προγραμματιστή. WEB Services Τα .NET Web Services χρησιμοποιούν το SOAP σαν το μοντέλο επικοινωνίας
Γενικά Οι browsers και οι web servers επικοινωνούνε με ένα πρωτόκολλο που ονομάζεται HTTP, που σχεδιάστηκε στην Ελβετία. http://www.w3.org/Protocols/rfc2068/rfc2068 Όταν ένας χρήστης ζητάει να πλοηγηθεί σε μια σελίδα, π.χ. στην http://www.studentguru.gr, τότεο η DNS υπηρεσία επιστρέφει την IP διεύθυνση του δικτυακού τόπου, και στέλνεται στο web server το ακόλουθο HTTP αίτημα: GET / HTTP/1.1 Accept: */* Accept-Language: el-GR Accept-Encoding: gzip, deflate If-Modified-Since: Wed, 24 Oct 2001 14:12:36 GMT If-None-Match: "50b0d3ee955cc11:a78" User-Agent: Mozilla/4.0.(compatible; MSIE.6.0; Windows NT 5.1) Host: www.studentguru.gr Connection: Keep-Alive Κενή γραμμή
Γενικά, 2 Ο Web Server δέχεται το αίτημα, προσπαθεί να βρει τη ζητούμενη σελίδα και, αν τη βρει τότε δημιουργεί μια απάντηση που στέλνεται πίσω στον browser. HTTP/1.1 200 OK Server: Microsoft-IIS/6.0 Date: Wed, 24 Oct 2001 14:12:37 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Wed, 24 Oct 2001 14:00:53 GMT ETag: "d02acf81975cc11:a78" Content-Length: 46 [blank line] <html> <body> Hello, world </body> </html>
Γενικά, 3
Επεξεργασία στο server
Λύση με ASP Η ASP είναι ένα προγραμματιστικό μοντέλο που περιλαμβάνει διάφορα αντικείμενα, όπως το Application, Request, Server, Session, ObjectContext και ASPError. Όταν γίνεται μια αίτηση για μια σελίδα, τότε μια διεργασία στο server (asp.dll) επεξεργάζεται τη σελίδα και εκτελεί όλα τα script που υπάρχουνε σε αυτή. Τα scripts δέχονται είσοδο από το αντικείμενο Request, επεξεργάζονται το αίτημα, και ‘γράφουνε’ στην έξοδο μια απάντηση σε HTML μέσω του αντικειμένου Response. <%@ Language="VBScript" %> <html> <body> <form> <input type="text" name="op1" value="<%= Request ("op1") %>"/> + <input type="text" name="op2" value="<%= Request ("op2") %>" /> <input type="submit" value=" = " /> <% If Request ("op1") <> "" And Request ("op2") <> "" Then a = CInt (Request ("op1")) b = CInt (Request ("op2")) Response.Write (CStr (a + b)) End If %> </form> </body> </html>
Προβλήματα με την ASP Η ASP είναι αργή επειδή τα scripts ερμηνεύονται, δεν μεταγλωττίζονται. Σε κάθε σελίδα, υπάρχει ένα μείγμα από γλώσσες. Η ASP δεν είναι αντικειμενοστραφής Για να δημιουργηθούνε σελίδες με εξειδικευμένες λειτουργίες, κάποιος χρειάζεται να γράψει COM αντικείμενα, η συγγραφή των οποίων είναι αρκετά δύσκολη.
ASP .NET Ας δούμε κώδικα για ένα online υπολογιστή. <html> <body> <form runat="server"> <asp:TextBox ID="op1" RunAt="server" /> + <asp:TextBox ID="op2" RunAt="server" /> <asp:Button Text=" = " OnClick="OnAdd" RunAt="server" /> <asp:Label ID="Sum" RunAt="server" /> </form> </body> </html> <script language="C#" runat="server"> void OnAdd (Object sender, EventArgs e) { int a = Convert.ToInt32 (op1.Text); int b = Convert.ToInt32 (op2.Text); Sum.Text = (a + b).ToString (); } </script>
Όταν εκτελείται ο κώδικας, παίρνουμε <html> <body> <form name="_ctl0" method="post" action="Calc.aspx" id="_ctl0"> <input type="hidden" name="__VIEWSTATE" value= very large number /> <input name="op1" type="text" value="33" id="op1" /> + <input name="op2" type="text" value="33" id="op2" /> <input type="submit" name="_ctl1" value=" = " /> <span id="Sum">66</span> </form> </body> </html> Σημειώστε ότι η απάντηση είναι HTML. Στο .ΝΕΤ, τα server controls μπορούν να δημιουργήσουν HTML, αλλά μπορούν να έχουν συναρτήσεις, ιδιότητες και events και μεταγλωττίζονται.
Μοντέλο προγραμματισμού στα Web Forms Οι σελίδες γράφονται με ένα συνδυασμό από HTML και ASP controls, στα οποία είναι πολύ εύκολη η αλλαγή ιδιοτήτων τους. Τα server controls έχουν κάποια events τα οποία μπορούν να τα ‘ακούνε’ κάποια script που εκτελούνται στο server (server-side scripts). Τα server side scripts μεταγλωττίζονται σε IL και εκτελούνται από το CLR, με άμεσο αποτέλεσμα οι ASP .Net σελίδες να τρέχουνε πιο γρήγορα από τις αντίστοιχες σε ASP.
Μοντέλο προγραμματισμού στα Web Forms, 2 Τα server και τα HTML controls έχουνε κάποια events τα οποία επεξεργάζονται κάποιες ειδικές μέθοδοι. Οι σελίδες είναι αντικείμενα, τα οποία δημιουργούνται και περιέχουνε ιδιότητες και συναρτήσεις. Όταν φορτώνει μια σελίδα, γίνονται τα παρακάτω βήματα: Ένα προσωρινό αρχείο δημιουργείται που περιέχει ένα αντικείμενο της σελίδας (η οποία κληρονομεί το System.Web.UI.Page) Η ASP .NET αντιγράφει τον κώδικα στο αρχείο στο αντικείμενο. Μέθοδοι στο <script> τμήμα σε ένα αρχείο γίνονται μέθοδοι της σελίδας. Με την προσθήκη των μεθόδων, η ASP .NET μεταγλωττίζει την κλαση και τοποθετεί το παραγόμενο DLL σε ένα φάκελο συστήματος. Το DLL παραμένει εκεί έτσι ώστε τα βήματα 1 και 2 δεν θα χρειαστεί να επαναληφθούν εκτός κι αν αλλάξουνε τα περιεχόμενα του ASPX αρχείου.
Μοντέλο προγραμματισμού στα Web Forms, 3 Τα περιεχόμενα της κλάσης - σελίδας
Μοντέλο προγραμματισμού στα Web Forms, 4 Το αντικείμενο της σελίδας που έχει δημιουργηθεί ξεκινάει την εκτέλεσή του με το να κάνει fire μια σειρά από events, όπως το Init και το Load. Αυτά τα events μπορούν να επεξεργαστούν από server side scripts. Events όπως το Page.Load μπορούν να συσχετιστούν με συγκεκριμένες συναρτήσεις που θα τα επεξεργαστούν. Η Page.Init χρησιμοποιείται για να δημιουργηθούν controls και να προστεθούν δυναμικά στη σελίδα void Page_Init (Object sender, EventArgs e) { EqualsButton.Click += new EventHandler (OnAdd); }
Directives της σελίδας Υπάρχουνε εντολές που προσδιορίζουνε ιδιότητες της σελίδας, καθώς και οδηγίες προς τον μεταγλωττιστή. Αυτές οι οδηγίες (directives) είναι αναγκαίες επειδή κάποιες διαδικασίες δεν μπορούν να προσδιοριστούν ούτε σε HTML ούτε και σε κάποιο script. Κάθε εντολή μπορεί να προσδιορίζει ιδιότητες, π.χ. Η οδηγία @Page μπορεί να δώσει τιμή σε 27 ιδιότητες όπως Buffer, ClassName, ClientTarget, κ.λ.π. Κάποιες άλλες εντολές είναι πιο απλές, όπως <% @Imports namespace = “aNameSpace%> <% @Implements interface = “anInterface %> <% @Assembly name | Src = String %> <% @Reference page | control = pathToFile %>
Directives της σελίδας, 2 Είναι σημαντική η κατανόηση αυτών των οδηγιών. Η σωστή χρήση τους μπορεί να δώσει μεγάλη ώθηση στην απόδοση του δικτυακού τόπου. Για παράδειγμα <%@ Page Language="C#" %> <%@ OutputCache Duration="60" VaryByParam="None" %> <html> <body> Today is <%= DateTime.Now.ToLongDateString () %> </body> </html> Εφόσον η μέρα αλλάζει κάθε 24 ώρες, επανεκτέλεση της σελίδας κάθε φορά που γίνεται αίτημα για αυτή θα ήτανε μεγάλη σπατάλη. Η οδηγία OutputCache κρατάει τη σελίδα στη μνήμη για την διάρκεια που προσδιορίζεται στην οδηγία. Επίσης, η cache μνήμη μπορεί να κρατάει πολλές εκδόσεις, με την κάθε μία να διαχωρίζεται από τις άλλες με βάση την είσοδο. Μια web form με είσοδο πόλη και νομό, που επιστρέφει μια εικόνα από βάση δεδομένων, μπορεί να στείλει διαφορετικές φωτογραφίες αν τα πεδία πόλη και περιοχή είναι μεταβλητές, με τον ακόλουθο τρόπο <%@ OutputCache Duration="3600" VaryByParam="city;state" %>