ΣΔΥΝΟΛΟΓΗΚΟ ΔΚΠΑΗΓΔΤΣΗΚΟ ΗΓΡΤΜΑ ΑΝ. ΜΑΚΔΓΟΝΗΑ ΚΑΗ ΘΡΑΚΖ ΣΜΖΜΑ ΓΗΟΗΚΖΖ ΔΠΗΥΔΗΡΖΔΩΝ ΠΣΤΥΗΑΚΖ ΔΡΓΑΗΑ ΒΑΖ ΑΝΑΕΖΣΖΖ ΑΓΝΟΟΤΜΔΝΩΝ

Σχετικά έγγραφα
ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

Η αξρή ζύλδεζεο Client-Server

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

Κεθάλαιο 1. Ενόηηηα 2 Πλάνο Μάρκεηινγκ. Εξγαιεία Μάξθεηηλγθ. Dr. Andrea Grimm Dr. Astin Malschinger

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

Ενδεικτικά Θέματα Στατιστικής ΙΙ

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν

Constructors and Destructors in C++

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) FritzBox Fon WLAN Annex B ( )

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

ΒΗΜΑ 2. Εηζάγεηε ηνλ Κωδηθό Πξόζβαζεο πνπ ιακβάλεηε κε SMS & δειώλεηε επηζπκεηό Όλνκα Πξόζβαζεο (Username) θαη ην ζαο

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

ΛΙΜΝΗ ΤΣΑΝΤ. Σρήκα 1. Σρήκα 2

Α Ο Κ Η Α Μ Α Ζ Η Η Ρ Η ( S E A R C H )

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

Οδηγίες τρήζης για λειηοσργία μεηαθοράς καναλιών ζε υηθιακό δέκηη OST-7060 HD

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

Οργάνωση και Δομή Παρουσιάσεων

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

Η/Υ A ΤΑΞΕΩΣ ΑΕ Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

ΔΡΓΑΙΑ 1. Γιαδικησακά πληροθοριακά σζηήμαηα. Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές. ηέθανος Κονηοβάς ΑΔΜ :283. Πάζτος Βαζίλειος ΑΔΜ :288

Σημεία Ασύπματηρ Ππόσβασηρ (Hot-Spots)

ΕΓΧΕΙΡΙΔΙΟ ΕΚΔΟΗ 8.0.0

Έκδοζη /10/2014. Νέα λειηοσργικόηηηα - Βεληιώζεις

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

ΑΠΛΟΠΟΙΗΗ ΛΟΓΙΚΩΝ ΤΝΑΡΣΗΕΩΝ ΜΕ ΠΙΝΑΚΕ KARNAUGH

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

ΣΡΑΠΕΖΑ ΘΕΜΑΣΩΝ Α ΛΤΚΕΙΟΤ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

Μορθές Κακόβοσλοσ Κώδικα (Malicious Code)

α) ηε κεηαηόπηζε x όηαλ ην ζώκα έρεη κέγηζην ξπζκό κεηαβνιήο ζέζεο δ) ην κέγηζην ξπζκό κεηαβνιήο ηεο ηαρύηεηαο

x-1 x (x-1) x 5x 2. Να απινπνηεζνύλ ηα θιάζκαηα, έηζη ώζηε λα κελ ππάξρνπλ ξηδηθά ζηνπο 22, 55, 15, 42, 93, 10 5, 12

Σύνθεζη ηαλανηώζεων. Έζησ έλα ζώκα πνπ εθηειεί ηαπηόρξνλα δύν αξκνληθέο ηαιαληώζεηο ηεο ίδηαο ζπρλόηεηαο πνπ πεξηγξάθνληαη από ηηο παξαθάησ εμηζώζεηο:

5 η Δργαζηηριακή Άζκηζη Κσκλώμαηα Γσαδικού Αθροιζηή/Αθαιρέηη

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

B-Δέλδξα. Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν.

Ηλεκηπονικά Απσεία και Διεπαθέρ

4) Να γξάςεηε δηαδηθαζία (πξόγξακκα) ζηε Logo κε όλνκα θύθινο πνπ ζα ζρεδηάδεη έλα θύθιν. Λύζε Γηα θύθινο ζηθ επαλάιαβε 360 [κπ 1 δε 1] ηέινο

Φςζική Πποζαναηολιζμού Γ Λςκείος. Αζκήζειρ Ταλανηώζειρ 1 ο Φςλλάδιο

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ. 3. Έλαο θαηαρσξεηήο SISO ησλ 4 bits έρεη: α) Μία είζνδν, β) Δύν εηζόδνπο, γ) Σέζζεξεηο εηζόδνπο.

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 4 ΣΥΝΔΥΑΣΤΙΚΑ ΚΥΚΛΩΜΑΤΑ

ύζηεκα Ωξνκέηξεζεο Πξνζσπηθνύ (Έθδνζε 2) ΤΠΗΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΩΝ ΤΣΗΜΑΣΩΝ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

Πολυεπίπεδα/Διασυμδεδεμέμα Δίκτυα

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

ΜΑΘΗΜΑΣΑ ΦΩΣΟΓΡΑΦΙΑ. Ειζαγωγή ζηη Φωηογραθία. Χριζηάκης Σαζεΐδης EFIAP

ΘΔΜΑ 1 ο Μονάδες 5,10,10

Δπαστηπιότητα 1 - ανάπτςξη, μεταγλώττιση, αποσυαλμάτωση και. εκτέλεση ππογπάμματορ

ΙΣΤΟΡΙΑ ΤΟΥ ΑΡΧΑΙΟΥ ΚΟΣΜΟΥ

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

ΦΤΛΛΟ ΔΡΓΑΙΑ 1 Βαζηθέο Έλλνηεο & Καηεγνξίεο Γηθηύσλ Τπνινγηζηώλ

ΔΕΟ 13. Ποσοτικές Μέθοδοι. θαη λα ππνινγίζεηε ην θόζηνο γηα παξαγόκελα πξντόληα. Να ζρεδηαζηεί γηα εύξνο πξντόλησλ έσο

ΗΥ-150 Πξνγξακκατησκόο Ταμηλόκεσε θαη Αλαδήτεσε

Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο:

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

ΟΣΑ Επηρεηξεζηαθή Ννεκνζύλε. Ελόηεηα: Ad1.2.2 «Ση θξύβεηαη» πίζω από κηα Επηρεηξεζηαθή Αλαθνξά (report): XML & XSD γηα αξράξηνπο

ΣΡΑΠΕΖΑ ΘΕΜΑΣΩΝ Α ΛΤΚΕΙΟΤ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Γ Γυμνασίου ΥΟΛΕΙΟ..

Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

Διαδικαζία μεηαθοράς δεδομένων Εκκαθαριζηικής για ηο Eιδικό ζημείωμα περαίωζης Φ.Π.Α

iii. iv. γηα ηελ νπνία ηζρύνπλ: f (1) 2 θαη

ΑΝΤΗΛΙΑΚΑ. Η Μηκή ζθέθηεθε έλαλ ηξόπν, γηα λα ζπγθξίλεη κεξηθά δηαθνξεηηθά αληειηαθά πξντόληα. Απηή θαη ν Νηίλνο ζπλέιεμαλ ηα αθόινπζα πιηθά:

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

Διαηιμήζεις για Αιολικά Πάρκα. Κώδικες 28, 78 και 84

Δξγαιεία Καηαζθεπέο 1 Σάμε Σ Δ.Κ.Φ.Δ. ΥΑΝΙΧΝ ΠΡΧΣΟΒΑΘΜΙΑ ΔΚΠΑΙΓΔΤΗ. ΔΝΟΣΗΣΑ 11 ε : ΦΧ ΔΡΓΑΛΔΙΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Φαθόο κε ζσιήλα.

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ

Κβαντικοί Υπολογισμοί. Πέκπηε Γηάιεμε

Intel Accelerate Your Code

Σρήκα Α. Γξάθνπκε ηα ζηνηρεία ηνπ Πξνκεζεπηή θαη παηάκε Δηζαγσγή. Σρήκα Β1

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική ΑΔ

Άσκηση 1 - Μοπυοποίηση Κειμένου

"Εθαξκνγέο Δηαδηθηύνπ"

ΠΑΝΔΛΛΑΓΗΚΔ ΔΞΔΣΑΔΗ Γ ΣΑΞΖ ΖΜΔΡΖΗΟΤ ΓΔΝΗΚΟΤ ΛΤΚΔΗΟΤ ΚΑΗ ΔΠΑΛ ΣΔΣΑΡΣΖ 25 ΜΑΨΟΤ 2016 ΔΞΔΣΑΕΟΜΔΝΟ ΜΑΘΖΜΑ: ΑΡΥΔ ΟΗΚΟΝΟΜΗΚΖ ΘΔΧΡΗΑ ΠΡΟΑΝΑΣΟΛΗΜΟΤ - ΔΠΗΛΟΓΖ

ΔΠΙΣΡΟΠΗ ΓΙΑΓΩΝΙΜΩΝ 74 ος ΠΑΝΔΛΛΗΝΙΟ ΜΑΘΗΣΙΚΟ ΓΙΑΓΩΝΙΜΟ ΣΑ ΜΑΘΗΜΑΣΙΚΑ Ο ΘΑΛΗ 19 Οκηωβρίοσ Δνδεικηικές λύζεις

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη: Εσθύγραμμη Κίνηζη

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

6 η Εργαζηηριακή Άζκηζη Επαλήθεσζη Λειηοσργίας Βαζικών Φλιπ-Φλοπ

Εγκατάσταση του πακέτου XAMPP. Β Τεχνική Σχολή Λεμεςοφ Σχολική χρονιά Άριςτοσ Παςιάσ

Μονοψϊνιο. Αγνξά κε ιίγνπο αγνξαζηέο. Δύναμη μονοψωνίος Η ηθαλόηεηα πνπ έρεη ν αγνξαζηήο λα επεξεάζεη ηελ ηηκή ηνπ αγαζνύ.

EL Eνωμένη στην πολυμορυία EL A8-0046/319. Τροπολογία

ΑΓΩΜΘΡΘΙΞΘ ΤΩΠΞΘ ΡΘΡ ΛΘΙΠΕΡ ΗΚΘΙΘΕΡ ΛΘΤΑΗΚΘΔΗΡ Τ.

ΔΦΑΡΜΟΜΔΝΑ ΜΑΘΗΜΑΣΙΚΑ ΣΗ ΧΗΜΔΙΑ Ι ΘΔΜΑΣΑ Α επηέκβξηνο Να ππνινγηζηνύλ νη κεξηθέο παξάγσγνη πξώηεο ηάμεο ηεο ζπλάξηεζεο f(x,y) =

1 Είζοδορ ζηο Σύζηημα ΣΔΕΔ ή BPMS


Οδηγίες Ασφρματης Πρόσβασης (Wi-Fi) στο Διαδίκτυο

Transcript:

ΣΔΥΝΟΛΟΓΗΚΟ ΔΚΠΑΗΓΔΤΣΗΚΟ ΗΓΡΤΜΑ ΑΝ. ΜΑΚΔΓΟΝΗΑ ΚΑΗ ΘΡΑΚΖ ΣΜΖΜΑ ΓΗΟΗΚΖΖ ΔΠΗΥΔΗΡΖΔΩΝ ΠΣΤΥΗΑΚΖ ΔΡΓΑΗΑ ΒΑΖ ΑΝΑΕΖΣΖΖ ΑΓΝΟΟΤΜΔΝΩΝ ΥΑΡΑΛΑΜΠΟ ΣΑΞΗΓΖ (Α.Δ.Μ.: 2525) ΔΠΟΠΣΖ ΚΑΘΖΓΖΣΖ ΥΑΣΕΖ ΒΑΗΛΔΗΟ Μάιορ 2015

ΔΤΥΑΡΗΣΖΡΗΟ ΖΜΔΗΩΜΑ Ιδηαίηεξα ζα ήζεια λα επραξηζηήζσ ηνλ επηβιέπνληα θαζεγεηή κνπ, θχξην Βαζίιεην Υαηδή γηα ηελ ππνκνλή πνπ θαη επέδεημε θαηά ηελ εθνπφλεζε ηεο πηπρηαθήο κνπ εξγαζίαο θαζψο θαη ηελ θαζνδήγεζή πνπ κνπ πξνζέθεξε. Δπίζεο ζα ήζεια λα επραξηζηήζσ ηνλ ζπγγελή κνπ Γεψξγην Σζαινπθίδε γηα ηηο νδεγίεο πνπ κνπ έδσζε ζρεηηθά κε ηε ρξήζε ησλ ηερλνινγηψλ θαη δηαδηθαζηψλ πνπ ρξεζηκνπνηήζεθαλ.

