JAVA EE 8 - ΕΝΟΤΗΤΑ 4 – PASSING DATA TO A SERVLET FROM A HTML PAGE

Μέχρι τώρα έχουμε δει το Servlet να συμπεριφέρεται σαν Web Client (μηνύματα στον browser) αλλά ταυτόχρονα να εκτελεί και business logic (κώδικας που περικλείει υπολογισμούς).
  Όπως ήδη έχετε παρατηρήσει όμως, είναι κάπως κουραστικό στο να παρουσιάζουμε μηνύματα στο browser δια μέσω ενός servlet, αφού κάθε ένα HTML tag πρέπει να οριστεί ξεχωριστά μέσα σε μια append( ) μέθοδο. Για την παρουσίαση ενός απλού μηνύματος η πιο πάνω διαδικασία είναι αποδεκτή. Αλλά γίνεται κάπως χρονοβόρα όταν θέλουμε να δημιουργήσουμε μια input form μέσα από την οποία ο χρήστης μπορεί να καταχωρήσει τα στοιχεία του και να αποθηκευτούν στην εφαρμογή μας. Για αυτό το λόγο δεν θα δούμε το Servlet σε production εφαρμογές να είναι clients.

Συνήθως το 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 σελίδα.




Μιχάλης Κασάπογλου

Archive

Contact Form

Send