Διαδικτυακές Εφαρμογές Ενότητα 5: Servlets και JSPs

Σχετικά έγγραφα
ΜΑΘΗΜΑ: Διαδικτυακές Εφαρμογές

Διαδικτυακές Εφαρμογές Ενότητα 7: Προσπέλαση ΒΔ με το JDBC

Διαδικτυακές Εφαρμογές. Ενότητα 2: Enterprise Java Beans και Java Server Faces Μιχάλας Άγγελος Βούρκας Δημήτριος Τμήμα Μηχανικών Πληροφορικής ΤΕ

Ειδικά Θέματα Προγραμματισμού

Διαδικτυακές Εφαρμογές Ενότητα 1: JPA

Ειδικά Θέματα Προγραμματισμού

Τεχνικός Εφαρμογών Πληροφορικής

Εισαγωγή στις Σελίδες Εξυπηρετητή Java Java Server Pages (JSP)

Βασικές Έννοιες Web Εφαρμογών

Ειδικά Θέματα Προγραμματισμού

Διαδικτυακές Εφαρμογές Ενότητα 6: Servlets και JSPs (Παραδείγματα)

Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες

Ειδικά Θέματα Προγραμματισμού

Διαδικτυακές Εφαρμογές Ενότητα 4: Streams

Java Servlets: Principles and Programming 1/19

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 3: Constructors και destructors

Προγραμματισμός Διαδικτύου

Πτυχιακή εργασία. Ανάπτυξη παιχνιδιού πολλών παικτών

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 8 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: Τεχνολογία Java Server Pages (JSP)

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος Κεφάλαιο 1 ο Αρχές Διαχείρισης πληροφορίας στον Παγκόσμιο Ιστό... 15

Ειδικά Θέματα Προγραμματισμού

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ

Δίκτυα Υψηλών Ταχυτήτων Ενότητα 7: Διευθυνσιοδότηση Internet Protocol (IP) v4

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 6: Φιλικές συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Δομημένος Προγραμματισμός

Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Προγραμματισμός H/Y Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Τεχνολογίες Διαδικτύου. Server Side Scripting I PHP

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

Ειδικά Θέματα Προγραμματισμού

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 8: Αρχεία. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: Τεχνολογία Servlet

TEC410 Ανάπτυξη Δικτυακών Τόπων (Δ εξάμηνο)

Περιεχόμενα ΕΥΧΑΡΙΣΤΙΕΣ ΕΙΣΑΓΩΓΗ Σχετικά με τους συγγραφείς...24

Τα βασικά για Servlet

Εισαγωγή στην Πληροφορική

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Προγραμματισμός Διαδικτύου

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

Δίκτυα Υπολογιστών Ενότητα 10: Ethernet και ARP

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Υπολογιστικά Συστήματα

Προγραμματισμός Διαδικτύου

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στις Βάσεις Δεδομζνων II

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 9: Ειδικά θέματα γλώσσας C/C++. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

PHP/MySQL και Project

Κεφάλαιο 1. Βασικά Στοιχεία της Java... 13

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Προγραμματισμός H/Y Ενότητα 6: Δομές (structures) Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Μεταγλωττιστές. Ενότητα 6: Λεκτική ανάλυση (Μέρος 2 ο ) Αγγελική Σγώρα Τμήμα Μηχανικών Πληροφορικής ΤΕ

Ειδικά Θέματα Προγραμματισμού

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 5: Κληρονομικότητα. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Δίκτυα Υπολογιστών Ενότητα 9: Dynamic Host Configuration Protocol- DHCP

ΑΝΑΠΤΥΞΗ WEB ΕΦΑΡΜΟΓΩΝ ΜΕ JAVA SERVLETS

Τεχνολογίες Ανάπτυξης Εφαρμογών στο WEB

Τεχνολογίες Ανάπτυξης Ηλεκτρονικού Καταστήματος Μικρομεσαίας Επιχείρησης. Μικρομεσαίες Επιχειρήσεις και Καινοτομία

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΔΙΟΙΚΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ. Τεχνολογίες και Εφαρμογές Διαδικτύου

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

PHP 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Αξιολόγηση Υπηρεσιών ιαδικτύου µέσω Περιπτώσεων Μελέτης

ΤΕΙ ΗΠΕΙΡΟΥ Τμήμα Τηλεπληροφορικής & Διοίκησης

ΠΡΟΣΟΧΗ: Οι απαντήσεις πολλαπλής επιλογής µόνο πάνω στο ΦΥΛΛΟ ΑΠΑΝΤΗΣΕΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