Περιεχόμενα 1 ΔΙΑΓΩΓΗ... 1 1.1 Γηαδίθηπν... 1 1.2 ARPAnet... 2 1.3 Παγθφζκηνο Ιζηφο... 4 1.4 Web Applications... 7 1.5 ηφρνο ηεο Δξγαζίαο... 8 2 ΑΝΑΛΤΗ ΑΠΑΙΣΗΔΩΝ... 9 2.1 Δηζαγσγή... 9 2.2 Αζθάιεηα θαη Γηαρείξεζε Υξεζηψλ... 9 2.2.1 Γήισζε λένπ ρξήζηε... 10 2.2.2 Δίζνδνο πηζηνπνηεκέλνπ ρξήζηε... 10 2.2.3 Έμνδνο ρξήζηε απφ ην ζχζηεκα... 11 2.2.4 Αζθάιεηα... 11 2.2.5 Αιιαγή ζηνηρείσλ ρξήζηε... 11 2.3 Αλαδήηεζε αγλννπκέλσλ... 12 2.4 Γηαρείξεζε αγλννπκέλσλ... 12 3 ΣΔΥΝΟΛΟΓΙΔ... 13 3.1 Δηζαγσγή... 13 3.2 Google Web Toolkit... 13 3.2.1 Σν αξρείν gwt.xml... 14 3.2.2 Σν html αξρείν... 16 3.2.3 Javascript Native Interface... 16 3.3 Σερλνινγία Ajax... 17 3.4 Δμππεξέηεζε θιήζεσλ ζην server θαη JAX-RS... 17 3.5 Αληαιαγή δεδνκέλσλ κέζσ JSON strings... 19 4 ΤΛΟΠΟΙΗΗ... 21 4.1 JBoss... 21 4.2 PostgreSQL... 21 4.3 SmartGWT... 21 4.4 Αξρεία θψδηθα... 22 5 ΒΙΒΛΙΟΓΡΑΦΙΑ... 71

1 ΔΗΑΓΩΓΖ 1.1 Γιαδίκηςο Η έληαμε ηνπ Ηιεθηξνληθνχ Τπνινγηζηή θαη ηεο επηζηήκεο ηεο πιεξνθνξηθήο ζηελ δσή ηνπ ζχγρξνλνπ αλζξψπνπ, επέθεξαλ ηεξάζηηεο αιιαγέο ζηελ θαζεκεξηλφηεηά ηνπ. Απηέο νη αιιαγέο δελ πεξηνξίδνληαη κφλν ζην ηξφπν εξγαζίαο αιιά κπνξνχλ λα παξαηεξεζνχλ ζρεδφλ ζε θάζε κνξθή αλζξψπηλεο δξαζηεξηφηεηαο. Καζεκεξηλά παξάγνληαη ηεξάζηηεο πνζφηεηεο πιεξνθνξηψλ, νη νπνίεο πξέπεη κε θάπνηνλ ηξφπν λα δηαρεηξηζηνχλ θαη λα δηνρεηεπζνχλ ζε θάζε γσλία ηνπ πιαλήηε. Σν κέζν πνπ ρξεζηκνπνηείηαη γηα απηφ ην ζθνπφ είλαη ην δηαδίθηπν. ηελ επηζηήκε ησλ ππνινγηζηψλ, ν φξνο Γηαδίθηπν ή Internet φπσο έρεη θαζηεξσζεί δηεζλψο, νξίδεηαη σο έλα δίκηςο (net-work) ππνινγηζηψλ πνπ διαζπλδέεη (inter-connects) άιια δίθηπα. ηε πξάμε, γηα ην κέζν άλζξσπν, είλαη έλα πιέγκα απφ εθαηνκκχξηα δηαζπλδεδεκέλνπο ππνινγηζηέο πνπ εθηείλεηαη ζρεδφλ ζε θάζε γσληά ηνπ πιαλήηε θαη παξέρεη ηηο ππεξεζίεο ηνπ ζε εθαηνκκχξηα ρξήζηεο. Πνιιέο θνξέο κάιηζηα, απηφο ν φξνο είλαη ηαπηφζεκνο κε ηνλ Παγθφζκην Ιζηφ ή WEB γηα Αγγιηθά, πνπ ζα δνχκε ζηε ζπλέρεηα. Εικόνα 1.1. Αναπαπάζηαζη ηος Διαδικηύος ειίδα 1 απφ ζειίδα 71

Απηφ πνπ δε θαληάδεηαη θάπνηνο είλαη φηη ην Γηαδίθηπν μεθίλεζε σο έλα ζηξαηησηηθφ έξγν ζηα ρξφληα ηνπ ςπρξνχ πνιέκνπ. Γηα λα γεκίζνπκε απηφ ην θελφ, ζα θάλνπκε κηα ζχληνκε ηζηνξηθή αλαδξνκή. 1.2 ARPAnet Ο θφβνο φηη νη Η.Π.Α. δε ζα κπνξνχζαλ λα πξνζηαηεπηνχλ απφ κηα πηζαλή ππξεληθή επίζεζε ησλ νβηεηηθψλ ψζεζε ηε θπβέξλεζε λα δεκηνπξγήζεη ηελ ππεξεζία ARPA (Advanced Research Projects Agency). ηφρνο ηεο ππεξεζίαο ήηαλ λα δεκηνπξγήζεη έλα είδνο δηθηχνπ ππνινγηζηψλ πνπ ζε πεξίπησζε ππξεληθνχ πνιέκνπ δελ ζα θαηέξξεε, αιιά ζα εμαθνινπζνχζε λα ιεηηνπξγεί θαη λα πξνζθέξεη ηηο ππεξεζίεο ηνπ, αθφκα θη φηαλ θάπνηνη θφκβνπ ηνπ είραλ νινζρεξψο θαηαζηξαθεί απφ ηνλ ερζξφ. Η ζεκειηψδεο απαίηεζε ήηαλ ε δεκηνπξγία ελφο δηθηχνπ επηθνηλσλίαο ππνινγηζηψλ ρσξίο θεληξηθή δνκή, θεληξηθνχο δηαθφπηεο ή θεληξηθή δηεχζπλζε. Έηζη ε ζπγθεθξηκέλε ππεξεζία, ζε ζπλεξγαζία κε δηάθνξα Ακεξηθάληθα Παλεπηζηήκηα, μεθίλεζε ηε θαηαζθεπή ελφο ηέηνηνπ δηθηχνπ. Σν πξψην βήκα έγηλε ηνλ Οθηψβξην ηνπ 1969, φηαλ ζε έλα κηθξφ δσκάηην ηνπ παλεπηζηεκίνπ ηνπ Stanford, κηα νκάδα επηζηεκφλσλ ζηέθεηαη γχξσ απφ ηελ νζφλε ελφο ππνινγηζηή θαη πξνζπαζεί λα επηθνηλσλήζεη κε κηα αληίζηνηρε νκάδα ηνπ Παλεπηζηεκίνπ ηνπ UCLA ηνπ Los Angeles. Απιντθή ίζσο, απηή ε πξψηε κνξθή επηθνηλσλίαο θαζψο πεξηνξηδφηαλ κφλν ζηελ αληαιιαγή θεηκέλνπ, αιιά ε πξψηε ζπλνκηιία κεηαμχ δχν ππνινγηζηψλ είρε επηηεπρζεί. Εικόνα 1.2 Απσική δομή ARPAnet Μέρξη ην Γεθέκβξην ηνπ 1969 νη θφκβνη έγηλαλ ηέζζεξηο, θαζψο πξνζηέζεθαλ ζην δίθηπν ην παλεπηζηήκην ηεο Utah θαη ην παλεπηζηήκην California ηεο Santa Barbara. Σν δίθηπν απηφ νλνκάζηεθε ARPAnet, πξνο ηηκήλ ηνπ ζηξαηησηηθνχ ρνξεγνχ ηνπ. Οη ηέζζεξηο απηνί παλεπηζηεκηαθνί θφκβνη κπνξνχζαλ ειίδα 2 απφ ζειίδα 71

λα αληαιιάζζνπλ δεδνκέλα κέζσ εηδηθψλ ηειεπηθνηλσληαθψλ θαη κπνξνχζαλ λα πξνγξακκαηηζηνχλ απφ απφζηαζε κέζσ άιισλ απνκαθξπζκέλσλ θφκβσλ. Έηζη, νη επηζηήκνλεο θαη νη εξεπλεηέο ηεο επνρήο εθείλεο, κπνξνχζαλ λα κνηξάδνληαη ν έλαο ηνπο ππνινγηζηέο ησλ άιισλ. Σν 1971, νη θφκβνη απμήζεθαλ ζε 15 θαη ην 1972 ν αξηζκφο ηνπο αλέξρνληαλ ζε 37. ην δεχηεξν απηφ ρξφλν ιεηηνπξγίαο, νη ρξήζηεο επηλφεζαλ ην e-mail θαη κε απηφ ηνλ ηξφπν ην ARPAnet κεηαηξάπεθε ζηαδηαθά ζ έλα ηαρπδξνκείν ειεθηξνληθήο κνξθήο. Απφ απηφ ην ζεκείν θαη κεηά ην δίθηπν έπαςε λα ρξεζηκνπνηείηαη απνθιεηζηηθά γηα ηνλ έιεγρν ησλ ππνινγηζηψλ εμ απνζηάζεσο (remote login) θαζψο μεθίλεζε κηα θαηλνχξγηα ππεξεζία πνπ άξρηζε λα απνθηά έλα θαλαηηθφ θνηλφ: ε ζπλερήο αλακεηάδνζε κελπκάησλ. Οη ρξήζηεο ρξεζηκνπνηνχζαλ ην δίθηπν θπξίσο γηα αληαιιαγή πξνγξακκάησλ, ζεκεηψζεσλ, εξεπλεηηθψλ εξγαζηψλ, λέσλ θαη θνπηζνκπνιηψλ. Η αλαθάιπςε ησλ ηαρπδξνκηθψλ ιηζηψλ (Mailing lists) δελ άξγεζε λα έξζεη, εθκεηαιιεπφκελε ηελ ηερληθή κεηάδνζεο ησλ κελπκάησλ απφ θφκβν ζε θφκβν, θαζψο ην ίδην κήλπκα κπνξνχζε λα ζηαιεί ηαπηφρξνλα ζ φια ηα κέιε ηεο ιίζηαο θνηλψλ ελδηαθεξφλησλ (multicasting). Σν 1973, μεθηλά έλα λέν εξεπλεηηθφ πξφγξακκα πνπ νλνκάδεηαη Internetting Project (Πξφγξακκα Γηαδηθηχσζεο) πξνθεηκέλνπ λα μεπεξαζηνχλ νη δηαθνξεηηθνί ηξφπνη πνπ ρξεζηκνπνηεί θάζε δίθηπν γηα λα δηαθηλεί ηα δεδνκέλα ηνπ. ηφρνο είλαη ε δηαζχλδεζε πηζαλψο αλφκνησλ δηθηχσλ θαη ε νκνηφκνξθε δηαθίλεζε δεδνκέλσλ απφ ην έλα δίθηπν ζην άιιν. Απφ ηελ έξεπλα γελληέηαη κηα λέα ηερληθή, ην Internet Protocol (IP) (Πξσηφθνιιν Γηαδηθηχσζεο), απφ ηελ νπνία ζα πάξεη αξγφηεξα ην φλνκά ηνπ ην Internet. Γηαθνξεηηθά δίθηπα πνπ ρξεζηκνπνηνχλ ην θνηλφ πξσηφθνιιν IP κπνξνχλ λα ζπλδένληαη θαη λα απνηεινχλ έλα δηαδίθηπν. ε έλα δίθηπν IP φινη νη ππνινγηζηέο είλαη ηζνδχλακνη, νπφηε ηειηθά νπνηνζδήπνηε ππνινγηζηήο ηνπ δηαδηθηχνπ κπνξεί λα επηθνηλσλεί κε νπνηνλδήπνηε άιινλ. Δπίζεο, ζρεδηάδεηαη κηα άιιε ηερληθή γηα ηνλ έιεγρν ηεο κεηάδνζεο ησλ δεδνκέλσλ, ην Transmission Control Protocol (TCP) (Πξσηφθνιιν Διέγρνπ Μεηάδνζεο). πνπ αληηθαηέζηεζε ην ΝCP (Network Control Protocol), αξρηθφ πξσηφθνιιν ηνπ ARPAnet. Σν TCP/IP έδηλε κεγάιε ζεκαζία ζηε δπλαηφηεηα δηαζχλδεζεο επί κέξνπο ηνπηθψλ δηθηχσλ. χληνκα ην πξσηφθνιιν απηφ έγηλε ην απνθιεηζηηθφ πξσηφθνιιν επηθνηλσλίαο ηνπ ARPAnet. Οη πην πάλσ εμειίμεηο είραλ σο απνηέιεζκα λα πξνζηεζνχλ ζην ήδε ππάξρσλ ζχζηεκα πεξηζζφηεξνη θφκβνη θαη φιν θαη έλαο απμαλφκελνο αξηζκφο ρξεζηψλ λα ρξεζηκνπνηεί θαζεκεξηλά ηηο ππεξεζίεο ηνπ δηθηχνπ. Οη ρξήζηεο δελ πξνέξρνληαλ πηα κφλν απφ αθαδεκατθέο θνηλφηεηεο θαη ηδξχκαηα. Υάξε ζηελ άλαξρε δνκή ηνπ δηθηχνπ, νπνηνζδήπνηε κπνξνχζε λα ζπλδεζεί κ απηφ, εθ φζνλ δηέζεηε έλαλ ππνινγηζηή πνπ λα κπνξεί λα κηιά ηε γιψζζα ηνπ δηθηχνπ, αιιά θη έλα ινγαξηαζκφ (άδεηα πξφζβαζεο) ζε θάπνηνλ παλεπηζηεκηαθφ ππνινγηζηή. Γηαθνξεηηθνί θαηαζθεπαζηέο ππνινγηζηψλ, κνληέια θαη ηερληθά ραξαθηεξηζηηθά, αθφκε θη ν ηδηνθηήηεο ελφο θφκβνπ, έπαςαλ λα έρνπλ ζεκαζία πξνθεηκέλνπ λα κπνξεί λα ειίδα 3 απφ ζειίδα 71

