JAVA EE 8 - ΕΝΟΤΗΤΑ 4 – PASSING DATA TO A SERVLET FROM A HTML PAGE
Μέχρι τώρα έχουμε δει
το Servlet να συμπεριφέρεται
σαν Web Client (μηνύματα στον
browser) αλλά ταυτόχρονα να
εκτελεί και business logic (κώδικας
που περικλείει υπολογισμούς).
Συνήθως το Servlet
περιορίζεται στο να παίζει το ρόλο
του controller και να περνάει
στην εφαρμογή πληροφορίες που έχει
λάβει από το Web Homepage που
μπορεί να είναι ένα HTML αρχείο
ή ένα JSP αρχείο. Οπότε
γεννιέται το εξής ερώτημα: Πως μπορεί
ένα servlet να καταλάβει τι
τιμές έχουν εισαχθεί σε μια html
σελίδα?
Ο καλύτερος
τρόπος για να απαντήσουμε αυτή την
ερώτηση είναι να δούμε ένα παράδειγμα.
Στην πιο κάτω εφαρμογή, ζητάμε από τον
χρήστη να εισάγει από ποια πόλη πετάνε,
που θέλουν να πάνε και ποια ημέρα για
να μπορέσει η εφαρμογή να κάνει κράτηση
ενός θεωρητικού αεροπορικού εισιτηρίου.
Την φόρμα εισαγωγής των πιο πάνω στοιχείων
τα ζητάμε μέσα από μια html
σελίδα με το όνομα index.html
Στο project
μας, όλα τα html αρχεία
δημιουργούνται μέσα στο WEB-INF
φάκελλο κάτω από το WebContent.
Ο κώδικας του index.html
αρχείου είναι
απλός:
Έχουμε δημιουργήσει
μια απλή HTML φόρμα στην
οποία ο χρήστης μπορεί να καταχωρήσει
τα στοιχεία της πτήσης για την οποία
θέλει να κλείσει ένα εισιτήριο. Για να
γίνει η καταχώρηση, πατάμε το κουμπί
Submit το οποίο στέλνει τις
πληροφορίες μέσω της POST
μεθόδου στο SimpleServlet.
Οπότε πως μπορεί το
Servlet τώρα να δεχτεί αυτά
τα στοιχεία? Την ιδιότητα του αυτή την
αποκτάει μέσα από το request
αντικείμενο της μεθόδου doPost.
Χρησιμοποιούμε την doPost
για να διαβάσουμε και να απαντήσουμε
το αίτημα του χρήστη, γιατί η φόρμα
στέλνει στο Servlet την
πληροφορία καλώντας την POST
μέθοδο του HTTP.
Μέσα στην μέθοδο,
καλούμε την μέθοδο getParameter
του αντικειμένου request που
έχει την δυνατότητα να διαβάσει την
τιμή ενός συγκεκριμένου html
tag αρκεί να δηλώσουμε σωστά το id
του html tag. Ας δούμε
τον κώδικα του doPost και θα
συνεχίσουμε με την θεωρία μας.
Αφού διαβάσουμε την
τιμή που περιέχει το κάθε html
component, την αναθέτουμε σε μια String
μεταβλητή. Εδώ χρειάζεται λίγο
προσοχή. Ότι είδος πληροφορίας και αν
καταχωρήσει ο χρήστης, θα το διαβάσει
το request.getParameter σαν String.
Στο δικό μας παράδειγμα, επειδή
ζητάμε ονόματα, δεν χρειάζεται κάποια
μετατροπή. Αν όμως ζητούσαμε και
αριθμητικές τιμές (π.χ επιθυμητή τιμή
εισιτηρίου) τότε θα χρειαστεί να κάνουμε
μετατροπή της μεταβλητής από String
σε integer ή double.
Για παράδειγμα, ας
υποθέσουμε ότι διαβάζουμε ένα html
tag με το id price.
String ticketPrice =
request.getParameter(“price”);
double
ticket =
Double.valueOf(ticketPrice);
Αφού λοιπόν διαβάσουμε
την πληροφορία και την έχουμε μετατρέψει
στην επιθυμητή μορφή, πρέπει να πάρουμε
την απόφαση αν θα εκτελέσει το Servlet
την λογική και θα επιστρέψει κάποια
απάντηση στον τελικό χρήστη, ή θα
μεταφέρει την πληροφορία σαν java
αντικείμενο σε κάποια άλλη κλάση
της εφαρμογής για να εκτελεστεί κάποιο
συγκεκριμένο business logic. Στο
δικό μας παράδειγμα, απλά διαβάζουμε
την πληροφορία και το ίδιο το Servlet
δείχνει το αποτέλεσμα στο τελικό
χρήστη. Ταυτόχρονα, δια μέσω του <a>
tag, επιτρέπουμε στον χρήστη να μπορεί
να επιστρέψει στο homepage της
εφαρμογής. Στην επόμενη ενότητα θα δούμε
το Servlet να συμπεριφέρεται
σαν καθαρόαιμο controller γιατί
απλά θα προωθεί τα στοιχεία σε άλλη
κλάση. Στο δικό μας παράδειγμα, απλά
δείχνουμε τον τρόπο με τον οποίο ένα
Servlet μπορεί να διαβάσει
πληροφορίες από μια HTML σελίδα.
Μιχάλης Κασάπογλου