Προγραμματισμός H/Y Ενότητα 3: Πίνακες αριθμών και χαρακτήρων. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

XAMPP Apache MySQL PHP javascript xampp

Προγραμματισμός Η/Υ. 7 η ενότητα: Αρχεία. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Προγραμματισμός Διαδικτύου

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

MICROSOFT INTERNET LOCATOR SERVER

Ειδικά Θέματα Δικτύων Ι

Δομημένος Προγραμματισμός

Προγραμματισμός Η/Υ. Χειρισμός Αρχείων. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Προγραμματισμός H/Y Ενότητα 2: Εντολές ελέγχου ροής. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Λογισµικό (Software SW) Λειτουργικά Συστήµατα και ίκτυα

TEC610 Δυναμικές Εφαρμογές Διαδικτύου (ΣΤ εξάμηνο)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Ειδικά Θέματα Δικτύων Ι

TEC510 Ανάπτυξη Δικτυακών Τόπων (Ε εξάμηνο) Διδάσκων: Ανδρέας Γιαννακουλόπουλος Επιστημονικός συνεργάτης Εργαστηρίου: Γιώργος Μηλιώτης

Προγραμματισμός Διαδικτύου

Σχεδίαση Δικτύων Υπολογιστών

ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. Επιβλέπων Καθηγητής: Αλέξανδρος Χατζηγεωργίου Εξεταστές: Χρήστος Γεωργιάδης. Τμήμα Εφαρμοσμένης Πληροφορικής

Προγραμματισμός Διαδικτύου

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Δυναμικές Ιστοσελίδες στο Πανελλήνιο Σχολικό Δίκτυο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Αντικειμενοστραφής Προγραμματισμός

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Transcript:

Διαδικτυακές Εφαρμογές Ενότητα 5: Servlets και JSPs Μιχάλας Άγγελος Τμήμα Μηχανικών Πληροφορικής ΤΕ

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα του ΤΕΙ Δυτικής Μακεδονίας και της Ανώτατης Εκκλησιαστικής Ακαδημίας Θεσσαλονίκης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3

Servlets και Java Server Pages (JSPs)

Σκοποί ενότητας Σε αυτή την ενότητα ασχολούμαστε με τα Servlets και τις Java Server Pages. 5

Περιεχόμενα ενότητας (1/5) Τι είναι ένας Web Server. Βήματα αίτησης / απάντησης. Στατικές σελίδες. Δυναμικές σελίδες. Servlet. Η λειτουργία ενός Servlet. 6

Περιεχόμενα ενότητας (2/5) Ένα απλό Servlet. Η δύναμη των Servlet. Διαδικαστικά. Με ποιους τρόπους μπορούμε να γράψουμε Servlets. GenericServlet και HttpServlet. Αλληλοεπίδραση με τον πελάτη. 7

Περιεχόμενα ενότητας (3/5) Αιτήσεις Hypertext Transport Protocol (HTTP). Ο κύκλος ζωής ενός Servlet. Η μέθοδος init. Παράδειγμα init. Η μέθοδος destroy. Παράδειγμα destroy. 8

Περιεχόμενα ενότητας (4/5) Πως να τρέξουμε ένα servlet. Τι είναι η σύνοδος (session) του χρήστη. Παρακολούθηση της συνόδου του χρήστη. Cookies. Session. Servlets και Database Connectivity. 9

Περιεχόμενα ενότητας (5/5) Τι άλλο μπορούμε να κάνουμε με τα Servlets. Οι σελίδες JSP και οι λειτουργίες τους. Σύγκριση μεταξύ Servlets και JSPs. Στοιχεία σεναρίων (scripts) JSP σελίδων. Προκαθορισμένες μεταβλητές. Αρχεία και JSPs σε μία JSP σελίδα. 10

Τι είναι ένας Web Server Web Server. Δέχεται HTTP requests. Επιστρέφει ως απάντηση Hyper Text Markup Language HTML αρχεία. Δημοφιλέστεροι Web Servers. Apache web server (της Apache Foundation) κι ο Internet Information Services - IIS (της Microsoft). Είναι αυτοί που συνήθως απαντάνε όταν γράφουμε μια διεύθυνση σε ένα φυλλομετρητή (web browser). 11

Βήματα αίτησης / απάντησης Σχήμα 1. Βήματα αίτησης / απάντησης. 12

Στατικές σελίδες Στατική είναι μία σελίδα που το περιεχόμενό της δεν μπορεί να αλλάξει από σύνοδο σε σύνοδο (session). Το μοντέλο αυτό ήταν αρκετό στο παρελθόν. 13