ζπλδεζεί ν ζπγθεθξηκέλνο θφκβνο ζην δίθηπν. Με ηνλ ηξφπν απηφ, αθφκε θαη απινί πνιίηεο κπνξνχζαλ λα ζπλδεζνχλ θαη λα επηθνηλσλήζνπλ, λ αληαιιάμνπλ απφςεηο θαη πξνγξάκκαηα. Η αχμεζε ηεο ρξήζεο ηνπ ARPAnet απφ απινχο πνιίηεο έρεη σο απνηέιεζκα λα ράζεη ην δίθηπν ην θαζαξά ζηξαηησηηθφ ηνπ ζθνπφ. Έηζη ην 1983 ην ARPAnet ρσξίζζεθε ζε δχν θνκκάηηα, ην ζηξαηησηηθφ ΜILNET κε απζηεξά ειεγρφκελε πξφζβαζε θαη ζην αθαδεκατθφ ARPAnet πνπ φκσο δίλεη πξφζβαζε ζε έλα επξχηεξν θνηλφ. Με μερλάκε άιισζηε φηη ηα Ακεξηθάληθα παλεπηζηήκηα είλαη ηδησηηθά, νπφηε κπνξνχλ λα πσινχλ θαη ππεξεζίεο ζε απινχο πνιίηεο. Η ζπλεξγαζία αλάκεζα ζε MILNET θαη ARPAnet θξάηεζε κέρξη ην 1989 φπνπ ην πξψην δηαρσξίζηεθε ηειείσο απφ ην ARPAnet. Σν δεχεξν πεξλάεη θάησ απφ ηελ επίβιεςε ηνπ National Science Foundation- NSF (Δζληθφ Ίδξπκα Δπηζηεκψλ) ησλ ΗΠΑ. Σν ίδξπκα απηφ, παξαηήξεζε φηη ην δίθηπν ήηαλ αξγφ γηα λα είλαη ζε ζέζε λα θαιχπηεη φιεο ηηο επηζηεκνληθέο θνηλφηεηεο θαη ηηο έξεπλέο ηνπο. Γηα απηφλ ην ιφγν ην ίδξπκα NSF νδεγήζεθε ζηελ δεκηνπξγία ηνπ NSFNET, έλα δίθηπν ηθαλφ λα θαιχπηεη ηηο αλάγθεο πνπ δεκηνπξγνχληαλ. Βαζκηαία, ην NSFnet αληηθαηέζηεζε ην ARPAnet ψζπνπ ην ηειεπηαίν ζηακάηεζε λα ιεηηνπξγεί ζηηο αξρέο ηνπ 1990. Με ην πέξαζκα ηνπ ρξφλνπ φιν θαη πεξηζζφηεξεο ρψξεο ζπλδένληαη ζην NSFNET αλάκεζα ζε απηέο θαη ε Διιάδα ην 1990. Σν 1995 θαηαξγείηαη επίζεκα ην NSFNET, έρνληαο ήδε ζηε δηάξθεηα ηνπ ρξφλνπ παξαρσξήζεη ηκήκαηα ηνπ Γηαδηθηχνπ ζε ηδηψηεο. Μεηά απφ απηφ ην γεγνλφο ην Γηαδίθηπν παίξλεη ηελ κνξθή κε ηελ νπνία ην γλσξίδνπκε ζήκεξα. ηηο κέξεο καο ην δηαδίθηπν δελ βξίζθεηαη ππφ ηελ νπζηαζηηθή δηνίθεζε νχηε θάπνηνπ πξνζψπνπ, νχηε θάπνηνπ νξγαληζκνχ. Παξφια απηά φκσο πξέπεη λα είλαη θάπνηνο ππεχζπλνο, ν νπνίνο λα θαζνξίδεη ζέκαηα φπσο ηελ νλνκαηνινγία, ηηο δηεπζχλζεηο θαη ηελ αξρηηεθηνληθή, θαζψο επίζεο, λα δηαβεβαηψλεηαη γηα ηελ ζσζηή ιεηηνπξγία θαη ηελ εμέιημε ηνπ δηαδηθηχνπ. Αλάκεζα ζε απηνχο ηνπο ππεχζπλνπο είλαη ε Internet Society, έλαο κε θεξδνζθνπηθφο νξγαληζκφο κε ζθνπφ ηελ αληαιιαγή πιεξνθνξηψλ κέζσ Γηαδηθηχνπ ζε παγθφζκηα θιίκαθα, ν νπνίνο ιακβάλεη ηηο ηειηθέο απνθάζεηο ζε ηερληθά ζέκαηα. Άιια παξαδείγκαηα ηέηνηνπ είδνπο ππεπζχλσλ είλαη ε Internet Activities Board Research-IAB Research, Internet Assigned Board- IAB, W3C. Λφγσ ηεο κεγάιεο αλάπηπμεο ηνπ Γηθηχνπ, ήδε απφ ην 1979 ε ARPA είρε δεκηνπξγήζεη (θάπνηνλ αληίζηνηρν ππεχζπλν) ηελ ICCB (Internet Configuration Control Board) γηα λα ειέγρεη ηελ αλάπηπμή ηνπ. 1.3 Παγκόζμιορ Ηζηόρ ηε θαζεκεξηλή δσή, ν φξνο Γηαδίθηπν ρξεζηκνπνηείηαη εμίζνπ κε ηνλ φξν Παγθφζκηνο Ιζηφο ή World Wide Web (WEB) φπσο έρεη επηθξαηήζεη. Γε πξέπεη φκσο λα μερλάκε φηη WEB είλαη απιψο κηα απφ ηηο ππεξεζίεο πνπ πξνζθέξεη ην δηαδίθηπν. Ο Παγθφζκηνο Ιζηφο είλαη κία ηεξάζηηα ζπιινγή απφ ςεθηαθά έγγξαθα (ηηο ηζηνζειίδεο), πνπ βξίζθνληαη απνζεθεπκέλα ζε ππνινγηζηέο ηνπ Γηαδηθηχνπ. Σν ειίδα 4 απφ ζειίδα 71

Γηαδίθηπν, αληίζεηα, είλαη έλα παγθφζκην δίθηπν ππνινγηζηψλ ζπλδεδεκέλσλ κεηαμχ ηνπο. Βέβαηα απηή ε ππεξεζία έρεη ηφζν θπξίαξρε ζέζε, πνπ πνιιέο απφ ηηο θιαζηθέο ππεξεζίεο (FTP, telnet, θ.α.) παξέρνληαη πιένλ σο επεθηάζεηο ηνπ. Ο Παγθφζκηνο Ιζηφο έρεη πνιχ κηθξφηεξε ηζηνξία απφ ην Γηαδίθηπν (ην νπνίν μεθίλεζε ην 1969). Σν 1989 ν Άγγινο επηζηήκνλαο Σηκ Μπέξλεξο Λη (Tim Berners - Lee), κέινο ηνπ θέληξνπ CERN (εξλ - Κέληξν Φπζηθήο Τςειήο Δλέξγεηαο) επηλφεζε ηνλ Παγθφζκην Ιζηφ, πξνζπαζψληαο λα βξεη έλα ηξφπν λα αξρεηνζεηεί ηηο επηζηεκνληθέο κειέηεο ησλ ζπλεξγαηψλ ηνπ CERN. Η επηηπρία ηνπ ήηαλ ηφζν κεγάιε, ψζηε πνιχ γξήγνξα ελζσκαηψζεθε ζηηο ππεξεζίεο ηνπ Γηαδηθηχνπ γλσξίδνληαο ηεξάζηηα απήρεζε ράξε ζηνλ απιφ θαη ειθπζηηθφ ηξφπν πεξηήγεζεο θαη αλαδήηεζεο πιεξνθνξηψλ. Ο Παγθφζκηνο Ιζηφο είλαη ε ππεξεζία πνπ, ζε κεγάιν βαζκφ, έδσζε ζην Γηαδίθηπν ηελ ζεκεξηλή ηνπ αίγιε. Πξφθεηηαη γηα έλαλ εηθνληθφ "ρψξν", φπνπ ε επηθνηλσλία γίλεηαη κέζσ εηδηθψλ "εγγπάθων" ςπεπκειμένος (hypertext), πνπ νλνκάδνληαη ιζηοζελίδερ (web pages). To hypertext, ζε αληίζεζε κε ην θνηλφ θείκελν, είλαη δηαδξαζηηθφ (interactive), πνπ ζεκαίλεη πσο ν ρξήζηεο κπνξεί λα επηδξάζεη κε απηφ δπλακηθά. Οη ηζηνζειίδεο είλαη απνζεθεπκέλεο ζε ππνινγηζηέο (web servers - εξςπηπεηηηέρ ιζηού) πνπ ηξέρνπλ εηδηθφ ινγηζκηθφ γηα ην ζθνπφ απηφ θαη ζπλήζσο έρνπλ κεγάιε ππνινγηζηηθή ηζρχ θαη κφληκε ζχλδεζε κε ην Internet, ψζηε λα νη ηζηνζειίδεο λα είλαη ζπλερψο δηαζέζηκεο ζηνπο ρξήζηεο. Ο ρξήζηεο, απφ ηε κεξηά ηνπ, αξθεί λα δηαζέηεη έλα πξφγξακκα πνπ λα κεηαθέξεη ηηο ηζηνζειίδεο απφ ηνλ web server ζηνλ ηνπηθφ ππνινγηζηή. Σα πξνγξάκκαηα απηά νλνκάδνληαη web browsers (θπιινκεηξεηήο ηζηνχ). Η ιεηηνπξγία ηεο ππεξεζίαο βαζίδεηαη ζην κνληέιν πειάηε/εμππεξεηεηή (client/server model) πνπ απαηηεί ζπλεξγαζία ηνπ web browser (client) κε ηνλ web server. Καηά ηε κεηαμχ ηνπο επηθνηλσλία ρξεζηκνπνηείηαη ην πξσηφθνιιν HTTP (HyperText Transfer Protocol - ππωηόκολλο μεηαθοπάρ ςπεπκειμένος). Αξρηθά απηφ ην πξσηφθνιιν αλαπηχρζεθε γηα λα απνζηέιιεηαη ζηαηηθφ πεξηερφκελν (static contents) απφ ην server πξνο ηνλ client. Έηζη ζχκθσλα κε ηελ αξρηθή έθδνζε ηνπ HTTP: a. ν browser αλαιακβάλεη λα: επηθνηλσλήζεη κε ηνλ server θαη λα δεηήζεη κηα ζειίδα θαη ηα πεξηερφκελα ηηο "θαηεβάζεη" ηηο ηζηνζειίδεο, δειαδή λα ηηο κεηαθέξεη ζηνλ ηνπηθφ ππνινγηζηή. παξνπζηάζεη ζηνλ ρξήζηε ην πεξηερφκελν ησλ ηζηνζειίδσλ, ην νπνίν κπνξεί λα πεξηέρεη θείκελν, εηθφλεο, ήρν, video, θ.ά. b. Ο server αλαιακβάλεη λα: ειίδα 5 απφ ζειίδα 71

