Ανάπτυξη εφαρμογών Internet
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Η δομή του Internet
Εφαρμογή
Το επίπεδο εφαρμογής στο Internet καλύπτει τα επίπεδα
εφαρμογής και παρουσίασης του OSI.
Τα πιο συχνά πρωτόκολλα που χρησιμοποιούνται από τους
χρήστες είναι:
- HTTP/HTML
- πρόσβαση στο Web
- FTP
- μεταφορά αρχείων
- SMTP
- μεταφορά email
- POP/IMAP
- ανάγνωση email
- Telnet
- χρήση από απόσταση
Μια σειρά από πρωτόκολλα στο επίπεδο αυτό υποστηρίζουν τη λειτουργία και
τη διαχείριση του δικτύου:
- DNS
- Κατανεμημένος κατάλογος ονομάτων
- SNMP
- Διαχείριση από απόσταση
- BOOTP
- Αρχικό φόρτωμα κώδικα
- RARP
- Αντίστροφη μετατροπή διευθύνσεων
Μεταφορά
Στο επίπεδο της μεταφοράς χρησιμοποιούνται δύο πρωτόκολλα:
- TCP
- Transmission Control Protocol
- UDP
- User Datagram Protoco
Δίκτυο
Στο επίπεδο του δικτύου το Internet Protocol (IP) μαζί με το
Internet Control Message Protocol εξασφαλίζουν τη μεταφορά δεδομένων
από τον αποστολέα στον παραλήπτη.
Το παρακάτω σχήμα παριστάνει τη σχέση ανάμεσα στα διάφορα πρωτόκολλα
του internet:
Αρχιτεκτονική του παγκόσμιου ιστού
- Ο παγκόσμιος ιστός (world wide web)
είναι υλοποιημένες σύμφωνα με το μοντέλο
πελάτη-υπηρέτη (client-server).
- Υπηρέτες ακούν για εντολές του πρωτοκόλλου HTTP
στη θύρα TCP 80 και απαντούν ανάλογα με το περιεχόμενο της εντολής.
- Οι απαντήσεις είναι συνήθως υπερκείμενο (hypertext)
δομημένο σύμφωνα με το πρότυπο HTML.
- Παραπομπές σε άλλες σελίδες ή περιεχόμενο γίνονται με την
τυποποιημένη χρήση των Uniform Resource Locators (URL).
- Τόσο ο πελάτης, όσο και ο υπηρέτης μπορούν να προσαρμόσουν
δυναμικά το περιεχόμενο μιας σελίδας.
Προσδιορισμός στοιχείων με URI
Ο προσδιορισμός στοιχείων στο πρωτόκολλο HTTP
γίνεται με τη χρήση των Uniform Resource Identifiers.
Η χρήση τους επιτρέπει τον προσδιορισμό άλλων σελίδων τοπικά, σε άλλα
μηχανήματα, καθώς και ερωτήσεων:
http://www.spinellis.gr
http://www.altavista.com/cgi-bin/query?pg=q&text=yes&q=link%3akerkis%2emath%2eaegean%2egr%2f%7edspin+%2dhost%3akerkis%2emath%2eaegean%2egr&stq=10&c9k
Το πρωτόκολλο HTTP
Το πρωτόκολλο HTTP υποστηρίζει τις παρακάτω μεθόδους επικοινωνίας:
- GET
- HEAD
- POST
- PUT
- DELETE
- TRACE
Παράδειγμα:
GET /pub/WWW/TheProject.html HTTP/1.1
Host: www.w3.org
Περιγραφή σελίδων με HTML
H HTML είναι μια εφαρμογή της SGML για την περιγραφή σελίδων στο Web.
Περιοχές του κειμένου σημειώνονται με ετικέτες (tags).
Κάθε ετικέτα περιλαμβάνει το όνομά της και παραμέτρους.
Οι ετικέτες γράφονται ως εξής:
<όνομα ετικέτας παράμετροι>
Μια περιοχή του κειμένου μπορεί να σημειωθεί ως εξής:
<ετικέτα>
περιοχή που σημειώνεται
</ετικέτα>
Βασικές ετικέτες που υποστηρίζει η HTML είναι οι παρακάτω:
- HTML
- περιγραφή ολόκληρης σελίδας
- HEAD
- επικεφαλίδα της σελίδας
- BODY
- κείμενο της σελίδας
- H1-H6
- επικεφαλίδες του κειμένου
- P
- αλλαγή παραγράφου
- UL
- λίστα με τελείες
- OL
- αριθμημένη λίστας
- LI
- στοιχείο λίστας
- BR
- αλλαγή γραμμής
- HR
- οριζόντια γραμμή
- IMG
- εικόνα
- A
- (anchor) σημείο πρόσβασης από ή σε υπερκείμενο
- PRE
- προστοιχειοθετημένο κείμενο
- DL, DT, DD
- λίστα περιγραφών, περιγραφές
- I
- πλάγιοι χαρακτήρες
- B
- έντονοι χαρακτήρες
Παράδειγμα σελίδας:
<!doctype html public "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<TITLE>Τίτλος της σελίδας</title>
<META NAME="GENERATOR" CONTENT="thread.pl">
<META NAME="AUTHOR" CONTENT="Diomidis Spinellis">
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=ISO-8859-7">
<LINK REV="made" HREF="mailto:dds@aueb.gr">
<LINK REL="ToC" HREF=".././web/index.htm">
<LINK REV="Subdocument" HREF=".././web/index.htm">
<LINK REL="previous" HREF=".././web/http.htm">
<LINK REL="next" HREF=".././web/cgi.htm">
</HEAD>
<BODY>
<H1>Επικεφαλίδα πρώτου επιπέδου</H1><HR>
Κείμενο που περιέχει ένα σημείο κατάληξης υπερκειμένου
<a name="G42"> (<em>με έντονο κείμενο</em>)</a>
και μια λίστα:
<ul>
<li> στοιχείο 1
<li> στοιχείο 2
</ul>
<p>
Νέα παράγραφος με ένωση υπερκειμένου στο
<A HREF="http://www.aueb.gr">Οικονομικό Πανεπιστήμιο</A>
<HR>
</BODY>
</HTML>
Αυτή θα εμφανιστεί ως εξής:
Επικεφαλίδα πρώτου επιπέδου
Κείμενο που περιέχει ένα σημείο κατάληξης υπερκειμένου
(με έντονο κείμενο)
και μια λίστα:
Νέα παράγραφος με ένωση υπερκειμένου στο
Οικονομικό Πανεπιστήμιο (http://www.aueb.gr)
Χαρακτηριστικά της Java
Κατηγορίες ενεργού περιεχομένου
- Ενεργό περιεχόμενο στον πελάτη
- Ενεργό περιεχόμενο στον εξυπηρετητή
- Υβριδικό μοντέλο
Ενεργό περιεχόμενο στον πελάτη
- Animated GIF files, sound files, movies, ALT tags
- Javascript και DOM
- Macromedia Flash
- Java applets
- Active-X
Επικοινωνία πελάτη εξυπηρετητή
- Εφαρμογές που ακολουθούν το μοντέλο του Web
- Εφαρμογές που χρησιμοποιούν πρωτόκολλο HTTP
- Εφαρμογές που χρησιμοποιούν το πρωτόκολλο TCP/IP
Τρόποι υλοποίησης ενεργού περιεχομένου στον εξυπηρετητή
- Εκτέλεση ανά αίτηση
- Δεξαμενή με διεργασίες ή νήματα
- Χρήση προτύπων σελίδων
- Επεκτάσεις του Web Server
Τεχνολογίες υλοποίησης ενεργού περιεχομένου στον εξυπηρετητή
- Εκτέλεση ανά αίτηση: CGI
- Δεξαμενή με διεργασίες ή νήματα:
- Χρήση προτύπων σελίδων:
- Microsoft Active Server Pages (ASP),
- Sun Java Server Pages (JSP)
- Hypertext Pre-Processor (PHP)
- Επεκτάσεις του Web Server
- NSAPI (Netscape FastTrack)
- ISAPI (Microsoft IIS)
- Apache extension API (mod_*)
Η τεχνολογία CGI
Υλοποίηση
Προβλήματα
- Απόδοση
- Ανίχνευση συνεδρίας
- Στενή σύνδεση της επεξεργασίας με την εμφάνιση
Η τεχνολογία Fast CGI
Υλοποίηση στον εξυπηρετητή
- Μοναδική εκκίνηση
- Mini application server
- FIFO queue
Προβλήματα
- Εργαλεία ανάπτυξης
- Ειδικές βιβλιοθήκες για ανίχνευση συνεδρίας (session afinity)
Παράδειγμα
#!/usr/bin/perl
#load the necessary modules
use Pg;
use CGI qw/:standard/;
use CGI::Fast;
#connect to the database
$conn = Pg::connectdb("dbname=comments host=193.250.160.3\
user=george password=george");
die $conn->errorMessage unless PGRES_CONNECTION_OK eq $conn->status;
#Create a new FastCGI object
#This is the main program loop
while(new CGI::Fast){
$name=param("name");
$email=param("email");
$comments=param("comments");
#insert the record to the database
$query="insert into comments values('".$name."','".$email.\
"','".$comments."')";
$result=$conn->exec($query);
die $conn->errorMessage unless PGRES_COMMAND_OK eq $result->resultStatus;
print "All done OK";
}
#close the connection
$conn->requestCancel;
Η τεχνολογία Servlets
Υλοποίηση
- Java
- Ένα νήμα ανά αίτηση
- Servlet container (JVM + κλάσεις υποστήριξης)
Πλεονεκτήματα
- Κάλυψη συνεδρίας μέσω καθολικών αντικειμένων
- Πρόσβαση σε όλες τις βιβλιοθήκες της Java (JDBC, XML, XSLT, cookies)
- Java Server Pages - Jasper JSP pre-compiler
- Μεταφερσιμότητα
Υποστήριξη
- Tomcat (apache)
- iPlanet
- WebSphere
Παράδειγμα
import java.io.*;
import java.lang.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class comments extends HttpServlet {
Connection con=null;
//This is executed only once during servlet loading
public void init(ServletConfig config) throws ServletException{
super.init(config);
try {
Class.forName("org.postgresql.Driver");
con=DriverManager.getConnection("jdbc:postgresql:comments",
"george","george");
}
catch (ClassNotFoundException e) {
System.out.println("No such class:"+e.getMessage());
}
catch (SQLException s) {
System.out.println("Connection error"+s.getMessage());
}
}
//The function that handles POST requests
public void doPost (HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException{
//Get input parameters
String name=req.getParameter("name");
String email=req.getParameter("email");
String comments=req.getParameter("comments");
PrintWriter out=res.getWriter();
res.setContentType("text/html");
//Insert the record into the database
try {
Statement stmt=con.createStatement();
stmt.execute("INSERT INTO comments values('"+name+"','"+email+
"','"+comments+"')");
out.println("All done ok");
}
catch (SQLException s) {
out.println("Connection error"+s.getMessage());
}
finally {
out.println("</BODY></HTML>");
}
}
//GET and POST requests are handled in the same way
public void doGet (HttpServletRequest req, HttpServletResponse res)
throws ServletException,IOException{
doPost (req,res);
}
//Only called when the servlet is unloaded
public void destroy() {
try {
con.close();
}
catch (SQLException s) {
System.out.println("Connection error"+s.getMessage());
}
}
Η τεχνολογία PHP
Παρόμοια αυστήματα
Χαρακτηριστικά PHP
- Σελίδες που περιέχουν HTML και κώδικα PHP
- Η γλώσσα περιέχει στοιχεία από την Perl και τη C
- Πλούσιες βιβλιοθήκες
- Πρόσβαση σε ΒΔ
- Γραφικά
- Ανίχνευση συνεδρίας
- Μεταφορά αρχείων
- Δημιουργία PDF
- Email
- Εκτέλεση ώς Apache extension (mod_php) ή CGI
Παράδειγμα (PHP 4)
<?php
$db = pg_pconnect ("host=localhost dbname=comments user=george password=george");
$update="insert into comments(name,email,comment) values ('$name','$email','$comments')";
echo $name,$email,$comments;
pg_exec ($db,$update);
?>
Παράδειγμα (PHP 5)
<?php
if(isset($HTTP_POST_VARS['name']) $name=$HTTP_POST_VARS['name'];
if(isset($HTTP_POST_VARS['email']) $name=$HTTP_POST_VARS['email'];
if(isset($HTTP_POST_VARS['comments']) $name=$HTTP_POST_VARS['comments'];
$db = pg_pconnect ("host=localhost dbname=comments user=george password=george")
or die("Couldn't Connect to the database") ;
$update = "insert into comments(name,email,comment) values ('$name','$email','$comments')";
echo $name,$email,$comments;
if (!pg_exec($db,$update))
echo "There was a problem with the sql statement" ;
else
echo "SQL Excecuted Successfully" ;
?>
API εξυπηρετητή
Υλοποιήσεις
- NSAPI (Netscape)
- ISAPI (Microsoft)
- Apache API (apache)
Μεταφορά δεδομένων
Μεταφορά δεδομένων από τον πελάτη στον εξυπηρετητή μέσω HTTP μπορεί να γίνει με
τους παρακάτω τρόπους:
- URL
http://www.amazon.com/exec/obidos/shopping-basket/ref=top_nav_sb_gateway/103-2141875-9969416)
- POST
POST http://www.amazon.com/exec/obidos/search-handle-form/103-2141875-9969416 HTTP/1.0
...
url=index%3Daps&field-keywords=java+enterprise&explorer-type=gift&Go.x=10&Go.y=10
- Cookie
GET http://www.amazon.com
...
Cookie: ubid-main=430-7602259-8325423; x-main=hQFiIxHUFj8mCscT@Yb5Z7xsVsOFQjBf;session-id=103-2141875-9969416; session-id-time=1038902400; obidos_path_continue-shopping=continue-shopping-url=/subst/home/home.html/103-2141875-9969416&continue-shopping-post-data=&continue-shopping-description=generic.gateway.default
Υλοποίηση συνεδρίας
- Αποθήκευση όλων των πληροφοριών στο URL
- Αποθήκευση κωδικού συνεδρίας στο URL
- Αποθήκευση όλων των πληροφοριών σε cookie
- Αποθήκευση κωδικού συνεδρίας σε cookie
Παραδείγματα URL:
http://www.driveme.gr/Athens/AthensMap.ASP?wcu=$cmd=2$id=4_2000_11_09_08_00_20_296
http://www.perseus.tufts.edu/cgi-bin/perscoll?collection=Perseus:collection:Greco-Roman
http://terraserver.microsoft.com/GetPageByXY.asp?XId=9782&YId=12293&SrcId=2&ImgDate=05/17/1992&ImgSize=2&DSize=0
Παραδείγματα cookies:
bbs.cordis.lu FALSE / FALSE 2137621534 CFID 47215
bbs.cordis.lu FALSE / FALSE 2137621534 CFTOKEN 18919068
.harvard.edu TRUE / FALSE 2051222305 SITESERVER ID=7f29e95efe695b0ab41c161acdfb0163
search.support.microsoft.com FALSE / FALSE 1019403742 AnswerWiz 1=serial+mouse+detection&Count=1
search.support.microsoft.com FALSE / FALSE 1019403742 Params S=F&VR=http%3A%2F%2Fsupport%2Emicrosoft%2Ecom%2Fsupport%3Bhttp%3A%2F%2Fsupport%2Emicrosoft%2Ecom%2Fservicedesks%2Fwebcasts%3Bhttp%3A%2F%2Fsupport%2Emicrosoft%2Ecom%2Fhighlights&KT=ALL&FR=0&HSL=0&LN=EN%2DUS&FSL=0&TSL=0&A=T&SD=GN&SPR=W95&PSL=0&LQ=serial+mouse+detection&T=B&T1=7d&DU=C
search.support.microsoft.com FALSE / FALSE 1019403742 Global LN=EN%2DUS
Απλοί κανόνες
- Κράτα τα συχνά χρησιμοποιούμενα δεδομένα σε μέσα γρήγορης πρόσβασης
- Κράτα τα δεδομένα κοντά στον τόπο χρήσης τους
- Κράτα τοπικά αντίγραφα των δεδομένων όπου είναι δυνατό
- Μην αφήνεις να δημιουργούνται σημεία συνωστισμού
- Ελαχιστοποίησε την ανάγκη για καθολική γνώση της κατάστασης του συστήματος
- Κράτα συγγενή δεδομένα στον ίδιο τόπο
- Εξέτασε τη δυνατότητα χρήσης εξειδικευμένων εξυπηρετητών
- Χρησιμοποίησε στην κατάλληλη για τις ανάγκες τεχνολογία
- Χρησιμοποίησε παράλληλες τεχνικές επεξεργασίας
- Εκμεταλλεύσου τεχνικές συμπίεσης
- Σχεδίασε το σύστημα με την αποτυχία στο νου
- Ελαχιστοποίησε το χρόνο απόκρισης
- Σχεδίασε από την αρχή την ασφάλεια του συστήματος
Βιβλιογραφία
- The
perl-apache intergration project.
Available online http://perl.apache.org.
- Bouchaib Bahli and
Dany Di Tullio.
Web
engineering: An assessment of empirical research.
Communications of AIS, 12(14), 2003.
- T. Berners-Lee and D. Connolly.
RFC 1866: Hypertext Markup
Language — 2.0, November 1995.
- T. Berners-Lee,
L. Masinter, and M. McCahill.
RFC 1738: Uniform Resource
Locators (URL), December 1994.
- S.B. Subrhamanya B.M. Subraya.
Object driven performance testing of web applications.
In First Asia-Pacific conference on Quality Software. IEEE,
2000.
- R. Braden.
RFC 1122: Requirements for
Internet hosts — communication layers, October 1989.
See also STD3 [STD0003].
- R. Braden.
RFC 1123: Requirements for
Internet hosts — application and support, October 1989.
See also STD3 [STD0003].
- Microsoft Corporation.
The component object model specification.
Technical report, Microsoft Corporation, Redmond, WA, USA, October 1995.
- R. Fielding,
J. Gettys, J. Mogul, H. Frystyk, T. Berners-Lee, et al.
RFC 2068: Hypertext transfer
protocol — HTTP/1.1, January 1997.
- Piero Fraternali.
Tools and approaches for developing data-intensive web applications: A survey.
ACM Computing Surveys, 31(9):227–263, September 1999.
- Giorgos Gousios
and Diomidis Spinellis.
A comparison of portable dynamic web content technologies for the apache
web server.
In Proceedings of the 3rd International System Administration and
Networking Conference SANE 2002, pages 103–119, Maastricht, The
Netherlands, May 2002.
Best refereed paper award.
- Stefanos
Gritzalis and Diomidis Spinellis.
Addressing threats and security issues in World Wide Web
technology.
In Proceedings CMS '97 3rd IFIP TC6/TC11 International joint working
Conference on Communications and Multimedia Security, pages 33–46,
Athens, Greece, September 1997. IFIP, Chapman & Hall.
- Elisabeth
Hendrickson and Martin Fowler.
The software engineering of internet software.
IEEE Software, 19(2):23–24, March/April 2002.
- Arun Ivengar, Jim
Challerger, and Paul Dantzing.
High-performance web design techniques.
IEEE Internet Computing, March-April 2000.
- The
jakarta project.
Available online http://jakarta.apache.org.
- K. N. King.
Java
Programming: from the Beginning, pages 1–38.
W. W. Norton & Company, New York, NY, USA, 2000.
- Evangelia Kopanaki,
Vangelis Karkaletsis, Constantine D. Spyropoulos, Nikos Avradinis, Nikos
Fakotakis, Theodore Kalamboukis, Basilis Kladis, Yannis Lazarou, Themis
Panayiotopoulos, and Diomidis Spinellis.
MITOS: An integrated web-based system for information management ( http://www.spinellis.gr/pubs/conf/2001-EPY-Mitos/html/mitos.html).
In 8th Panhellenic Informatics Conference, Nicosia, Cyprus,
November 2001. Greek Computer Society.
- E. Krol.
RFC 1118: Hitchhikers guide to
the Internet, September 1989.
- Mike Morrison, Joline
Morrison, and Anthony Keyes.
Integrating web sites and databases.
Communications of the ACM, 45(9):81–86, September 2002.
- Object
Management Group, Inc.
The common object request broker: Architecture and specification, July 1996.
Revision 2.0 (Updated).
- J. Postel.
RFC 768: User Datagram
Protocol, August 1980.
See also STD6 [STD0006].
- J. Postel.
RFC 774: Internet protocol
handbook: Table of contents, October 1980.
Obsoletes RFC0766 [RFC0766].
- J. Postel.
RFC 791: Internet
protocol, September 1981.
Obsoletes RFC0760 [RFC0760].
- J. Postel.
RFC 792: Internet control
message protocol, September 1981.
Obsoletes RFC0777 [RFC0777]. See also STD5 [STD0005].
- J. Postel.
RFC 793: Transmission Control
Protocol, September 1981.
See also STD7 [STD0007]. Updates RFC0761 [RFC0761].
- Konstantinos Raptis,
Diomidis Spinellis, and Sokratis Katsikas.
Multi-technology distributed objects and their integration ( http://www.spinellis.gr/pubs/jrnl/2001-CSI-Components/html/imtd.html).
Computer Standards & Interfaces, 23:157–168, July 2001.
- Jesse Reisman.
Web site design: Less
is more.
IT Professional, 1(5):63–64, September/October 1999.
- J. Siegel.
A preview of CORBA 3.
Computer, 32(5):114–116, May 1999.
- Shikharesh Majumdar
Sucheta Nandipalli.
Techniques for achieving high performance web servers.
In International Conference for Parallel Processing. IEEE, 2000.
- Sun
Microsystems Inc.
Java remote
method invocation specification.
Available online http://java.sun.com/docs/guide/rmi/spec/rmiTOC.html/ (February
2002), December 1999.
Revision 1.7, Java 2 SDK, Standard Edition, v1.3.0.
- Jason Hunter with
William Crawford.
Java Servlet Programming.
O' Reilly, 2001.