Δυναμικές σελίδες Καθώς οι υπηρεσίες στο Διαδίκτυο πλήθαιναν και οι τοπικές βάσεις δεδομένων μεταφέρονταν για να υποστηρίξουν τις υπηρεσίες, δημιουργήθηκε η ανάγκη δυναμικών σελίδων. 14

Servlet (1/2) Τι είναι ένα Servlet. Ενότητες κώδικα Java. Τύπου αίτησης/απόκρισης. Εκτελούνται σε web servers και τους επεκτείνουν κατά κάποιο τρόπο. Αποτελούν το Server Side τμήμα της Java. Σε αντίθεση με τα Applets που αποτελούν το Client Side τμήμα της Java. 15

Servlet (1/3) Αποτελούν το Server Side τμήμα της Java (Συνέχεια). Τα Servlets, όπως και τα applets, συνήθως δεν έχουν main μέθοδο. Χρησιμοποιούνται σε εφαρμογές που απαιτούν προεπεξεργασία. Δηλαδή κάποια επεξεργασία των δεδομένων που θα εμφανιστούν πριν την αποστολή τους στον αιτητή. Είναι κατά κάποιο τρόπο CGIs αλλά γραμμένα σε Java, Κληρονομούν όλα τα πλεονεκτήματα που προσφέρει η Java. 16

Servlet (2/3) Ένα servlet είναι μια κλάση όπως όλες οι άλλες Με την διαφορά ότι κάνει implement το javax.servlet.servlet interface. Τα περισσότερα servlets κάνουν επεκτείνουν (extend) την javax.servlet.http.httpservlet Σπανιότερα κάνουν επεκτείνουν την javax.servlet.genericservlet. Servlet API: http://java.sun.com/javaee/5/docs/api/. 17

Η λειτουργία ενός Servlet Σχήμα 2. Η λειτουργία ενός servlet. 18

Ένα απλό Servlet 19

Η δύναμη των Servlet (1/2) 1. Είναι ανεξάρτητα από την πλατφόρμα (platform independence). 2. Εκμεταλλεύονται πλήρως τα Java API, rmi και database connectivity. 3. Εύκολη προσθήκη συστατικών δημιουργημένων από τρίτους (3rd party components). 4. Αποδοτικότητα κι Αντοχή. Μένουν στην μνήμη μεταξύ διαδοχικών καλεσμάτων. 20

Η δύναμη των Servlet (2/2) 5. Ασφάλεια Κώδικα. Garbage Collector, Διαχείριση Εξαιρέσεων. 6. Κομψότητα. Αντικειμενοστραφής προσέγγιση, Απλότητα, Clean Code, Modular. 7. Εύκολη ενσωμάτωση νέων υπηρεσιών. 21

Διαδικαστικά Όταν ο server (για παράδειγμα Tomcat) δέχεται την αίτηση από τον πελάτη. Καλεί το σχετικό servlet δίνοντας του ως είσοδο τις παραμέτρους του χρήστη. Το servlet εμπεριέχει την λογική που πρέπει να εκτελεστεί με είσοδο τις παραμέτρους του χρήστη. Απαντάει επιστρέφοντας μια HTML σελίδα. Η σελίδα αυτή είναι δυναμική. Παρήχθη μόλις ζητήθηκε και με βάση τις εκάστοτε παραμέτρους του χρήστη. 22

Με ποιους τρόπους μπορούμε να γράψουμε Servlets; (1/2) Καλώντας άμεσα τα classes. Τοποθετώντας τον παρακάτω κώδικα Java στον server και κάνοντάς τον compile. 23

Με ποιους τρόπους μπορούμε να γράψουμε Servlets; (2/2) Java Server Pages JSPs. Προσθήκη snippets servlet code απευθείας στις *.jsp σελίδες (Scriptlets). Παρόμοιος τρόπος με την ASP (Active Server Pages). 24

GenericServlet και HttpServlet Όλα τα servlets υλοποιούν τη διεπαφή (interface) τους μέσω μίας από τις παρακάτω κλάσεις. GenericServlet (javax.servlet package). Γενικά servlets ανεξάρτητα πρωτοκόλλου. HttpServlet (javax.servlet.http package). Http servlets. 25