είλαη ζε ζπλερή δηαζεζηκφηεηα, ψζηε λα αληαπνθξίλεηαη ζηηο θιήζεηο ησλ πειαηψλ θαη, λα απνζηέιεη ζηνλ client ην πιηθφ ην νπνίν δήηεζε. Με ηε πάξνδν ηνπ ρξφλνπ φκσο, ε αλάγθε αιιειεπίδξαζε ηνπ ρξήζηε κε ηε ζειίδα θαζψο θαη ε δπλακηθή αλαλέσζε ηεο πξνβαιιφκελεο ζειίδαο, είρε σο απνηέιεζκα λα αλαζεσξεζεί ην HTTP πξσηφθνιιν έηζη ψζηε λα επηηξέπεη ζηνπο web servers λα απνζηέιινπλ δηαθνξεηηθφ πεξηερφκελν, αλάινγα κε ην ρξήζηε, ηε ρψξα απφ ηελ νπνία έρεη πξφζβαζε ζηνλ ηζηφ, ηελ ψξα, θ.α. θαζψο θαη ζηνπο browsers λα ρεηξίδνληαη απηφ ην πεξηερφκελν. Έηζη ηα ηειεπηαία ρξφληα έρνπλ αλαπηπρζεί ηερλνινγίεο φπσο JAVASCRIPT, AJAX, WEB SOCKETS, θ.α. Εικόνα 1.3 Οι δημοθιλέζηεποι Web Browsers Όιεο νη αιιαγέο ζηελ ζπγθεθξηκέλε ππεξεζία επηβιέπνληαη απφ έλα δηεζλή νξγαληζκφ. Η Κοινοππαξία ηος Παγκόζμιος Ιζηού, γλσζηή σο World Wide Web Consortium (W3C), έρεη σο ζηφρν λα νδεγήζεη ηνλ Παγθφζκην Ιζηφ ζην κέγηζην ησλ δπλαηνηήησλ ηνπ, αλαπηχζζνληαο πξφηππα ηερλνινγηψλ (standards/recommendations). Παξάιιεια αλαπηχζζεη δηα-ιεηηνπξγηθέο ηερλνινγίεο (πξνδηαγξαθέο, νδεγίεο, ινγηζκηθφ θαη εξγαιεία) θαη δεκηνπξγεί έλα θφξνπκ ελεκέξσζεο θαη ζπιινγηθήο θαηαλφεζεο. Σν W3C ζπζηάζεθε ην 1994 απφ ηνλ εθεπξέηε ηνπ Παγθφζκηνπ Ιζηνχ, Sir Tim Berners-Lee, ζην Παλεπηζηήκην ΜΙT (Massachusetts Institute of Technology) ηεο Μαζαρνπζέηεο ησλ Ηλσκέλσλ Πνιηηεηψλ. Ο Γαιιηθφο Δξεπλεηηθφο Οξγαληζκφο INRIA (Institut National de Recherche en Informatique et en Automatique) έγηλε ν πξψηνο εθπξφζσπνο ηεο Κνηλνπξαμίαο ηνπ Παγθφζκηνπ Ιζηνχ ζηελ Δπξψπε ην 1995. ηε ζπλέρεηα, ην 2003, ηε ζθπηάιε παξέιαβε ην ERCIM (European Research Consortium on Informatics and Mathematics), o νξγαληζκφο πνπ απνζθνπεί ζηελ πξνψζεζε ηεο Δπξσπατθήο Έξεπλαο θαη Αλάπηπμεο ζην ρψξν ηεο Πιεξνθνξηθήο θαη ησλ Δθαξκνζκέλσλ Μαζεκαηηθψλ. Η αλάιεςε ηνπ ξφινπ ηνπ Δπξσπαίνπ νηθνδεζπφηε ηεο Κνηλνπξαμίαο ηνπ Παγθφζκηνπ Ιζηνχ απφ ην ERCIM ζεκαηνδφηεζε κία λέα επνρή ζπλεξγαζηψλ θαη δεκηνπξγίαο δηθηχσλ αλάκεζα ζε ειίδα 6 απφ ζειίδα 71

θνξείο, πνπ δξαζηεξηνπνηνχληαη ζηηο ηερλνινγίεο ηνπ Παγθνζκίνπ Ιζηνχ. Δθπξφζσπνο ηεο Κνηλνπξαμίαο ηνπ Παγθφζκηνπ Ιζηνχ ζηελ Αζία, απφ ην 1996, είλαη ην Παλεπηζηήκην Keio ηεο Ιαπσλίαο. 1.4 Web Applications Η κεηεμέιημε ηνπ WEB είρε σο απνηέιεζκα λα εκθαληζηεί ζην πξνζθήλην έλα θαηλνχξγην είδνο ηζηνζειίδσλ ηηο νπνίεο νλνκάδνπκε εθαξκνγέο ιζηού ή web applications. Απηφ πνπ δηαρσξίδεη κηα web εθαξκνγή απφ κηα ηζηνζειίδα είλαη φηη ν βαζηθφο ζθνπφο κηαο ηζηνζειίδαο είλαη λα πιεξνθνξήζεη ηνλ ρξήζηε πξνβάιινληαο θείκελν, εηθφλεο ή video, ελψ ν ζθνπφο κηαο web εθαξκνγήο είλαη λα πξνζθέξεη ζηνλ ρξήζηε έλα πεξηβάιινλ εξγαζίαο ζην νπνίν κπνξεί λα πάξεη αιιά θαη λα δψζεη πιεξνθνξίεο, λα εθηειέζεη δηεξγαζίεο, λα επεμεξγαζηεί δεδνκέλα θαη λα πεηχρεη θάπνην ζηφρν. Έλα πνιχ θαιφ θαη γλσζηφ παξάδεηγκα κηαο web εθαξκνγήο είλαη ην Hotmail ζην νπνίν ν ρξήζηεο δελ είλαη απιά έλαο επηζθέπηεο αιιά αιιειεπηδξά κε ην ζχζηεκα. Οη δηθηπαθέο εθαξκνγέο είλαη εθαξκνγέο απνζεθεπκέλεο ζε έλαλ δηθηπαθφ server. Δίλαη πξνζβάζηκεο θαη εθηεινχληαη απφ εγθεθξηκέλνπο ρξήζηεο ελφο δηθηχνπ φπσο έλα intranet ή ην internet κε ηε ρξήζε ελφο web browser. πλήζσο επηθνηλσλνχλ κε κία βάζε δεδνκέλσλ απφ ηελ νπνία αληινχλ πιεξνθνξίεο θαη ηηο παξνπζηάδνπλ ζην ρξήζηε θαη ηε ρξεζηκνπνηνχλ γηα λα απνζεθεχζνπλ επηπιένλ πιεξνθνξίεο πνπ εηζάγνληαη real time απφ ην ρξήζηε. Εικόνα 1.4 Απσιηεκηονική μιαρ ηςπικήρ Web App Βαζηθφ πιενλέθηεκα ησλ δηθηπαθψλ εθαξκνγψλ, ζε αληίζεζε κε ηηο ηνπηθά απνζεθεπκέλεο εθαξκνγέο, είλαη φηη νη απνκαθξπζκέλνη ρξήζηεο κπνξνχλ λα έρνπλ πξφζβαζε ζε απηέο ρσξίο λα απαηηείηαη λα εγθαηαζηαζεί άιιν πξφγξακκα ζην ηεξκαηηθφ ηνπο, πιελ ηνπ web browser. Έηζη φηαλ ππάξρεη θαηλνχξγηα έθδνζε κηαο web εθαξκνγήο, δελ απαηηείηαη ηίπνηα απφ ηε πιεπξά ηνπ ρξήζηε παξά κφλν λα θάλεη αλαλέσζε ηεο ζειίδαο ηνπ ζην web browser θαη ην αλαλεσκέλν γξαθηθφ πεξηβάιινλ θαη νη ηπρφλ επηπιένλ δπλαηφηεηεο ζα είλαη δηαζέζηκεο. Απηφ ην ραξαθηεξηζηηθφ είλαη πνιχηηκν γηα κηα εθαξκνγή πνπ ηξέρεη ζε έλα intranet θαη πνπ ειίδα 7 απφ ζειίδα 71

θαλνληθά ζα απαηηνχζε ηελ εγθαηάζηαζε ηεο λέαο έθδνζεο ζε δεθάδεο ππνινγηζηέο. Οπνηνζδήπνηε network administrator κπνξεί λα ην επηβεβαηψζεη. Έλα αθφκα ραξαθηεξηζηηθφ πνπ έρνπλ νη web εθαξκνγέο είλαη ηεο απεμάξηεζεο ηνπ ρξήζηε απφ ηε ρξεζηκνπνίεζε ελφο ζπγθεθξηκέλνπ κεραλήκαηνο. θεθηείηε ην παξάδεηγκα ηεο ρξήζεο ελφο web email ζε αληηδηαζηνιή κε ελφο θιαζηθνχ pop3 email account. Πφζεο θνξέο δε ζα ζέιαηε λα κπνξνχζαηε λα βιέπαηε ηα emails ζαο π.ρ. ζε δηαθνπέο αιιά δε πήξαηε καδί ζαο ην θνξεηφ ζαο ππνινγηζηή; Έλα web email κπνξεί λα πξνζπειαζηεί απφ νπνηνδήπνηε ππνινγηζηή πνπ έρεη ζχλδεζε ζην internet, ελψ ηα ηειεπηαία ρξφληα απηφ είλαη δπλαηφ θαη κε ηε ρξήζε ελφο έμππλνπ ηειεθψλνπ. Αθφκα ε πινπνίεζε κηαο εθαξκνγήο απφ κηα εηαηξεία ιχλεη ην αηψλην πξφβιεκα ηεο ηνπ ινγηζκηθνχ ηεο απφ ηελ πεηξαηεία θαη ηε κε εμνπζηνδνηεκέλε ρξήζε, απμάλνληαο έηζη ηα θέξδε ηνπο. 1.5 ηόσορ ηηρ Δπγαζίαρ θνπφο ηεο ζπγθεθξηκέλεο πηπρηαθήο εξγαζίαο είλαη ε παξνπζίαζε θάπνησλ απφ ησλ ηερλνινγηψλ πνπ ρξεζηκνπνηνχληαη γηα ηε ζπγγξαθή κηαο web εθαξκνγή, ε θαηαλφεζε ηνπ κεραληζκνχ ιεηηνπξγίαο ηνπο θαη θπξίσο ε ρξήζε ηνπο γηα ηε παξαγσγή ελφο website πνπ ζα έρεη ηα ραξαθηεξηζηηθά κηαο ηέηνηαο εθαξκνγήο. Η εθαξκνγή πνπ ζα δεκηνπξγήζνπκε ζα βνεζά ζηελ θαηαγξαθή αγλννπκέλσλ αηφκσλ, ελψ ζα επηηξέπεη ζηνπο ρξήζηεο ηεο λα εηζάγνπλ ηπρφλ θαηλνχξγηεο πιεξνθνξίεο πνπ ππάξρνπλ γηα απηά ηα άηνκα. Έηζη φπνηνο ελδηαθέξεηαη, ζα κπνξεί λα παξαθνινπζεί ην ηζηνξηθφ ηεο αλαδήηεζεο γηα θάπνην ζπγθεθξηκέλν άηνκν. Κάπνηνο ίζσο λα αληηηείλεη φηη κηα ηέηνηα εθαξκνγή ίζσο δελ είλαη θαη πνιχ ρξήζηκε, θαζψο θάπνηνο ζα κπνξεί λα εηζάγεη ζην ζχζηεκα παξαπιαλεηηθέο πιεξνθνξίεο. ε απηφ ην ζεκείν ζα πξέπεη λα ππελζπκίζνπκε φηη ν θχξηνο ζηφρνο καο είλαη ε εμνηθείσζε κε ηα εξγαιεία θαη ηηο ηερληθέο θαη φρη ηφζν ε ίδηα ε εθαξκνγή. εκαζία έρεη ην ηαμίδη θαη φρη ν πξννξηζκφο. ηα παξαθάησ θεθάιαηα ζα θάλνπκε παξνπζίαζε ηνπ ηη ζέινπκε λα θηηάμνπκε θαη πσο ζα ην πεηχρνπκε. Έηζη: ην Κεθάιαην 2 αλαιχνληαη νη απαηηήζεηο ηεο εθαξκνγήο, θαζψο ηα ιεηηνπξγηθά ηεο ραξαθηεξηζηηθα. ην Κεθάιαην 3 γίλεηαη παξνπζίαζε ησλ ηερλνινγηψλ θαη ησλ εξγαιείσλ πνπ ρξεζηκνπνηήζεθαλ γηα ηε θαηαζθεπή ηεο εθαξκνγήο. Σέινο ζην θεθάιαην 4 γίλεηαη παξνπζίαζε θάπνησλ πξνγξακκαηηζηηθψλ ηερληθψλ πνπ ρξεζηκνπνηήζεθαλ θαη επεμήγεζε ηνπο. Δπίζεο γίλεηαη κηα ιηηή παξνπζίαζε ηνπ γξαθηθνχ interface, ελψ ζην ηέινο ηνπ θεθαιαίνπ γίλεηαη παξάζαζε θάπνησλ ζεκαληηθψλ αξρείσλ ηνπ θψδηθα. ειίδα 8 απφ ζειίδα 71

