Jakarta Ενότητα 2 - Using a Servlet to Display Dynamic Content
Jakarta Ενότητα 2 - Using a Servlet to Display Dynamic Content
Στο σημερινό δωρεάν μάθημα Jakarta EE θα δούμε πως να δείχνουμε dynamic content με την χρήση ενός Servlet. Θα χρησιμοποιήσουμε το ίδιο απλό παράδειγμα που δημιουργήσαμε στην Ενότητα 1 με την προσθήκη κάποιου ελάχιστου κώδικα.
Όπως ήδη έχουμε δει, ένα servlet είναι μια java κλάση, πού επειδή κληρονομεί από το httpservlet, έχει έξτρα ιδιότητες που του επιτρέπουν να διαχειρίζεται http αιτήματα.
Το γεγονός ότι έχουμε να κάνουμε με μια java κλάση μας δίνει το δικαίωμα να δημιουργήσουμε μεταβλητές και μεθόδους. Κάποιες από τις μεταβλητές θα χρησιμοποιηθούν τοπικά μέσα στις μεθόδους, και άλλες θα είναι σε επίπεδο κλάσης και οι τιμές του θα αλλάζουν σε σχέση με το input από τον χρήστη ή καποια πληροφορία που θα λάβουν από τον application server.
Στο παράδειγμα μας, θα δημιουργήσουμε μια μεταβλητή με το όνομα currentDataAndTime. Αφού έχουμε να κάνουμε με java κλάση, τότε λογικό είναι να θέλουμε να καλέσουμε την συγκεκριμένη μεταβλητή και να δούμε την τιμή που περιέχει. Μέχρι εδώ ακούγονται όλα λογικά, αλλά υπάρχει μια μικρή αλλά σημαντική λεπτομέρεια – η java κλάση (δηλαδή το servlet) τρέχει επάνω στον Application Server και αυτό κατά συνέπεια αυτόματα σημαίνει ότι υπάρχει πιθανότητα πολλαπλοί χρήστες να ζητήσουν ταυτόχρονα την ίδια πληροφορία δηλαδή να ζητήσουν την τιμή της μεταβλητής. Αυτό ίσως προκαλέσει πρόβλημα στην εφαρμογή σας. Ας το αναλύσουμε λίγο περισσότερο.
Τα Servlets είναι mutlithreaded από κατασκευή τους οπότε ταυτόχρονη χρήση του Servlet από πολλαπλούς χρήστες δεν είναι πρόβλημα. Όταν όμως κάποια μεταβλητή ορίζεται σε επίπεδο Servlet κλάσης (και όχι μέσα σε κάποια μέθοδο σαν τοπική μεταβλητή) τότε είναι ευθύνη του προγραμματιστή να προστατέψει την λειτουργία της και να βεβαιώσει το γεγονός ότι μόνο ένας χρήστης κάθε φορά μπορεί να αλλάξει την τιμή της μεταβλητής. Πως μπορούμε να λύσουμε αυτό το πρόβλημα? Εφαρμόζοντας απλή java λογική και χρησιμοποιώντας την λέξη κλειδί synchronize σε όσο το δυνατόν λιγότερες γραμμές κώδικα για να μην επιβαρύνουμε την απόδοση του συστήματος.
Μπορείτε να ανατρέξετε στην Ενότητα 1 και να αντιγράψετε το project που είχαμε δημιουργήσει. Η μόνη αλλαγή που έχουμε να κάνουμε τώρα στο Servlet είναι να προσθέσουμε μια καινούργια μεταβλητή είδος LocalDateTime και να την καλέσουμε μέσα στην processRequest μέθοδο προσθέτοντας το synchronized.
Αν τρέξουμε τώρα το project μας θα δούμε το εξής αποτέλεσμα στον browser.
Ένας από τους λόγους που τα Servlet είναι διάσημα και ακόμα χρησιμοποιούνται σε εφαρμογές είναι γιατί μπορούν να εμφανίσουν το περιεχόμενο μεταβλητών που οι τιμές τους μεταβάλλονται. Το περιεχόμενο των μεταβλητών ίσως προέρχεται από τον server, την βάση ή από τον ίδιο τον χρήστη.
Στο παράδειγμα μας, το servlet παρουσιάζει στον browser την ώρα και την ημερομηνία την στιγμή που το κάλεσε ο χρήστης. Όταν ο χρήστης καλεί να δει το servlet, καλείται η doGet μέθοδο, η οποία με την σειρά της καλεί την processRequest, στην οποία έχουν περάσει τα request και response αντικείμενα. Η ημερομηνία και η ώρα, αφού το Servlet τα λάβει από τον server δημιουργώντας ένα LocalDateTime αντικείμενο, τα αναθέτει στην μεταβλητή currentDateAndTime. Κάθε φορά που κάποιος χρήστης καλεί το servlet, αυτό θα δείχνει την ημερομηνία και ώρα την στιγμή που έγινε το αίτημα. Φυσικά, δεν είναι ανάγκη να περιορίσουμε το παράδειγμα μας σε αντικείμενο είδος ημερομηνίας. Μπορείτε κάλλιστα να προσθέσετε μια int μεταβλητή που η τιμή της θα προέλθει από μια αριθμητική πράξη μέσα από τον Servlet ή δεδομένα που μπορεί να έχουν προέλθει από ένα αίτημα σε μια βάση δεδομένων.
ΕΙΣΗΓΗΤΗΣ
Μιχάλης Κασάπογλου
Ο Μιχάλης Κασάπογλου, είναι ένας από τους πιο έμπειρους τεχνικούς εκπαιδευτές στον χώρο του προγραμματισμού με πάνω από 20 χρόνια εμπειρία. Έχει εργαστεί σαν IT Operations Manager, Senior Programmer, και Training Team Leader ενώ κατέχει και αρκετές πιστοποιήσεις που καλύπτουν ένα μεγάλο φάσμα τεχνολογιών στο προγραμματισμό, σε βάσεις δεδομένων και cloud. Στον ελεύθερο του χρόνο διατηρεί ένα τεχνολογικό blog στο οποίο θα βρείτε αρκετά δωρεάν μαθήματα προγραμματισμού για αρχάριους.