Αλληλοεπίδραση με τον πελάτη (1/2) Όταν ένα servlet δέχεται ένα κάλεσμα από τον πελάτη (client), λαμβάνει δύο αντικείμενα (objects). ServletRequest. Εξασφαλίζει το αίτημα από τον πελάτη προς τον server. ServletResponse. Εξασφαλίζει την απόκριση από το servlet πίσω στον πελάτη. Τα αντικείμενα ServletRequest και ServletResponse είναι διεπαφές που ορίζονται στο πακέτο javax.servlet. 26

Αλληλοεπίδραση με τον πελάτη (2/2) Βασικές μέθοδοι του HttpServlet. doget. dopost. 27

Αιτήσεις HTTP (1/2) Είναι συνήθως GET ή POST. Η HTML ετικέτα <form> περιέχει την ιδιότητα action, που μπορεί να λάβει τις τιμές get ή post. Στην περίπτωση της GET οι παράμετροι αποστέλλονται μετά από το σύμβολο? του URL. Παράδειγμα: http://www.google.com/search?hl=en&ie=utf- 8&oe=UTF-8&q=servlets. Το σύμβολο & διαχωρίζει τις διάφορες παραμέτρους μεταξύ τους. Μόνο ένας συγκεκριμένος αριθμός χαρακτήρων μπορεί να αποσταλεί με αυτό τον τρόπο. 28

Αιτήσεις HTTP (2/2) Είναι συνήθως GET ή POST (Συνέχεια). Αντίθετα η POST μπορεί να στείλει θεωρητικά άπειρα Bytes. 29

Ο κύκλος ζωής ενός Servlet Κάθε servlet έχει τον ίδιο κύκλο ζωής. Ο server το φορτώνει (load) και το αρχικοποιεί (initialize). Το servlet δέχεται μηδέν ή και περισσότερα client requests. Ο server το κάνει remove. Ορισμένοι servers εκτελούν αυτό το βήμα μόνο όταν κάνουν shut down. 30

Η μέθοδος init Η μέθοδος init μπορεί να χρησιμοποιηθεί για την αρχικοποίηση ενός servlet. Εκτελείται πριν εκτελεσθεί η doget ή η dopost ή οποιαδήποτε άλλη μέθοδος. Tην πρώτη φορά που δημιουργείται ένα στιγμιότυπο. Υπάρχουν δύο υπογραφές της. public void init(). public void init(servletconfig) για πρόσβαση σε πληροφορίες σχετικά με τις ρυθμίσεις ενός servlet. 31

Παράδειγμα init 32

Η μέθοδος destroy Η μέθοδος destroy καλείται από το servlet container. Πριν ένα servlet γίνει μη διαθέσιμο και αφού έχουν τερματισθεί όλα τα threads που το προσπελάζουν. Ή έχει λήξει η περίοδος μη χρήσης του στιγμιότυπου για μια εφαρμογή. Αυτή η μέθοδος αποτελεί το κατάλληλο σημείο για εργασίες εκκαθάρισης (clean up) όπως. Αποδέσμευση μνήμης. Αποθήκευση στοιχείων που θα πρέπει να αποθηκευθούν και βρίσκονται στην μνήμη του servlet. 33

Παράδειγμα destroy 34

Πως να τρέξουμε ένα servlet (1/4) Διαδικασία. 1. Να εγκαταστήσουμε ένα servlet engine. Για παράδειγμα Sun s JavaServer ή Tomcat. 2. Να προμηθευτούμε το Java Servlet API το οποίο περιέχει τις κλάσεις. javax.servlet javax.servlet.http 35

Πως να τρέξουμε ένα servlet (2/4) Παρατηρήσεις. O Javaserver που θα προμηθευτούμε συνήθως τα περιέχει. Στον TOMCAT είναι το $CATALINA_HOME/common/lib/servlet.api. Να γράψουμε το servlet class στην java και να το κάνουμε compile. Να τοποθετήσουμε το class σε ένα directory του servlet engine (Web directory). 36

Πως να τρέξουμε ένα servlet (3/4) Παρατηρήσεις (Συνέχεια). Στον tomcat είναι το $CATALINA_HOME/ webapps/myapp/web-inf/classes/. Να ξεκινήσουμε το servlet engine. To servlet engine τώρα ανταποκρίνεται σε αιτήσεις που γίνονται στο port 8080. Για παράδειγμα: http://servername:8080/servlets/helloworld. 37

Πως να τρέξουμε ένα servlet (4/4) Μπορούμε να εκτελέσουμε ένα servlet απευθείας από κάποια εργαλεία Java όπως τα. Symantec VisualCafe 3.0. Netbeans. Έχει δική του μηχανή για servlets (servlet engine). 38