2 ΑΝΑΛΤΖ ΑΠΑΗΣΖΔΩΝ 2.1 Διζαγωγή ε απηφ ην θεθάιαην γίλεηαη αλάιπζε ησλ απαηηήζεσλ ηεο δηαδηθηπαθήο εθαξκνγήο. Η δηαδηθαζία ηεο θαηαγξαθήο ησλ απαηηήζεσλ είλαη ε πην ζεκαληηθή θάζε ζηνλ θχθιν ηεο αλαπηπμήο ελφο ινγηζκηθνχ. Έλα ιάζνο ζε απηή ηε θάζε ζα ζηνηρίζεη πάξα πνιχ ζε ρξφλν, άξα θαη ζε θφζηνο. Έηζη νη απαηηήζεηο πξέπεη λα πιεξνχλ θάπνηεο πξνυπνζέζεηο. Θα πξέπεη λα είλαη αλαιπηηθέο θαη λα κελ αθήλνπλ (ηνπιάρηζηνλ ζηα θξίζηκα θνκκάηηα) πεξηζψξηα γηα αζάθεηεο θαη πξνβιεκαηηζκνχο. Θα πξέπεη λα είλαη πιήξεηο θαιχπηνληαο ην ζχλνιν ηεο εθαξκνγήο. Θα πξέπεη λα θαηαγξάθνπλ ηελ επηζπκεηή ιεηηνπξγηθφηεηα κε απιφηεηα ρσξίο λα πιαηηάδνπλ φπνπ δε ρξεηάδεηαη. Γε ζα πξέπεη λα κπαίλνπλ ζε ηερληθέο ιεπηνκέξεηεο. Απηή είλαη δνπιεηά πνπ ζα γίλεη ζε επφκελεο θάζεηο. Καιχηεξα είλαη, απηφο πνπ γξάθεη ηηο απαηηήζεηο λα κελ είλαη πξνγξακκαηηζηήο, έηζη ψζηε λα κελ θάλεη ππνζέζεηο πνπ κπνξεί λα κε ζθεθηεί απηφο πνπ ζα πινπνηήζεη ηελ απαίηεζε. Γελ ζα πξέπεη λα αζρνινχληαη κε ζέκαηα ειάζζνλνο ζεκαζίαο φπσο π.ρ. ηη ρξψκα ζα έρεη έλα θνπκπί. Δίλαη θαιχηεξν κία κεγάιε ζε έθηαζε απαίηεζε λα ζπάεη ζε πεξηζζφηεξα θνκκάηηα. Απηφ βνεζά θαη ηνλ άλζξσπν πνπ ζα πξαγκαηνπνηήζεη ην testing ηεο εθαξκνγήο λα πξνγξακκαηίζεη ηηο δνθηκέο ηνπ. Γηα λα γίλεη πην εχθνιε ε θαηαγξαθή ησλ απαηηήζεσλ ζα ρσξίζνπκε ηελ εκαξκνγή καο ζε 3 θνκκάηηα. Γελ είλαη απαξαίηεην φηη απηφο ν δηαρσξηζκφο είλαη ν κφλνο πνπ κπνξεί λα γίλεη ή φηη κεηά απφ απηφλ ζα έρνπκε 3 θνκκάηηα ίζεο ζεκαζίαο θαη έθηαζεο απφ πιεπξάο αλάπηπμεο. Ο δηαρσξηζκφο απηφο πξνέθπςε απφ ηελ αλάιπζε ηεο ιεηηνπξγηθφηεηαο πνπ πξέπεη λα πξνζθέξεη απηφ ην site. Έηζη ηα 3 απηά θνκκάηηα είλαη: 1. Αζθάιεηα θαη Γηαρείξεζε Υξεζηψλ 2. Αλαδήηεζε αγλννπκέλσλ ζχκθσλα κε θάπνηα ραξαθηεξηζηηθά 3. Γηαρείξεζε Αγλννπκέλσλ. 2.2 Αζθάλεια και Γιασείπηζη Υπηζηών ε έλα ηέηνην site ην ζεκαληηθφηεξν ζηνηρείν είλαη ε αμηνπηζηία ησλ ζηνηρείσλ πνπ θαηαρσξνχληαη. Γελ είλαη δπλαηφλ ην ζχζηεκα λα επηηξέπεη ζε κε πηζηνπνηεκέλνπο ρξήζηεο λα παξαζέηνπλ ζηνηρεία, θαζψο ππάξρεη ν θχλδπλνο, θάπνηνο θξπκκέλνο πίζσ απφ ηελ αλσλπκία πνπ πξνζθέξεη ην Internet λα ζειήζεη λα παξαπιαλήζεη ηνπο ππφινηπνπο θαινπξναίξεηνπο εζεινληέο ή θαη αθφκα λα ειίδα 9 απφ ζειίδα 71

δηαζθεδάζεη παξέρνληαο ιαλζαζκέλα ζηνηρεία γηα ηε παξνπζία θάπνπ αγλννχκελνπ ζε έλα κέξνο. Γηα λα γίλεη άξζε ηεο αλσλπκίαο, ην ζχζηεκα πξέπεη λα επηηξέπεη ηε δεκηνπξγία ινγαξηαζκψλ ρξεζηψλ έηζη ψζηε φηαλ θάπνηνο εηζάγεη ζηνηρεία γηα θάπνηνλ αγλννχκελν, απηφο λα είλαη πηζηνπνηεκέλνο. 2.2.1 Γήλωζη νέος σπήζηη Η δπλαηφηεηα δεκηνπξγίαο θαη δηαρείξεζεο ρξεζηψλ δελ είλαη απιή νχηε εχθνιε ππφζεζε γηα έλα ηζηφην. Σν ζχζηεκα λα επηηξέπεη ηε δεκηνπξγία θαηλνχξγησλ ρξεζηψλ. Απηνί ζα πξέπεη λα δειψλνπλ ηα πιήξε ζηνηρεία ηνπο θαζψο θαη έλα email επηθνηλσλίαο, έηζη ψζηε λα είλαη δπλαηή ε πηζηνπνίεζε ηνπο. Σν θνκκάηη ηεο πηζηνηπνίεζεο δελ εμεηάδεηαη ζηα πιαίζηα απηήο ηεο εξγαζίαο. Σν email ζα πξέπεη λα είλαη κνλαδηθφ. Σπρφλ δήισζε ελφο ήδε θαηαρσξεκέλνπ email απφ έλα θαηλνχξην ρξήζηε ζα πξέπεη λα απνηπγράλεη πιήξσο, δειαδή ν ρξήζηεο λα κελ δεκηνπξγείηαη θαη έλα κήλπκα ιάζνπο λα παξνπζηάδεηαη ζην θπινκεηξεηή. Ο ρξήζηεο ζα πξέπεη λα δηαιέμεη έλα username θαη έλα password ηα νπνία θαη ζα ρξεζηκνπνηεί γηα ηηο επφκελεο εηζφδνπο ηνπ ζην ζχζηεκα. Σν username ζα πξέπεη λα είλαη κνλαδηθφ. ε αληίζεηε πεξίπησζε ε δήισζε ζα πξέπεη λα απνξξίπηεηαη. Ο έιεγρνο ηεο κνλαδηθφηεηαο ηνπ username ζα πξέπεη λα γίλεηαη κφλν φηαλ ζπκπιεξσζνχλ φια ηα ζηνηρεία. Αιιηψο ππάξρεη ε πεξίπησζε θάπνηνο hacker λα δνθηκάδεη ηπραία usernames κέρξη λα βξεη θάπνην πνπ ήδε ππάξρεη. Σν password ζα πξέπεη λα εηζαρζεί ζην ζχζηεκα 2 θνξέο έηζη λα απνθιεηζηεί ε πεξίπησζε ιαλζαζκέλεο πιεθηξνιφγηζεο θαηά ηελ εγγξαθή. Οη ραξαθηήξεο θαηά ηε πιεθηξνιφγεζε ηνπ password δελ ζα πξέπεη λα εκθαλίδνληαη ζηελ νζφλε. Σν password ζα πξέπεη λα πεξηέρεη ηνπιάρηζηνλ 8 ραξαθηήξεο, Θα πξέπεη λα πεξηέρεη ηνπιάρηζηνλ 1 γξάκκα, έλαλ αξηζκφ θαη έλα ραξαθηήξα. Ο έιεγρνο ησλ πην πάλσ πεξηνξηζκψλ ζα πξέπεη λα γίλεηαη θαηά ηε θάζε ηεο πιεθηξνιφγηζεο. Μεηά ηελ επηηπρεκέλε δήισζε ησλ ζηνηρείσλ, ην ζχζηεκα πξέπεη λα θαηαγξάθεη απηά ηα ζηνηρεία ζηε βάζε δεδνκέλσλ θαη λα επηηξέπεη ηελ είζνδν ηνπ ρξήζηε. 2.2.2 Δίζοδορ πιζηοποιημένος σπήζηη Έλαο ρξήζηεο ζα κπνξεί λα εηζέιζεη ζην ζχζηεκα πιεθηξνινγφληαο θάπνπ ην username θαη ην password ηνπ. Οη ραξαθηήξεο ηνπ password δε ζα πξέπεη λα θαίλνληαη θαηά ηε πιεθηξνιφγηζε ηνπο. ειίδα 10 απφ ζειίδα 71

Μεηά ηελ εηζαγσγή ησλ ζηνηρείσλ, ην ζχζηεκα ζα πξέπεη λα πξνρσξά ζηνλ έιεγρν απηψλ κε απηά πνπ έρεη απνζεθεπκέλα ζηε βάζε. Αλ βξεζεί δεχγνο απν username θαη password πνπ αληηζηνηρεί ζε απηά πνπ έδσζε ν ρξήζηεο, ζα πξέπεη λα επηηξέπεηαη ε είζνδνο ηνπ ρξήζηε ζην ζχζηεκα θαη ε ρξεζηκνπνίεζε ησλ επηπιέσλ δπλαηνηήησλ. Αλ δε βξεζεί αληηζηνίρηζε, ην ζχζηεκα πξέπεη λα απνθιείεη ηε ρξεζηκνπνίεζε ησλ επηπιένλ δπλαηνηήησλ θαη λα ελεκεξψλεη ην ρξήζηε γηα ηελ απνηπρία. Σν πην πάλσ κήλπκα ιάζνο ζα πξέπεη λα είλαη γεληθφ θαη λα κελ δίλεη θάπνηα έλδεημε αλ ην username ήηαλ ζσζηφ. 2.2.3 Έξοδορ σπήζηη από ηο ζύζηημα Ο ρξήζηεο ζα πξέπεη λα έρεη ηε δπλαηφηεηα λα εμέιζεη απφ ην ζχζηεκα. Μεηά ηελ έμνδν ηνπ ρξήζηε, ζα πξέπεη λα γίλεηαη απνθιεηζκφο ησλ επηπιένλ δπλαηνηήησλ ηεο εθαξκνγήο. Μεηά ηελ έμνδν ηνπ ρξήζηε, ην ζχζηεκα ζα πξέπεη λα μερλάεη νηηδήπνηε γηα απηφλ. Έηζη ζηε ζπλέρεηα, ε είζνδνο κε άιιν username λα κελ κνηξάδεηαη ζηνηρεία. 2.2.4 Αζθάλεια Δπεηδή ζηνηρεία φπσο ην username ή/θαη ην email είλαη επαίζζεηα, ε επηθνηλσλία κεηαμχ client-server ζα πξέπεη λα είλαη θξππηνγξαθεκέλε. Σν ζχζηεκα δε ζα πξέπεη λα επηηξέπεη έλαλ ρξήζηε λα πξνζπειάζεη ηα ζηνηρεία ελφο άιινπ ρξήζηε. Σν username δελ ζα πξέπεη λα εκθαλίδεηαη ζε θακία νζφλε ηεο εθαξκνγήο έηζη ψζηε λα κε κπνξεί θάπνηνο βιέπνληαο εγγξαθέο λα αλαθαιχπηεη θαη usernames πνπ ρξεζηκνπνηνχληαη. Όπνπ απαηηείηαη ε εκθάληζε ησλ ζηνηρείσλ ησλ ρξήζηε ζα πξέπεη λα εκθαλίδεηαη ην νλνκαηεπψλπκφ ηνπ. 2.2.5 Αλλαγή ζηοισείων σπήζηη Σν ζχζηεκα ζα πξέπεη λα επηηξέπεη ηελ αιιαγή ησλ ζηνηρείσλ ελφο ρξήζηε, κφλν φκσο απφ ηνλ ίδην. Σν username δε κπνξεί λα αιιάμεη. ηελ πεξίπησζε αιιαγήο ηνπ password ζα πξέπεη λα δεηείηαη απφ ην ρξήζηε λα εηζάγεη ην ηζρχσλ password. Μεηά ηελ επεμεγξαζία ησλ ζηνηρείσλ, ην ζχζηεκα ζα πξέπεη λα ειέγρμεη ηελ νξζφηεηα απηνχ. Καηά ηελ επηινγή ηνπ password ζα πξέπεη λα ηζρχνπλ νη πεξηνξηζκνί πνπ πεξηγξάθεθαλ ζηελ ελφηεηα 2.2.1. Μεηά ηελ πιεθηξνιφγεζε ησλ ζηνηρείσλ ην ζχζηεκα ζα πξέπεη λα εηζάγεη ηα θαηλνχξγηα απηψλ ζηε βάζε δεδνκέλσλ. ειίδα 11 απφ ζειίδα 71

2.3 Αναζήηηζη αγνοοςμένων Σν ζχζηεκα ζα πξέπεη λα δίλεη ηε δπλαηφηεηα αλαδήηεζεο ζηε βάζε γηα αγλννχκελνπο κε βάζε θάπνηα ραξαθηεξηζηηθά. Η δπλαηφηεηα αλαδήηεζεο ζα πξέπεη λα δίλεηαη θαη ζε κε πηζηνπνηεκέλνπο ρξήζηεο. Καηά ηε πξνβνιή ησλ απνηειεζκάησλ αλαδήηεζεο ζα πξέπεη λα εκθαλίδεηαη κηα θσηνγξαθία ηνπ αγλννχκελνπ, αλ θπζηθά ππάξρεη. Ο ρξήζηεο ηεο εθαξκνγήο ζα κπνξεί λα επηιέγεη θάπνην άηνκν απφ ηα απνηειέζκαηα αλαδήηεζεο έηζη ψζηε λα δεη πεξηζζφηεξα ζηνηρεία. 2.4 Γιασείπηζη αγνοοςμένων Απηφ ην θνκκάηη ηεο εθαξκνγήο ζα είλαη δηαζέζηκν κφλν ζε πηζηνπνηεκέλνπο ρξήζηεο. Η πξφζβαζε ζα πξέπεη λα απνθιείεηαη αλ δελ έρεη γίλεη επηηπρεκέλε είζνδνο ζην ζχζηεκα. Δπηπιένλ, ζα πξέπεη: Έλαο ρξήζηεο, φηαλ βιέπεη ηα ζηνηρεία ηνπ ινγαξηαζκνχ ηνπ, ζα βιέπεη επίζεο θαη ηνπο αγλννχκελνπο πνπ δήισζε αξρηθά ν ίδηνο ή αλέθεξε θάπνηα παξνπζία ηνπ. Μφλν ν ρξήζηεο πνπ δήισζε ηελ εμαθάληζε ζα κπνξεί λα αλεβάδεη κηα θσηνγξαθία γηα ην πξνθηι ηνπ αγλννχκελνπ, θαζψο θαη άιιεο θσηνγξαθίεο. Όινη νη πηζηνπνηεκέλνη ρξήζηεο ζα κπνξνχλ αλαθέξνπλ θάπνηα θαηλνχξγηα εκθάληζε ηνπ αγλννχκελνπ. Μηα θαηλνχξγηα δήισζε γηα εκθάληζε ελφο αγλννχκελνπ δε ζα γίλεηαη δεθηή αλ αλαθέξεηαη ζε ρξφλν παιαηφηεξε απφ ηε πην πξφζθαηε θαηαρψξεζε. Μφλν ν ρξήζηεο πνπ δήισζε ηελ εμαθάληζε ηνπ αγλννχκελνπ ζα έρεη ηε δπλαηφηεηα λα ελεκεξψζεη ην ζχζηεκα γηα ηελ επηηπρεκέλε αλεχξεζε ηνπ ζπγθεθξηκέλνπ αηφκνπ. ειίδα 12 απφ ζειίδα 71

