νόη α 5: Servlets και JSPs - openclass.teiwm.gr · 3 . Servlets και Java Server ......

Preview:

Citation preview

Διαδικτυακές Εφαρμογές

Ενότητα 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, με τις εντολές.

λαμβάνουμε τα ονόματα των παραμέτρων που κρατούνται

στον server στα πλαίσια του session.

• Η αναφορά στο αντικείμενο mySession διατηρείται μέσω ενός cookie. – Του sessionID με τιμή έναν τυχαίο αριθμό δημιουργούμενο

από τον server.

mySession = request.getSession(false); valueNames = mySession.getValueNames() ;

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 μπορούν να εξυπηρετηθούν από ένα κάλεσμα, σε αντίθεση με τα Computer-generated 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 (1/2)

• Στα Servlets.

• Το παραγόμενο HTML «εκτυπώνεται» από java κλάσεις.

• Στις σελίδες JSP.

• Java κώδικας εμπεριέχεται σε HTML κώδικα.

Σχήμα 4. Σύγκριση μεταξύ Servlets και JSPs.

60

Σύγκριση μεταξύ Servlets και JSPs (2/2)

• Τα servlets αν και πανίσχυρα έχουν το παρακάτω μειονέκτημα.

– Αν κάτι πρέπει να αλλάξει στην παραγόμενη δυναμική σελίδα, όπως το χρώμα του background.

– Πρέπει η κλάση να ξαναγίνει compile και να αρχικοποιηθεί πάλι ο servlet container.

• Οι σελίδες JSP προσπερνούν αυτό το πρόβλημα.

61

Στοιχεία σεναρίων (scripts) JSP σελίδων (1/4)

• 3 είδη.

– Εκφράσεις (expressions).

– Τμήματα κώδικα (scriptlets).

– Δηλώσεις (declarations).

62

Στοιχεία σεναρίων (scripts) JSP σελίδων (2/4)

• Εκφράσεις (expressions).

– Είναι εντολές Java που περιέχονται μεταξύ των σημάνσεων <%= και %>.

– Αποτιμούνται άμεσα όπου εμφανίζονται και το αποτέλεσμά τους εισάγεται σαν κείμενο στο σημείο όπου εμφανίζονται.

• Παράδειγμά: <%= 17 + 12 %>.

– Στο html το αποτέλεσμα θα είναι 29.

63

• Τμήματα κώδικα (scriptlets). – Είναι τμήματα κώδικα Java που περιέχονται μεταξύ των

σημάνσεων <% και %>. – Χρησιμοποιούνται για δηλώσεις μεταβλητών, εντολών κλπ. . – Οι μεταβλητές που δηλώνονται σε αυτά, είναι τοπικές

μεταβλητές και άρα ασφαλής σε ταυτόχρονη προσπέλαση. • Αυτό μπορεί να έχει συνέπειες στην απόδοση. • Για το λόγο αυτό υπάρχουν οι δηλώσεις.

Στοιχεία σεναρίων (scripts) JSP σελίδων (3/4)

64

Στοιχεία σεναρίων (scripts) JSP σελίδων (4/4)

• Δηλώσεις (declarations).

– Είναι δηλώσεις μεταβλητών αλλά και μεθόδων που περιέχονται μεταξύ των σημάνσεων <%! και %>.

– Οι δηλώσεις αυτών των μεταβλητών και μεθόδων έχουν εμβέλεια όλη την 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.

• Στα servlets επιστρέφεται από την μέθοδο ServletConfig.getContext().

• Config.

– Αυτό είναι το αντικείμενο 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

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

Recommended