Τι είναι η σύνοδος (session) του χρήστη Το HTTP είναι ένα stateless πρωτόκολλο. Κάθε φορά που ο χρήστης ζητά μία σελίδα από έναν web server. Η αίτηση δεν περιέχει πληροφορίες σχετικά με το ποιος την κάνει ή ποιες αιτήσεις είχε κάνει νωρίτερα. Δημιουργείται προβλήματα όταν θέλουμε να παρακολουθήσουμε τις ενέργειες του χρήστη σε διαδοχικές σελίδες που επισκέπτεται σε έναν ιστότοπο. 39

Παρακολούθηση της συνόδου του χρήστη (1/2) Cookies. Αποθηκεύονται στον browser. Υπάρχει υψηλού επιπέδου API με μεθόδους για την διαχείριση των Cookies. Για παράδειγμα το javax.servlet.http.cookie. Παρέχει τις μεθόδους HttpServletResponse.addCookie(Cookie cookie) και HttpServletRequest.getCookies(). 40

Παρακολούθηση της συνόδου του χρήστη (2/2) Session. Διατηρείται στον web server. Κάθε φορά που ανοίγουμε τον browser δημιουργείται νέο. Ο web server καθορίζει τον χρόνο διάρκειας του session (TTL- Time To Live). Επανεγγραφή του URL (URL rewriting). Κρυμμένα πεδία φόρμας. 41

Cookies (1/2) Με τα cookies, ο server μπορεί να αποθηκεύσει πληροφορία στον δίσκο του client. Η πληροφορία αυτή, παραμένει προσβάσιμη από τον server για κάποιο χρόνο και κάτω από ορισμένες συνθήκες. Έτσι ένας server μπορεί. Εξυπηρετώντας μεγάλο αριθμό clients, να συμπεριφέρεται στον καθένα με ελαφρά εξειδικευμένο τρόπο. Χωρίς ο ίδιος ο server να είναι υποχρεωμένος να διατηρεί ένα τεράστιο όγκο πληροφορίας. 42

Τυπική περίπτωση. Cookies (2/2) Όταν επισκεπτόμαστε μία ιστοσελίδα. Την επομένη ημέρα και βλέπουμε ότι αυτή θυμάται τις επιλογές που κάναμε την προηγουμένη. Η πληροφορία αυτή δεν κρατήθηκε στον server, αλλά στον client. Άλλωστε, είναι χρήσιμη μόνον όταν ο συγκεκριμένος client επανασυνδεθεί στον ίδιο server. 43

Session (1/5) Η δημιουργία ενός αντικειμένου της κλάσης HttpSession στον server, είναι ένας άλλος τρόπος να κρατείται πληροφορία σχετική με τη σύνοδο. Εδώ, η πληροφορία κρατείται στον server. Σε αυτή την περίπτωση. Με την πρώτη άφιξη ενός POST δημιουργούμε αντικείμενο της HttpSession με την μέθοδο request.getsession(true) του request object. 44

Session (2/5) Πλέον, σε κάθε άφιξη GET, η ίδια μέθοδος με παράμετρο false, μας επιστρέφει την αναφορά στο αντικείμενο που δημιουργήσαμε. Αν δηλαδή το mysession είναι ένα αντικείμενο HttpSession και το valuenames ένα array από String, με τις εντολές. mysession = request.getsession(false); valuenames = mysession.getvaluenames() ; λαμβάνουμε τα ονόματα των παραμέτρων που κρατούνται στον server στα πλαίσια του session. Η αναφορά στο αντικείμενο mysession διατηρείται μέσω ενός cookie. Του sessionid με τιμή έναν τυχαίο αριθμό δημιουργούμενο από τον server. 45

Session (4/5) Το sessionid cookie διατηρείται στη μνήμη cache του browser κι όχι στον δίσκο του client. Αυτό σημαίνει ότι αν κλείσουμε τον browser, Χάνεται το αποθηκευμένο sessionid. Έτσι χάνεται κάθε τρόπος αναφοράς από τον client στο αντικείμενο session του server. Στην μεριά του server. Το αντικείμενο session θα διαγραφεί με timeout, της τάξεως των 20 λεπτών. 46