3 ΣΔΥΝΟΛΟΓΗΔ 3.1 Διζαγωγή Γηα ηε δεκηνπξγία ηνπ site ζηεξηρζήθακε ζε java ηερλνινγίεο ηφζν ζην θνκκάηη ηνπ server, φζν θαη ζην θνκκάηη ηνπ client. ε απηφ ην θεθάιαην ζα δνχκε φιεο ηηο ηερλνινγίεο πνπ ρξεζηκνηήζακε αξρίδνληαο απφ ηνλ client. 3.2 Google Web Toolkit Αληί γηα ηε ζπλεζηζκέλε πξαθηηθή ηεο ρξήζεο html αξρείσλ θαη javascript θψδηθα, ην frontend ηνπ site καο γξάθηεθε κε ηε ρξήζε ελφο εηδηθνχ ζπλφινπ απφ πξγξακκαηηζηηθά εξγαιεία πνπ νλνκάδεηαη Google Web Toolkit ή GWT ελ ζπληνκία. Απηφ ην ζχλνιν απφ εξγαιεία (toolkit) καο επηηξέπεη λα ρξεζηκνπνίεζνπκε ηε γιψζζα πξνγξακκαηηζκνχ JAVA γηα λα γξάςνπκε φια ηα θνκκάηηα ηεο εθαξκνγήο καο: Απφ ην θψδηθα πνπ ζα δεκηνπξγήζεη φια ηα γξαθηθά ζηνηρεία ηεο εθαξκνγήο καο κέρξη θαη απηφλ πνπ ζα αληηδξάζεη ζε θάπνηα ελέξγεηα ηνπ ρξήζηε φπσο ην πάηεκα ηνπ θνπκπηνχ ηνπ mouse ή ηε πιεηξνιφγεζε θάπνηνπ θεηκέλνπ. Μεηά ηε ζπγγξαθή ηνπ JAVA θψδηθα, κπνξνχκε λα ρξεζηκνπνηήζνπκε ηνλ εηδηθφ κεηαθξαζηή πνπ έξρεηαη κε ην toolkit γηα λα κεηαηξέςνπκε ηνλ θψδηθα καο ζε javascript. Ο παξαγψκελνο javascript θψδηθαο κπνξεί λα είλαη ζε απιή, επθνινδηάβαζηε κνξθή ή ζε "θξππηνγξαθηθή" κνξθή (obfuscated code) πνπ θάλεη δχζθνιε ηελ αλάιπζε θαη θινπή ηνπ θψδηθα. Μεηά ην ζηάδην απηφ, ην απνηέιεζκα ηεο κεηάθξαζεο. δειαδή κηα νκάδα απφ js θαη html αξρεία κπνξεί λα εθηειεζηεί απφ νπνηνλδήπνηε web server. Σα θνκκάηηα απφ ηα νπνία απνηειείηαη ην GWT είλαη ηα εμήο: α) Ο Java to Javascript Compiler πνπ αλαθέξακε πην πάλσ. β) Σν GWT Development Mode. Έλα εξγαιείν εθηέιεζεο ηνπ θψδηθα καο ζε Java κνξθή θαη πξνβνιή ηνπ απνηειέζκαηνο ζε έλαλ Web Browser κε ηε ρξήζε ελφο θαηάιιεινπ plugin. Απηνχ ηνπ είδνπο ε εθηέιεζε κπνξεί λα γίλεη θαηά ηε θάζε ηεο αλάπηπμεο αλ ζέινπκε λα θάλνπκε debugging ηεο εθαξκνγήο καο ή ζέινπκε λα απνθχγνπκε ην ρξνλνβφξν compilation ζηε θάζε πνπ αιιάδνπκε πνιχ ζπρλά ην θψδηθά καο γ) To GWT Emulation Library. Απηφ είλαη κηα βηβιηνζήθε πνπ θάλεη πξνζνκνίσζε ηεο ζπκπεξηθνξάο ησλ γλσζηψλ Java θιάζεσλ πνπ αλήθνπλ ζην package java.lang θαη java.util. Απφ ην δεχηεξν εμαηξνχληαη νη θιάζεηο πνπ ρξεζηκνπνηνχληαη γηα multithreading πξνγξακκαηηζκφ θαζψο ε Javascript δελ ππνζηεξίδεη λήκαηα. ειίδα 13 απφ ζειίδα 71

δ) Σε GWT Web UI Class Library δειαδή ηε βηβιηνζήθε κε έλα βαζηθφ ζχλνιν απφ γξαθηθά ζηνηρεία. ηελ εθαξκνγή καο θάλακε ρξήζε ελφο πνιχ πην πιήξε ζπλφινπ απφ ζηνηρεία πνπ νλνκάδεηαη Smart GWT. Θα εμεηάζνπκε απηφ ηε βηβιηνζήθε ζε επφκελε ελφηεηα. Η ρξήζε ηνπ ζπγθεθξηκέλνπ toolkit θάλεη πην εχθνιε ηε δνπιεηά ηνπ πξνγξακκαηηζηή, θαζψο ελζσκαηψλεη ηελ απζηεξφηα πνπ δηαζέηεη κηα πξαγκαηηθή γιψζζα πξνγξακκαηηζκνχ φπσο ε JAVA ζε αληηδηαζηνιή κε ηελ ειεπζεξία πνπ ραξαθηεξίδεη ηελ html θαη ηε Javascript, κηα ειεπζεξία πνπ φκσο ηε πιεξψλεηο αξθεηά αθξηβά φηαλ ην απνηέιεζκα δελ είλαη απηφ πνπ ζέιεηο. Σν άιιν πιενλέθηεκα ηνπ GWT είλαη φηη επηηξέπεη ζηνλ έκπεηξν αληηθεηκελνζηξαθή πξνγξακκαηηζηή λα ζπλερίδεη λα εξγάδεηαη φπσο γλσξίδεη, ρξεζηκνπνηψληαο ηηο ηδηφηεηεο ηεο θιεξνλνκηθφηεηαο, ηεο ππέξβαζεο θαη ηεο ππεξθφξησζεο θαη δεκηνπξγψληαο πεξίπινθεο, αιιά θαζαξέο ζηε κνξθή ηνπο δνκέο. Σέινο ε ρξήζε εγξαιείσλ φπσο ελφο IDE ζε ζπλδηαζκφ κε ην Development mode δηεπθνιχλεη ην πξνγξακκαηηζηή λα πεηχρεη ην απνηέιεζκα πνπ ζέιεη. Αλ ζπλδηάζνπκε ηα παξαπάλσ κε ην γελνλφο ηεο χπαξμεο αξθεηψλ θαιψλ βηβιηνζεθψλ κε έηνηκα components, ην GWT ππφζρεηαη φηη κπνξεί λα βνεζήζεη έλαλ απείξν ζε CSS θαη javascript πξνγξακκαηηζηή θηηάμεη εθαξκνγέο επαγγεικαηηθνχ επηπέδνπ. ηε ζπλέρεηα ζα δνχκε αλαιπηηθά ηη πξνζθέξεη θαη πσο ιεηηνπξγεί. 3.2.1 Σο απσείο gwt.xml Σν ζπγθεθξηκέλν αξρείν είλαη απηφ πνπ δηαβάδεη ν Compiler γηα λα δεη ηη ζα κεηαθξάζεη. Δίλαη νπζηαζηηθά έλα XML αξρείν πνπ αθνινπζεί έλα εηδηθφ format. Σν αξρείν μεθηλάεη κε ηε δήισζε ηνπ GWT module. <module rename-to='missing'> ηε ζπλέρεηα ππάξρεη αλαθνξά ζηα άιια modules, απφ ηα νπνία θιεξνλνκεί. <inherits name='com.google.gwt.user.user'/> <inherits name='com.google.gwt.core.core'/> <inherits name="com.google.gwt.i18n.i18n"/> <inherits name='com.google.gwt.user.theme.clean.clean'/> <inherits name="com.smartgwt.smartgwt"/> <inherits name="com.smartgwt.drawing"/> Μεηά αθνινπζεί ε δήισζε πνπ δειψλεη πνηα είλαη ε βαζηθή θιάζε πνπ ζα θαζνδεγήζεη ηελ εθηέιεζε ηνπ θψδηθα. <entry-point class='com.taxidis.missing.client.missing'/> ην ηέινο δειψλνληαη νη θαηάινγνη πνπ πεξηέρνπλ ηα αξρεία πνπ πξέπεη λα κεηαθξαζηνχ <source path='client'/> <source path='shared'/> ειίδα 14 απφ ζειίδα 71

</module> ε απηφ ην ζεκείν πξέπεη λα ζεκεηψζνπκε ην γεγνλφο φηη ν GWT compiler ρξεηάδεηαη λα βξεη φια ηα JAVA αξρεία απφ ηα νπνία θιεξνλνκνχκε ή ελζσκαηψλνπκε ζηηο θιάζεηο καο (θάλνληαο include). Όπσο βιέπνπκε, φηαλ δειψζακε ηνπο θαηαιφγνπο πνπ πεξηέρνπλ ηα αξρεία πνπ πξέπε λα κεηαθξαζηνχ, βάιακε εθηφο απφ ην client θαη έλαλ άιιν κε ηελ νλνκαζία shared. Απηφο ν θαηάινγνο πεξηέρεη αξρεία πνπ πξέπεη κε ηε γλσζηή.class κνξθή λα εθηειεζηεί απφ ην server θαη κε ηε javascript κνξθή ηνπ λα θαηαιήμεη ζηνλ browser. Σέηνηα αξρεία πεξηέρνπλ ζπλήζσο JAVA Beans θιάζεηο ή ζηαηηθέο κεηαβιεηέο πνπ ρξεζηκνπνηνχληαη γηα λα θσδηθνπνίεζνπλ ηελ ίδηα πιεξνθνξία θαη ζην server θαη ζην client. Έλα δείγκα Java Bean δίλεηαη πην θάησ. public class PlaceHolder<T> private T value; public PlaceHolder(T t) value = t; public void setvalue(t t) value = t; public T getvalue() return value; Σν παξαθάησ αξρείν δειψλεη θάπνηεο ζηαηηθέο ηηκέο πνπ ζα ρξεζκνπνηεζνχλ θαη απφ ηα δχν θνκκάηηα ηεο εθαξκνγήο καο. public interface LoginJsonKeys String USER_NAME = "username"; String PASSWORD = "password"; String RESPONSE_OBJECT = "response"; String RESPONSE_STATUS = "status"; int RESPONSE_STATUS_OK = 0; int RESPONSE_STATUS_LOGIN_INCORRECT = 1; int RESPONSE_STATUS_ALREADY_LOGGEDIN = 3; int RESPONSE_STATUS_GENERAL_ERROR = 10; String RESPONSE_FIRST_NAME = "firstname"; String RESPONSE_LAST_NAME = "lastname"; String RESPONSE_ERROR_REASON = "reason"; ειίδα 15 απφ ζειίδα 71

Με ηε ρξεζηκνπνίεζε ελφο ηέηνηνπ file, δηαζθαιίδνπκε φηη φηαλ ν server ρξεζηκνπνηεί ηε ηηκή RESPONSE_STATUS_LOGIN_INCORRECT, ν client ζα θαηαιάβεη φηη ην απέηπρε ην Login θαη φρη θάηη άιιν. 3.2.2 Σο html απσείο Η εθηέιεζε ηεο εθαξκνγήο καο μεθηλάεη κε ηε θφξησζε ηνπ ελφο θαη κνλαδηθνχ html αξρείνπ πνπ πεξηέρεηαη. Απηφ είλαη θαη ην κνλαδηθφ αξρείν πνπ πξέπεη λα ην δεκηνπξγήζνπκε κφλνη καο. Απηφ πνπ πξέπεη νπνζδήπνηε λα ζπκπεξηιάβνπκε ζε απηφ ην αξρείν είλαη ε παξαθάησ δήισζε: script type="text/javascript" src="missing/missing.nocache.js"></script> Ο κεηαθξαζηήο δεκηνχξγεζε έλαλ θαηάινγν πνπ νλνκάδεηαη φπσο θαη ην module καο πεξηέρεη ην βαζηθφ javascript αξρείν. Υσξίο απηή ηε δήισζε δελ ππάξρεη θαη εθαξκνγή. 3.2.3 Javascript Native Interface Σν GWT πεξηέρεη έλα ραξαθηεξηζηηθφ πνπ πξαγκαηηθά απνγεηψλεη ηηο δπλαηφηεηεο ηνπ. Απηφ είλαη ε εθηέιεζε Javascript θψδηθα κέζα απφ ην GWT καο αξρείν θαζψο θαη ην αληίζηνηθν. public void setloginrequired() if(userisloggedin) // Perhaps server evicted user or a restart happen logoutok(); Map<String, String> errors = new HashMap<String, String>(); errors.put(login_user_name_item_name, missingmessages.loginrequired()); errors.put(login_password_item_name, missingmessages.loginrequired()); loginform.seterrors(errors, true); blickinglogin(login_form_style, LOGIN_FORM_FLASHING_STYLE); private native void blinkinglogin(string normal, String alter) /*- var that = this; var counter = 0; var blickingtimer = setinterval(function() ++counter; var stylename = counter % 2? normal : alter; that.@com.taxidis.missing.client.panel.loginform::setstylename(ljava/lang/ String;)(styleName);, 300); settimeout(function() clearinterval(blickingtimer); ειίδα 16 απφ ζειίδα 71

that.@com.taxidis.missing.client.panel.loginform::setstylename(ljava/lang/ String;)(normal);, 3000); -*/; Δδψ ε GWT ζπλάξηεζε setloginrequired() θαιεί ηε native ζπλάξηεζε blickinglogin() πνπ κε ηε ζεηξά ηεο θαιεί ηε GWT ζπλάξηεζε setstylename. 3.3 Σεσνολογία Ajax H ηερλνινγία AJAX (Asynchronous JavaScript And XML) δελ είλαη κηα λέα γιψζζα πξνγξακκαηηζκνχ, αιιά απιά κία λέα ηερληθή γηα ηε δεκηνπξγία πην γξήγνξσλ θαη πην θηιηθψλ γηα ην ρξήζηε δηαδηθηπαθψλ εθαξκνγψλ. Η ηερλνινγία AJAX βαζίδεηαη ζε JavaScript θαη ζε θιήζεηο HTTP. Η ηερλνινγία ΑJAX ρξεζηκνπνηεί JavaScript γηα ηελ απνζηνιή θαη ιήςε δεδνκέλσλ κεηαμχ ελφο θπιινκεηξεηή (web browser) θαη ηνπ εμππεξεηεηή (web server). Η ηερληθή AJAX θάλεη ηηο ηζηνζειίδεο πην δηαδξαζηηθέο επηηξέπνληαο ηελ απνζηνιή δεδνκέλσλ ζην παξαζθήλην ρσξίο λα ρξεηαζηεί ν ρξήζηεο λα κεηαθνξηψλεη κία ηζηνζειίδα θάζε θνξά πνπ θάλεη θάηη ζηελ ζειίδα. H ηερλνινγία AJAX εθηειείηαη ζηνπο ππνινγηζηέο πνπ ππάξρεη ν θπιινκεηξεηήο. Υξεζηκνπνηεί αζχγρξνλε κεηαθνξά δεδνκέλσλ (HTTP θιήζεηο) κεηαμχ ηνπ θπιινκεηξεηή θαη ηνπ θεληξηθνχ εμππεξεηεηή, επηηξέπνληαο ζηηο ζειίδεο web λα δεηνχλ κηθξέο πιεξνθνξίεο απφ ηνλ εμππεξεηεηή αληί γηα πιήξεηο ζειίδεο. Η ηερλνινγία ΑJAX είλαη πνιχ ρξήζηκε κηαο θαη επηηξέπεη ηεο δηαδηθηπαθέο εθαξκνγέο λα είλαη κηθξέο, λα θνξηψλνληαη γξήγνξα θαη λα είλαη πνιχ θηιηθέο γηα ην ηειηθφ ρξήζηε. Θα πξέπεη λα ζεκεησζεί πσο ε ηερλνινγία AJAX είλαη θπξίσο ηερλνινγία πνπ ππνζηεξίδεηαη ζην θπιινκεηξεηή (web browser) θαη φρη ηερλνινγία ηνπ εμππεξεηεηή. 3.4 Δξςπηπέηηζη κλήζεων ζηο server και JAX-RS ε έλα JAVA web server ε HTTP Get ή Post θιήζε εμππεξεηείηαη απφ έλα εηδηθφ αληηθείκελν πνπ ιέγεηαη Servlet. Με ηε ρξήζε ηεο ηερλνινγίαο JAX-RS ν web server κπνξεί λα απηνκαηνπνηήζεη ηε δηαδηθαζία ρεηξηζκνχ ησλ εξσηεκάησλ. Σν JAX-RS είλαη έλα πξνγξακκαηηζηηθφ interface γηα ηε JAVA κε ζηφρν ηελ πινπνίεζε ππεξεζηψλ δηαδηθηχνπ πνπ αθνινπζνχλ ην REST πξνγξακκαηηζηηθφ πξφηππν. H νλνκαζία REST πξνέξρεηαη απφ ηα αθξνλχκηα Representational State Transfer (Μεηαθνξά Καηάζηαζεο Παξνπζίαζεο) θαη είλαη έλαο ηξφπνο πινπνίεζεο θαη φρη έλα πξσηφθνιιν επηθνηλσλίαο. Σν JAX-RS εθκεηαιιεχεηαη ηα Java Annotations γηα λα δηεπθνιχλεη ην ρξήζηε λα δειψζεη ηηο θιάζεηο θαη ηηο κεζφδνπο πνπ ζα πινπνηήζνπλ κία ππεξεζία. ειίδα 17 απφ ζειίδα 71

@Path("/person") public class PersonResource @POST @Path("/create") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public String create(inputstream in, @Context HttpServletRequest req) return " personid: 1, username: "ctam" "; @GET @Path("/createInfo") @Produces(MediaType.PLAIN_TEXT) public String createinfo(inputstream in, @Context HttpServletRequest req) return "something"; @POST @Path("/create") @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.APPLICATION_JSON) public String createasxml(inputstream in, @Context HttpServletRequest req) return " personid: 1, username: "ctam" "; Σα πην πάλσ annotations θαζνξίδνπλ θαη πνηεο θιήζεηο κπνξεί λα ρεηξηζηεί ε θάζε κέζνδνο. Έηζη ε ζπλάξηεζε create ζα θιεηζεί απηφκαηα φηαλ ν client ζηείιεη έλα POST request ζην URL http://localhost/missing/person/create θαη απηφ ην request κεηαθέξεη δεδνκέλα ζε JSON κνξθή. Σν ηειεπηαίν θαζνξίδεηαη απφ ην @Consumes annotation. To @Produces annotation θαζνξίδεη φηη ε απάληεζε καο ζα είλαη θαη απηή ζε JSON κνξθή. Απηφ απνηειεί νπζηαζηηθά νδεγία ζην web server γηα λα ζέζεη ην θαηάιιειν Header. Αληίζηνηρα ε κέζνδνο createinfo ζα θιεζεί φηαλ έλα GET operation γηα ην URL http://localhost/missing/person/create θηάζεη ζην server. Δδψ βιέπνπκε φηη ιείπεη ην annotation @Consumes πνπ ζεκαίλεη φηη ε κέζνδνο ζα θιεζεί αλεμάξηεηα απφ ην Contents Type πνπ ζα έρεη ην Request. Σέινο ε κέζνδνο createasxml ζα θιεζεί ζηελ πεξίπησζε πνπ ην request είλαη έλα POST γηα ην URL http://localhost/missing/person/create, φπσο θαη ζηελ πξψηε πεξίπησζε. Μφλν πνπ ζε απηή, ην ContentsType είλαη text ζε κνξθή XML. Οπφηε βιέπνπκε φηη αλάινγα κε ην ContentsType κπνξεί λα θιεζεί δηαθνξεηηθή κέζνδνο γηα ην ίδην URL. ειίδα 18 απφ ζειίδα 71

3.5 Ανηαλαγή δεδομένων μέζω JSON strings To JSON (JavaScript Object Notation) είλαη έλα ειαθξχ πξφηππν αληαιιαγήο δεδνκέλσλ. Δίλαη εχθνιν γηα ηνπο αλζξψπνπο λα ην δηαβάζνπλ θαη γξάςνπλ. Δίλαη εχθνιν γηα ηηο κεραλέο λα ην αλαιχζνπλ (parse) θαη λα ην παξάγνπλ (generate). Δίλαη βαζηζκέλν πάλσ ζε έλα ππνζχλνιν ηεο γιψζζαο πξνγξακκαηηζκνχ JavaScript, Standard ECMA-262 Έθδνζε 3ε - Γεθέκβξηνο 1999. Σν JSON είλαη έλα πξφηππν θεηκέλνπ, ην νπνίν είλαη ηειείσο αλεμάξηεην απφ γιψζζεο πξνγξακκαηηζκνχ αιιά ρξεζηκνπνηεί πξαθηηθέο (conventions) νη νπνίεο είλαη γλσζηέο ζηνπο πξνγξακκαηηζηέο ηεο νηθνγέλεηαο πξνγξακκαηηζκνχ C, ζπκπεξηιακβαλνκέλσλ ησλ C, C++, C#, Java, JavaScript, Perl, Python, θαη πνιιψλ άιισλ. Απηέο νη ηδηφηεηεο θάλνπλ ην JSON κηα ηδαληθή γιψζζα πξνγξακκαηηζκνχ αληαιιαγήο δεδνκέλσλ. Σν JSON είλαη ρηηζκέλν ζε δχν δνκέο: Μηα ζπιινγή απφ δεπγάξηα νλνκάησλ/ηηκψλ. ε δηάθνξεο γιψζζεο πξνγξακκαηηζκνχ, απηφ αληηιακβάλεηαη σο έλα object, θαηαρψξηζε, δνκή, ιεμηθφ, πίλαθα hash (hash table), ιίζηα θιεηδηψλ, ή associative πίλαθα. Μία ηαμηλνκεκέλε ιίζηα ηηκψλ. ηηο πεξηζζφηεξεο γιψζζεο πξνγξακκαηηζκνχ, απηφ αληηιακβάλεηαη σο έλαο πίλαθαο (array), δηάλπζκα, ιίζηα, ή αθνινπζία. Απηά είλαη ηα universal data structures. Οπζηαζηηθά φιεο νη κνληέξλεο γιψζζεο πξνγξακκαηηζκνχ ηα ππνζηεξίδνπλ κε ηνλ έλαλ ή ηνλ άιινλ ηξφπν. Λνγηθφ είλαη πσο έλα πξφηππν δεδνκέλσλ ην νπνίν είλαη εχθνια κεηαβαιιφκελν κε γιψζζεο πξνγξακκαηηζκνχ νη νπνίεο επίζεο είλαη βαζηζκέλεο ζε απηέο ηηο δνκέο. ην JSOΝ, παίξλνπλ απηέο ηηο κνξθέο: Έλα αληηθείκελν (object) είλαη έλα άηαθην ζχλνιν απφ δεπγάξηα νλφκαησλ/ηηκψλ. Έλα αληηθείκελν (object) μεθηλάεη κε (αξηζηεξφ άγθηζηξν) θαη ηειεηψλεη κε (δεμηφ άγθηζηξν). Κάζε φλνκα αθνινπζείηαη απφ : (άλσ-θάησ ηειεία) θαη ηα δεπγάξηα νλφκαηνο/ηηκήο ρσξίδνληαη απφ, (θφκκα). status: 1, error: "Λανθασμένα στοιχεία", retry: boolean, Έλαο πίλαθαο (array) είλαη κηα ζπιινγή απφ ηηκέο ζε ζεηξά. Έλαο πίλαθαο (array) μεθηλάεη κε [ (αξηζηεξή αγγχιε) θαη ηειεηψλεη κε ] (δεμηά αγγχιε). Οη ηηκέο ρσξίδνληαη κε, (θφκκα). arrayofnumbers: [1, 2, 3, 4], arrayofobjs: [ name: "George", number: 3 ειίδα 19 απφ ζειίδα 71

], name: "Charalampos", number: 8 Μία ηηκή κπνξεί λα είλαη string κέζα ζε δηπιά quotes, ή αξηζκφο (number), ή true ή false ή null, ή αληηθείκελν (object) ή πίλαθαο (array). Απηέο νη ηηκέο κπνξεί λα είλαη θαη αλαθαηεκκέλεο. stringvalue: "Something", doublevalue: 16.5, booleanvalue: true, objvalue: prop1: 10, prop2: 30 Έλα string είλαη κηα ζπιινγή απφ κεδέλ ή πεξηζζφηεξνπο Unicode ραξαθηήξεο, κέζα ζε δηπιά quotes, ρξεζηκνπνηψληαο αληίζηξνθνπο θάζεηνπο \ (backslash) γηα escapes. Έλαο ραξαθηήξαο αληηπξνζσπεχεηαη σο έλαο κνλφο ραξαθηήξαο string. Έλα string κνηάδεη πνιχ ζαλ έλα C ή Java string. Έλαο αξηζκφο (number) κνηάδεη πάξα πνιχ κε έλα C ή Java αξηζκφ (number), κε ηελ δηαθνξά πσο ηα νθηαδηθά θαη δεθαεμαδηθά ζπζηήκαηα δελ ρξεζηκνπνηνχληαη. Σα θελά (whitespace) κπνξνχλ λα εηζαρζνχλ αλάκεζα ζε νπνηνδήπνηε δεπγάξη tokens. Με εμαίξεζε κεξηθψλ ιεπηνκεξεηψλ θσδηθνπνίεζεο (encoding), απηφ πεξηγξάθεη γεληθφηεξα ηελ γιψζζα (πξνγξακκαηηζκνχ). ειίδα 20 απφ ζειίδα 71