Session (5/5) Συνοψίζοντας. Τα cookies είναι ζεύγη ονόματος/τιμής που αποθηκεύονται στον δίσκο του client και διατηρούνται εκεί για χρονικό διάστημα timeout. Το sessionid cookie είναι ένα ζεύγος sessionid/τυχαίος αριθμός που αποθηκεύεται στην cache του browser του client και διατηρείται εκεί όσο ο browser παραμένει ανοικτός. Το sessionid αποστέλλεται ως παράμετρος σε κάθε αποστολή από τον client στον server. Ώστε να μπορεί αυτός να συνδέσει τον browser με το συγκεκριμένο session. Αν για κάποιο συγκεκριμένο διάστημα δεν έρχεται η παράμετρος αυτή από τον client στον server, τότε σβήνεται στον server το αντικείμενο session. 47

Servlets και Database Connectivity (1/2) Τα Servlets μπορούν να συνδεθούν με βάσεις δεδομένων με την χρήση drivers. Σε άλλες πλατφόρμες με JDBC, σε Windows με Java Database Connectivity API - Open Database Connectivity (JDBC-ODBC) bridge. Το ίδιο ισχύει και για όλα τα αλλά προγράμματα Java. Τα JDBC είναι database independent. Π.χ. με αλλαγή 2 γραμμών κώδικα μπορούμε να αλλάξουμε την Sybase βάση μας σε Oracle. Χωρίς αλλαγή του υπόλοιπου κώδικα. 48

Servlets και Database Connectivity (2/2) Μπορούμε να επεξεργαστούμε στοιχεία από διαφορετικές και ανομοιογενείς βάσεις δεδομένων μέσω του κώδικα μας. Κύριο πλεονέκτημα. Τα Servlets μπορούν να διατηρούν Open Database Connections. Έτσι, πολλά requests μπορούν να εξυπηρετηθούν από ένα κάλεσμα, σε αντίθεση με τα Computergenerated imagery (CGI). 49

Τι άλλο μπορούμε να κάνουμε με τα Servlets; (1/2) Τρόποι επικοινωνίας ενός servlet με ένα άλλο servlet. 1. Servlet Chaining (Κάνοντας διαδοχικά Post, Get). Μπορούμε να ενώσουμε μια σειρά από servlets, με τον ίδιο τρόπο που θα το κάναμε με τα CGI s. θα μπορούσε για παράδειγμα να είναι μια διαδοχική καταχώρηση δεδομένων. 50

Τι άλλο μπορούμε να κάνουμε με τα Servlets; (2/2) 2. Servlet Interface through a Database. Καταχωρούμε στοιχεία από ένα servlet σε μια βάση δεδομένων. Μπορεί να τα ανακτήσει ένα άλλο servlet ταυτόχρονα. Δίνεται η εικόνα ότι επικοινωνούν ταυτόχρονα. Για παράδειγμα για ένα Chat Room. 51

Οι σελίδες JSP (1/3) Σελίδες HTML που εκτός των ετικετών HTML περιέχουν και ειδικές ετικέτες με κώδικα Java. Οι ετικέτες αυτές είναι της μορφής: <% java κώδικας %>. Περιέχουν. Πρότυπα δεδομένα. Δυναμική πληροφορία. 52

Οι σελίδες JSP (2/3) Μπορούν να χρησιμοποιήσουν. JavaBeans. Προτυποποιημένες σχετικά με το σχεδιασμό και την ονοματολογία τους κλάσεις Java. Χρησιμοποιούνται για την υλοποίηση συγκεκριμένων λειτουργιών, όπως επικοινωνία με μία βάση δεδομένων. 53

Οι σελίδες JSP (3/3) Μπορούν να χρησιμοποιήσουν (Συνέχεια). Tag Libraries. Tag που μπορεί να ορίσει ο προγραμματιστής. Αντιστοιχούν σε κώδικα κι εκτελούν διάφορες λειτουργίες. Είναι ιδιαίτερα χρήσιμα για δημιουργία επαναχρησιμοποιήσιμων τμημάτων κώδικα. 54

Η λειτουργία των JSP (1/5) Σχήμα 3. Η λειτουργία των JSP. 55

Η λειτουργία των JSP (2/5) Κάθε σελίδα JSP βασίζεται στα servlets. Η μηχανή της JSP παράγει από την.jsp σελίδα πηγαίο κώδικα servlet. Την πρώτη φορά που καλείται. Μεταγλωττίζεται αυτός ο πηγαίος κώδικας σε ένα class file. Για την τρέχουσα αλλά και για μελλοντική χρήση. 56

Η λειτουργία των JSP (3/5) Συγκεκριμένα έχουμε τα παρακάτω βήματα. 1. Ένας web browser αναζητά (request) μία σελίδα.jsp. 2. Ο server βρίσκει την ζητούμενη σελίδα.jsp και την παραδίδει στο μηχανή JSP (JSP Servlet Engine). 3. Την πρώτη φορά η σελίδα.jsp περνιέται από τον σχετικό parser. Τις άλλες φορές εκτελείται το βήμα 7. 57