4 ΤΛΟΠΟΗΖΖ Γηα ηελ εθηέιεζε ηεο εθαξκνγήο καο ζα ρξεηαζηνχκε έλαλ Java Web Server πνπ λα ππνζηεξίδεη JAX-RS θαη κηα βάζε δεδνκέλσλ. Η επηινγή καο γηα ην πξψην ζα είλαη ν JBoss Application Server θαη γηα βάζε δεδνκέλσλ ζα ρξεζηκνπνηήζνπκε ηε PostgreSQL. 4.1 JBoss Ο JBoss είλαη θάηη πνιχ παξαπάλσ απφ έλαλ απιφ web server. Έρεη ηε δπλαηφηεηα λα δεκηνπξγεί έλα Pool απφ ζπλδέζεηο κε δηάθνξα άιια ζπζηήκαηα, φπσο πρ. κία βάζε δεδνκέλσλ. Αθφκα ππνζηεξίδεη ηελ Αξρηηεθηνληθή JAX-RS κε κηα θαζαξά δηθηά ηνπ πινπνίεζε πνπ νλνκάδεηαη RESTeasy. Ο JBoss είλαη έλαο application server πνπ κπνξεί λα ρεηξηζηεί transactions θαη άιιεο πξνρσξεκέλεο ηερλνινγίεο. ηελ πεξίπησζε καο ζα ην ρξεζηκνπνηήζνπκε γηα ηε δπλαηφηεηα λα δηαρεηξίδεηαη έλαλ αξηζκφ απφ ζπλδέζεηο κε βάζεηο δεδνκέλσλ, θαζψο θαη γηα ηε REST πινπνίεζε πνπ δηαζέηεη. Γηα λα εθηειεζηεί ε εθαξκνγή καο, ν παξαγψκελνο html θαη Javascript θψδηθαο ζα πξέπεη λα ηνπνζεηεζεί ζε έλαλ εηδηθφ θαηάινγν ηνπ JBoss, κε ηε κνξθή είηε ελφο war file, είηε ζαλ έλαο θάθεινο πνπ φκσο ζα έρεη ηελ θαηάιεμε ".war". Έλα war δελ είλαη ηίπνηα άιιν απφ zip αξρείν, κε δηαθνξεηηθή θαηάιεμε. Απηή ε δηαθνξά είλαη πνπ θάλεη ην JBoss λα αλαγλσξίζεη φηη απνηειεί κία Web Δθαξκνγή. Η νλνκαζία WAR πξνέξρεηαη απφ ηα αθξνλχκηα Web Archive. Πεξηζζφηεξεο πιεξνθνξίεο κπνξνχλ λα αληιεζνχλ απφ ηνλ ηζηφηνπν ηνπ JBoss: http://www.jboss.org/ 4.2 PostgreSQL Η PostgreSQL είλαη κία open source ζρεζηαθή βάζε δεδνκέλσλ πνπ ρξεζηκνπνηείηαη ζε επαγγεικαηηθέο εθαξκνγέο φηαλ ζέινπκε λα κεηψζνπκε ην θφζηνο πινπνίεζεο θαη δε ρξεηαδφκαζηε ηηο δπλαηφηεηεο ηεο Oracle. Η εγθαηάζηαζε ηεο κπνξεί λα γίλεη είηαη ζε Windows ή Linux OS ζηα νπνία εθηειείηαη ν δαίκνλαο (daemon service). 4.3 SmartGWT Όπσο είρακε αλαθεξζεί θαη ζε πξνεγνχκελν θεθάιαην, γηα ηε δεκηνπξγία ησλ Web Components ζα ζηεξηρζνχκε ζηε βηβιηνζήθε SmartGWT. Η ζπγθεθξηκέλε βηβιηνζήθε πξνζθέξεη πξαγκαηηθά επαγγεικαηηθνχ ηχπνπ widgets πνπ μεπεξλνχλ θαηά πνιχ ηηο ππφινηπεο βηβιηνζήθεο. Κάηη αθφκα πνπ πξνζθέξεη ε ζπγθεθξηκέλε βηβιηνζήθε είλαη ε δπλαηφηεηα λα πξαγκαηνπνηνχληαη Ajax θιήζεηο κε ειίδα 21 απφ ζειίδα 71

αληηθεηκελνζηξεθή ηξφπν. ηελ παξαθάησ εηθφλα πνπ πάξζεθε απφ ην ηζηνρψξν πνπ δηαηεξεί ε εηαηξεία (http://www.smartclient.com/smartgwt/showcase/#main) δίλεηαη κία άπνςε ησλ widgets. 4.4 Απσεία κώδικα Εικόνα 4.1 Τα γπαθικά ζηοισεία ηηρ SmartGWT ηε ζπλέρεηα ππάξρεη παξάζεζε ησλ πην ζεκαληηθψλ αξρείσλ ηεο εθαξκνγήο καο, θαζψο ν πιήξεο θψδηθαο μεπεξλά ηα 50 αξρεία. File missing.gwt.xml <?xml version="1.0" encoding="utf-8"?> <!-- When updating your version of GWT, you should also update this DTD reference, so that your app can take advantage of the latest GWT module capabilities. --> <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distrosource/core/src/gwt-module.dtd"> <module rename-to='missing'> <!-- Inherit the core Web Toolkit stuff. --> <inherits name='com.google.gwt.user.user'/> <inherits name='com.google.gwt.core.core'/> <inherits name="com.google.gwt.i18n.i18n"/> <!-- Inherit the default GWT style sheet. You can change --> <!-- the theme of your GWT application by uncommenting --> <!-- any one of the following lines. --> <inherits name='com.google.gwt.user.theme.clean.clean'/> <!-- <inherits name='com.google.gwt.user.theme.standard.standard'/> --> <!-- <inherits name='com.google.gwt.user.theme.chrome.chrome'/> --> <!-- <inherits name='com.google.gwt.user.theme.dark.dark'/> --> <!-- Other module inherits --> <inherits name="com.smartgwt.smartgwt"/> <inherits name="com.smartgwt.drawing"/> ειίδα 22 απφ ζειίδα 71

<!-- Specify the app entry point class. --> <entry-point class='com.taxidis.missing.client.missing'/> <!-- Specify the paths for translatable code --> <source path='client'/> <source path='shared'/> </module> File Missing.java package com.taxidis.missing.client; import com.google.gwt.core.client.entrypoint; import com.google.gwt.core.client.gwt; import com.google.gwt.dom.client.document; import com.taxidis.missing.client.util.clienttoolkit; /** * Entry point classes define <code>onmoduleload()</code>. */ public class Missing implements EntryPoint @Override public void onmoduleload() GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() public void onuncaughtexception(throwable e) ClientToolkit.showError(e); ); if (Document.get()!= null) Document.get().setTitle ("Missing People"); MainPage.instance(); File MainPage.java package com.taxidis.missing.client; import java.util.linkedhashmap; import java.util.linkedhashset; import java.util.map; import com.google.gwt.json.client.jsonarray; import com.google.gwt.json.client.jsonobject; import com.google.gwt.json.client.jsonparser; import com.smartgwt.client.rpc.rpccallback; import com.smartgwt.client.rpc.rpcrequest; import com.smartgwt.client.rpc.rpcresponse; import com.smartgwt.client.types.alignment; import com.smartgwt.client.types.verticalalignment; import com.smartgwt.client.util.sc; ειίδα 23 απφ ζειίδα 71

import com.smartgwt.client.widgets.canvas; import com.smartgwt.client.widgets.label; import com.smartgwt.client.widgets.layout.hlayout; import com.smartgwt.client.widgets.layout.vlayout; import com.taxidis.missing.client.panel.abstractmainpanel; import com.taxidis.missing.client.panel.accountpanel; import com.taxidis.missing.client.panel.loginform; import com.taxidis.missing.client.panel.searchpanel; import com.taxidis.missing.client.panel.viewpanel; import com.taxidis.missing.client.util.clienttoolkit; import com.taxidis.missing.shared.placeholder; import com.taxidis.missing.shared.userjsonkeys; public class MainPage extends HLayout public static final String BUTTOM_IMG_STYLE = "buttonimg"; private static final String WHOLE_LAYOUT_ID = "wholelayout"; private static final String MAIN_LAYOUT_ID = "mainlayout"; private static final String HEADER_LAYOUT_ID = "headerlayout"; private static final String INSTITUTE_CANVAS_STYLE = "institutecanvas"; private static final String SECTION_CANVAS_STYLE = "sectioncanvas"; private static class SingletonClass private static final MainPage INSTANCE = new MainPage(); public static MainPage instance() return SingletonClass.INSTANCE; private MissingMessages missingmessages; private VLayout main; private LoginForm loginform; private MenuLayout menulayout; private SearchPanel searchpanel; private ViewPanel viewpanel; private AccountPanel accountpanel; private AbstractMainPanel activepanel; private boolean searchrequiresfetch = false; private String firstnameofuser = null; private String lastnameofuser = null; private LinkedHashMap<Integer, String> countymapping; private LinkedHashMap<Integer, String> citymapping; private LinkedHashMap<Integer, LinkedHashSet<Integer>> countycitymapping; private LinkedHashMap<Integer, Integer> citycountymapping; private LinkedHashMap<Integer, String> statemapping; public MenuLayout getmenulayout() return menulayout; ειίδα 24 απφ ζειίδα 71

public void setloginrequired() loginform.setloginrequired(); private MainPage() this.setid(whole_layout_id); this.setstylename(whole_layout_id); this.setwidth100(); this.setheight100(); this.setalign(alignment.center); main = new VLayout(); main.setid(main_layout_id); main.setstylename(main_layout_id); main.setwidth(1024); main.setheight100(); this.addmember(main); initializeinfofromserver(); private void init() missingmessages = MissingMessagesSingleton.getInstance(); // create header layout HLayout headerlayout = new HLayout(); headerlayout.setid(header_layout_id); headerlayout.setstylename(header_layout_id); headerlayout.setwidth100(); headerlayout.setheight(100); headerlayout.setleft(0); headerlayout.setpadding(0); headerlayout.setmargin(0); Canvas institutecanvas = new Canvas(); institutecanvas.setwidth(340); institutecanvas.setheight100(); institutecanvas.setstylename(institute_canvas_style); institutecanvas.setlayoutalign(verticalalignment.bottom); headerlayout.addmember(institutecanvas); Canvas sectioncanvas = new Canvas(); sectioncanvas.setwidth("*"); sectioncanvas.setheight100(); sectioncanvas.setstylename(section_canvas_style); sectioncanvas.setalign(alignment.center); Label infolabel = new Label(); infolabel.setcontents( "<span class=\"headerinfo\"><br style=\"line-height: 10px\">" + missingmessages.headerinfo() + "</span>"); infolabel.setwidth100(); infolabel.setalign(alignment.center); sectioncanvas.addchild(infolabel); headerlayout.addmember(sectioncanvas); loginform = new LoginForm(); headerlayout.addmember(loginform); main.addmember(headerlayout); // create menu layout menulayout = new MenuLayout(); ειίδα 25 απφ ζειίδα 71

main.addmember(menulayout); // create menu layout. It contains the search title and the // search items searchpanel = new SearchPanel(); main.addmember(searchpanel); activepanel = searchpanel; private void initializeinfofromserver() final PlaceHolder<Integer> initializationcounter = new PlaceHolder<Integer>(0); final int finalcounter = 2; final PlaceHolder<Boolean> errorreported = new PlaceHolder<Boolean>(Boolean.FALSE); RPCCallback getallcitiescallback = new RPCCallback() @Override public void execute(rpcresponse response, Object rawdata, RPCRequest request) if(clienttoolkit.containserror(response, false)) if(errorreported.getvalue().booleanvalue()) return; errorreported.setvalue(boolean.true); reporterrorfrominitcallback(); return; initializeplaces(rawdata); int newval = initializationcounter.getvalue().intvalue() + 1; initializationcounter.setvalue(integer.valueof(newval)); if(newval == finalcounter) init(); draw(); ; ClientToolkit.sendRequest( ClientToolkit.HTTP_METHOD.GET, "rest/user/getallcities", null, ClientToolkit.CONTENT_TYPE.APPLICATION_JSON, null, getallcitiescallback, true, false, null); RPCCallback getallstatescallback = new RPCCallback() @Override public void execute(rpcresponse response, Object rawdata, RPCRequest request) if(clienttoolkit.containserror(response, false)) if(errorreported.getvalue().booleanvalue()) ειίδα 26 απφ ζειίδα 71