Η λειτουργία των JSP (4/5) 4. Δημιουργείται ο πηγαίος κώδικας του servlet από το αρχείο.jsp. Δημιουργείται αυτόματα μία σειρά από println statements. Ισοδύναμα ως προς την τελική εμφάνιση με τα γραμμένα σε HTML. 5. Ο πηγαίος κώδικας μεταγλωττίζεται σε class. 6. Δημιουργείται το servlet με κλήση των μεθόδων init και service. 58

Η λειτουργία των JSP (5/5) 7. Τα παραγόμενα από το servlet δεδομένα αποστέλλονται από τον server στον client. Για παρουσίαση ως κοινή HTML σελίδα. 59

Σύγκριση μεταξύ Servlets και JSPs Στα Servlets. Το παραγόμενο HTML «εκτυπώνεται» από java κλάσεις. Στις σελίδες JSP. Java κώδικας εμπεριέχεται σε HTML κώδικα. (1/2) Σχήμα 4. Σύγκριση μεταξύ Servlets και JSPs. 60

Σύγκριση μεταξύ Servlets και JSPs (2/2) Τα servlets αν και πανίσχυρα έχουν το παρακάτω μειονέκτημα. Αν κάτι πρέπει να αλλάξει στην παραγόμενη δυναμική σελίδα, όπως το χρώμα του background. Πρέπει η κλάση να ξαναγίνει compile και να αρχικοποιηθεί πάλι ο servlet container. Οι σελίδες JSP προσπερνούν αυτό το πρόβλημα. 61

3 είδη. Στοιχεία σεναρίων (scripts) JSP σελίδων (1/4) Εκφράσεις (expressions). Τμήματα κώδικα (scriptlets). Δηλώσεις (declarations). 62

Στοιχεία σεναρίων (scripts) JSP σελίδων (2/4) Εκφράσεις (expressions). Είναι εντολές Java που περιέχονται μεταξύ των σημάνσεων <%= και %>. Αποτιμούνται άμεσα όπου εμφανίζονται και το αποτέλεσμά τους εισάγεται σαν κείμενο στο σημείο όπου εμφανίζονται. Παράδειγμά: <%= 17 + 12 %>. Στο html το αποτέλεσμα θα είναι 29. 63

Στοιχεία σεναρίων (scripts) JSP σελίδων (3/4) Τμήματα κώδικα (scriptlets). Είναι τμήματα κώδικα Java που περιέχονται μεταξύ των σημάνσεων <% και %>. Χρησιμοποιούνται για δηλώσεις μεταβλητών, εντολών κλπ.. Οι μεταβλητές που δηλώνονται σε αυτά, είναι τοπικές μεταβλητές και άρα ασφαλής σε ταυτόχρονη προσπέλαση. Αυτό μπορεί να έχει συνέπειες στην απόδοση. Για το λόγο αυτό υπάρχουν οι δηλώσεις. 64

Στοιχεία σεναρίων (scripts) JSP Δηλώσεις (declarations). σελίδων (4/4) Είναι δηλώσεις μεταβλητών αλλά και μεθόδων που περιέχονται μεταξύ των σημάνσεων <%! και %>. Οι δηλώσεις αυτών των μεταβλητών και μεθόδων έχουν εμβέλεια όλη την JSP σελίδα και όχι μόνο την μέθοδο εξυπηρέτησης του πελάτη (get / post). Δεν μπορούν να παράγουν output στον χρήστη. Αν πρόκειται για μεταβλητές. Δεν είναι ασφαλείς σε περίπτωση ταυτόχρονης προσπέλασης, αλλά ακριβώς επειδή δημιουργούνται μία φορά για κάθε αντικείμενο servlet είναι πιο αποδοτικό να χρησιμοποιούμε δηλώσεις. 65

Προκαθορισμένες μεταβλητές (1/6) Υπάρχουν κάποιες προκαθορισμένες μεταβλητές. Δημιουργούνται αυτόματα στην μέθοδο εξυπηρέτησης (post, get) μιας σελίδας JSP. Οι μεταβλητές αυτές είναι διαθέσιμες για τους προγραμματιστές σελίδων JSP. Μπορούν να τις χρησιμοποιήσουμε μέσα από τμήματα κώδικα (scriptlets) κι εκφράσεις (JSP expressions). Οι μεταβλητές ΔΕΝ μπορούν να χρησιμοποιηθούν σε δηλώσεις μεθόδων (declarations). Οι μέθοδοι που δηλώνονται δεν έχουν ορατότητα στις τοπικές μεταβλητές της μεθόδου εξυπηρέτησης. 66

Προκαθορισμένες μεταβλητές (2/6) Request. Είναι το αντίστοιχο του HttpServletRequest αντικειμένου που είναι παράμετρος στην μέθοδο εξυπηρέτησης της αίτησης του χρήστη (π.χ. doget ή dopost) για τα servlets. Π.χ. αν θέλουμε να ανακτήσουμε την τιμή μιας παραμέτρου που δίνεται από μία φόρμα σε μία JSP σελίδα καλούμε την request.getparameter(<όνομα_παραμέτρου>). Response. Είναι το αντίστοιχο του HttpServletResponse αντικειμένου που είναι παράμετρος στην μέθοδο εξυπηρέτησης της αίτησης του χρήστη (π.χ. doget ή dopost) για τα servlets. 67

Προκαθορισμένες μεταβλητές (3/6) Out. Είναι το αντίστοιχο του PrintWriter που στα servlets ανακτούμε καλώντας την μέθοδο getwriter() στο αντικείμενο HttpServletResponse. 68

Προκαθορισμένες μεταβλητές (4/6) Session. Είναι ένα προ-δημιουργημένο αντικείμενο τύπου HttpSession. Παρέχει τις μεθόδους getattribute και setattribute, για την ανάκτηση κι αποθήκευση ιδιοτήτων αντίστοιχα στο session του χρήστη με τον δικτυακό τόπο. Για να απαγορεύσετε την συμμετοχή μίας σελίδας JSP σε sessions. Μπορείτε να χρησιμοποιήσετε την οδηγία σελίδας page, θέτοντας την ιδιότητα session στην τιμή false ως εξής: <%@page session= false %>. Η προκαθορισμένη τιμή είναι true. 69

Προκαθορισμένες μεταβλητές (5/6) Application. Είναι το αντικείμενο ServletContext. Config. Στα servlets επιστρέφεται από την μέθοδο ServletConfig.getContext(). Αυτό είναι το αντικείμενο ServletConfig της σελίδας. Η κύρια χρήση του είναι η ανάκτηση παραμέτρων αρχικοποίησης για τη σελίδα. 70

Προκαθορισμένες μεταβλητές (6/6) pagecontext. Είναι αντικείμενο javax.servlet.jsp.pagecontext. Η κυριότερη δυνατότητα που παρέχεται είναι η αποθήκευση και η ανάκτηση αντικειμένων μέσω των μεθόδων getattribute και setattribute. Σε τέσσερις διαφορετικές εμβέλειες (scopes), που μπορεί να είναι application, page, session και request. Page. Αυτό το αντικείμενο είναι συνώνυμο με το this για το παραγόμενο servlet. 71

Αρχεία και JSPs σε μία JSP σελίδα (1/2) Μπορούμε να περιλάβουμε σε μία σελίδα JSP περιεχόμενα που βρίσκονται σε άλλες σελίδες JSP ή αρχεία HTML. Εισάγουμε σε οποιοδήποτε σημείο της σελίδας την εντολή include με την ακόλουθη σύνταξη: <%@ include file= όνομα_αρχείου %>. Το όνομα αρχείου μπορεί να έχει μία σχετική διαδρομή. Η συμπερίληψη του αρχείου γίνεται κατά την διάρκεια της μεταγλώττισης της JSP σελίδας σε servlet. 72

Αρχεία και JSPs σε μία JSP σελίδα (2/2) Αυτό έχει μία σημαντική συνέπεια. Αν αλλάξουν τα περιεχόμενα του περιλαμβανόμενου αρχείου. Οι σελίδες που το περιλαμβάνουν δεν θα αλλάξουν παρά μόνο αν γίνει ξανά η μεταγλώττιση τους. 73

Βιβλιογραφία 1. Java προγραμματισμός, Όγδοη έκδοση, Deitel Paul J., Deitel Harvey M., Εκδόσεις Γκιούρδας Μ.. 2. «Προγραμματισμός Internet και World Wide Web», Deitel Paul J., Deitel Harvey M., Εκδόσεις Γκιούρδας Μ.. 3. «Πλήρες εγχειρίδιο της Java 6», Lemay C, Εκδόσεις Γκιούρδας Μ., Αθήνα 2007. 74

Τέλος Ενότητας