Προγραμματισμός

Τι είναι τα servlets Java; Αίτημα χειρισμού για εφαρμογές web Java

Ο χειρισμός αιτημάτων είναι το ψωμί και το βούτυρο της ανάπτυξης εφαρμογών Ιστού Java. Προκειμένου να ανταποκριθεί σε αιτήματα από το δίκτυο, μια εφαρμογή ιστού Java πρέπει πρώτα να καθορίσει ποιος κώδικας θα ανταποκριθεί στη διεύθυνση URL του αιτήματος και, στη συνέχεια, να αποστείλει μια απόκριση. Κάθε στοίβα τεχνολογίας έχει έναν τρόπο επίτευξης του χειρισμού αιτήσεων-απόκρισης. Στην Java, χρησιμοποιούμε servlets (και το Java Servlet API) για το σκοπό αυτό. Σκεφτείτε έναν servlet ως έναν μικρό διακομιστή του οποίου η δουλειά είναι να δέχεται αιτήματα και να εκδίδει απαντήσεις.

Διεύθυνση URL έναντι τελικού σημείου

Ως χρήστης του Διαδικτύου, είστε εξοικειωμένοι με τις διευθύνσεις URL ως διεύθυνση ιστότοπου στο πρόγραμμα περιήγησής σας. Ως προγραμματιστής, ενδέχεται επίσης να γνωρίζετε τις διευθύνσεις URL ως τελικά σημεία για υπηρεσίες ιστού. ΕΝΑ Διεύθυνση URL (ομοιόμορφος εντοπιστής πόρων) είναι ένας τυπικός τρόπος περιγραφής και εντοπισμού πόρων Διαδικτύου χρησιμοποιώντας κείμενο. Ο όρος τελικό σημείο αναφέρεται σε μια διεύθυνση URL που δηλώνει μια υπηρεσία Ιστού. Οι οροι τελικό σημείο και Διεύθυνση URL χρησιμοποιούνται συχνά εναλλακτικά, αν και αναφέρονται σε διαφορετικούς τομείς χρήσης.

Λογισμικό ως επίπεδα

Όπως εξήγησα στην εισαγωγή μου στο Java Runtime Environment, μπορούμε να δούμε το λογισμικό ως μια σειρά επιπέδων. Κάθε επίπεδο σε ένα σύστημα λογισμικού διαθέτει ορισμένες δυνατότητες που απαιτούνται από τα επίπεδα πάνω από αυτό. Για παράδειγμα, το επίπεδο υλικού βρίσκεται κάτω από το επίπεδο υλικολογισμικού, υποστηρίζοντας τη λειτουργικότητά του. Ομοίως, απαιτείται το επίπεδο υλικολογισμικού (BIOS σε υπολογιστή ή EFI σε Mac) για την εκτέλεση του λειτουργικού συστήματος. Το Σχήμα 1 δείχνει αυτά τα τρία συστατικά σε ένα διάγραμμα σε στρώσεις.

Μάθιου Τάισον

Θα μπορούσατε επίσης να δείτε ένα σύστημα λογισμικού ως μια σειρά από εμπορευματοκιβώτια, όπου τα κάτω στρώματα λειτουργούν ως δοχεία για τα υψηλότερα. Κάθε στρώμα λειτουργεί ως συμφραζόμενα για εκτέλεση του επόμενου επιπέδου λειτουργικότητας: το υλικό περιέχει υλικολογισμικό και το υλικολογισμικό περιέχει το λειτουργικό σύστημα.

Java από διακομιστή

ΕΝΑ Java διακομιστή Η εφαρμογή είναι μια από μια ευρεία κατηγορία εφαρμογών που χρησιμεύουν ως τελικά σημεία δικτύου, λαμβάνουν αιτήματα HTTP από μια δεδομένη διεύθυνση URL και αποστέλλουν δεδομένα σε μορφή ανταλλαγής όπως HMTL ή JSON. Η διακομιστή Java αποτελείται από τυποποιημένους διακομιστές Java και τεχνολογίες για αλληλεπίδραση με αυτούς τους διακομιστές. Το Java Servlet API είναι το πρότυπο που χρησιμοποιείται για την αλληλεπίδραση με διακομιστή Java.

Διακομιστές Java και το JVM

Σε συστήματα που βασίζονται σε Java, το λειτουργικό σύστημα (OS) περιέχει το JVM, το οποίο παρέχει ένα συνεπές περιβάλλον για την εκτέλεση εφαρμογών Java. Ένας διακομιστής Java βρίσκεται στην κορυφή του JVM. Ακριβώς όπως το JVM είναι ο μεσάζων μεταξύ του λειτουργικού συστήματος και της εφαρμογής σας Java, ο διακομιστής Java παρέχει συνεπή, βελτιωμένη πρόσβαση στις δυνατότητες δικτύωσης και επεξεργασίας του λειτουργικού συστήματος Μια εφαρμογή Java εκτελείται μέσα στο διακομιστή, χρησιμοποιώντας το Java Servlet API για πρόσβαση στις δυνατότητες του διακομιστή.

Το σχήμα 2 δείχνει μια στοίβα λογισμικού για διακομιστή Java.

Μάθιου Τάισον

Η προδιαγραφή Java Servlet

Η προδιαγραφή Java Servlet παρέχει τον υποκείμενο ορισμό για διακομιστή Java και σχετικά στοιχεία. Καθορίζει πώς ο διακομιστής θα στέλνει αιτήματα και απαντήσεις κατά τη διάρκεια αλληλεπιδράσεων δικτύου μέσω HTTP. Όλοι οι διακομιστές Java πρέπει να είναι συμβατοί με τις προδιαγραφές Java Servlet. Οι περισσότεροι διακομιστές Java σήμερα είναι συμβατοί με το Servlet 4.0.

Servlet 4.0

Κάθε έκδοση της προδιαγραφής Java Servlet φέρνει νέες δυνατότητες. Το Servlet 4.0 περιλαμβάνει υποστήριξη για το πρωτόκολλο HTTP / 2 και τον μηχανισμό ώθησης διακομιστή. Η ώθηση διακομιστή επιτρέπει σε έναν διακομιστή να προφορτώνει στοιχεία που απαιτούνται από μια ιστοσελίδα, αντί να περιμένει ένα συγκεκριμένο αίτημα. Η προδιαγραφή Servlet 4.0 ενσωματώνει επίσης τη δυνατότητα να ανακαλύπτει αντιστοιχίσεις διευθύνσεων URL κατά το χρόνο εκτέλεσης, ένα χαρακτηριστικό γνωστό ως ανακάλυψη χρόνου εκτέλεσης.

Eclipse Enterprise για Java

Το Servlet 4.0 είναι μέρος της πρωτοβουλίας ανοιχτού κώδικα EE4J (Eclipse Enterprise για Java), η οποία περιλαμβάνει μια προτεινόμενη αντικατάσταση για το JCP.

Για μια πρακτική κατανόηση του τρόπου λειτουργίας της προδιαγραφής Servlet, σκεφτείτε το άρθρο που διαβάζετε αυτήν τη στιγμή. Κάπου στα έντερα της υποδομής του JavaWorld, αυτό το άρθρο διαμορφώθηκε και υποβλήθηκε για δημοσίευση. Εκχωρήθηκε μια διεύθυνση URL, δρομολογήθηκε μέσω του δικτύου και έφτασε σε έναν διακομιστή. Ο διακομιστής συνέδεσε το τεχνούργημα (άρθρο) με τη διεύθυνση URL και καθόρισε ότι όταν έφτασε ένα αίτημα GET για αυτήν τη διεύθυνση URL, θα εξυπηρετούσε ξανά αυτό το άρθρο ως HTML.

Όταν δημιουργείτε μια εφαρμογή web Java, δημιουργείτε λογισμικό που εκτελείται εντός του διακομιστή Java. Η εφαρμογή χρησιμοποιεί τις διευκολύνσεις που παρέχονται από το πλαίσιο του διακομιστή και μία από αυτές τις εγκαταστάσεις είναι το Servlet API. Για το λόγο αυτό, ένας διακομιστής Java που εφαρμόζει την προδιαγραφή Servlet καλείται μερικές φορές a δοχείο servlet.

Για να δημιουργήσετε ένα servlet, εφαρμόζετε το Servlet διεπαφή και να το αναπτύξετε μέσα σε ένα servlet container. Το σχήμα 3 δείχνει πώς βασίζεται η εφαρμογή σας στο servlet.

Μάθιου Τάισον

Γράφοντας servlets με το Tomcat

Τώρα που έχετε μια εννοιολογική επισκόπηση, ας ασχοληθούμε με τη σύνταξη ενός Java servlet.

Το πρώτο πράγμα που θα χρειαστείτε είναι ένα servlet container, αλλιώς γνωστό ως διακομιστής εφαρμογών Java. Το Tomcat και το Jetty είναι δύο από τα πιο δημοφιλή δοχεία servlet. Θα χρησιμοποιήσουμε το Tomcat επειδή είναι ένας από τους πιο μακροχρόνιους διακομιστές εφαρμογών για την Java. Το Tomcat είναι δωρεάν και περιέχει ελάχιστα κουδούνια και σφυρίχτρες, κάτι που θα κρατήσει τα πράγματα απλά για το παράδειγμά μας. Παρεμπιπτόντως, το "κουδούνι και σφυρίχτρες" είναι ένας τεχνικός όρος.)

Πραγματοποιήστε λήψη και εγκατάσταση του Tomcat

Εάν δεν έχετε ήδη το Tomcat, ξεκινήστε ανοίγοντας τη σελίδα λήψης του Tomcat. Εκεί, μπορείτε να επιλέξετε είτε το πρόγραμμα εγκατάστασης των Windows είτε την πιο κατάλληλη λήψη ZIP για τον υπολογιστή σας (για παράδειγμα, κατεβάζω το φερμουάρ των 64 bit των Windows).

Αυτό είναι: μόλις προσθέσατε το επίπεδο διακομιστή Java στο λειτουργικό σας σύστημα!

Βεβαιωθείτε ότι το Tomcat εκτελείται

Πριν προχωρήσουμε περαιτέρω, ας βεβαιωθούμε ότι μπορείτε να εκτελέσετε το Tomcat. Ξεκινήστε την υπηρεσία Windows ή εκτελέστε startup.sh ή startup.bat αρχείο από τη γραμμή εντολών.

Εάν ανοίξετε τώρα ένα πρόγραμμα περιήγησης στο Web και μεταβείτε στο localhost: 8080, θα πρέπει να σας υποδεχτεί η ακόλουθη οθόνη:

Μάθιου Τάισον

Εάν αντιμετωπίσετε προβλήματα κατά την εκτέλεση του Tomcat, μπορείτε να επισκεφτείτε την τεκμηρίωση του Tomcat για αντιμετώπιση προβλημάτων.

Εκτελέστε το παράδειγμα servlet Tomcat

Τώρα ας ρίξουμε μια ματιά σε ένα servlet Java. Βολικά, ο Tomcat έχει συμπεριλάβει μερικά απλά παραδείγματα.

Κάνε κλικ στο Παραδείγματα σύνδεση που βλέπετε στο Γρήγορη εκκίνηση προγραμματιστή ενότητα της σελίδας καλωσορίσματος Tomcat. Μόλις είστε εκεί, κάντε κλικ στο Παραδείγματα Servlet Σύνδεσμος.

Τώρα μπορείτε να δείτε ένα απλό Servlet σε δράση κάνοντας κλικ στο Γειά σου Κόσμε δείγμα Εκτέλεση Σύνδεσμος. Αυτό θα φέρει το πρόγραμμα περιήγησής σας στο // localhost: 8080 / παραδείγματα / servlets / servlet / HelloWorldExample URL, όπου θα δείτε τον χαιρετισμό του πολυετούς προγραμματιστή.

Προβολή του πηγαίου κώδικα servlet

Κάντε κλικ στο βέλος Πίσω στο πρόγραμμα περιήγησής σας και, στη συνέχεια, κάντε κλικ στο πηγή σύνδεσμος για την εφαρμογή HelloWorld. Η πηγή εμφανίζεται στην καταχώριση 1.

Λίστα 1. Πηγαίος κώδικας για το παράδειγμα HelloWorld

 εισαγωγή java.io. *; εισαγωγή javax.servlet. *; εισαγωγή javax.servlet.http. *; δημόσια τάξη HelloWorld επεκτείνει το HttpServlet {public void doGet (HttpServletRequest request, HttpServletResponse response) ρίχνει το IOException, ServletException {response.setContentType ("text / html"); PrintWriter out = response.getWriter (); out.println (""); out.println (""); out.println ("Γεια σου Κόσμος!"); out.println (""); out.println (""); out.println (""); out.println (""); out.println (""); }} 

Αυτή η πολύ απλή λίστα κώδικα περιέχει τα βασικά στοιχεία ενός Java servlet. Ας το θεωρήσουμε βήμα προς βήμα.

Η πρώτη γραμμή καλεί τις τυπικές εισαγωγές Java. Μετά από αυτό, το πρόγραμμα ορίζει μια νέα τάξη, η οποία επεκτείνει το HttpServlet τάξη. Αυτό είναι κρίσιμο επειδή servlets πρέπει εφαρμόστε το Servlet διεπαφή για να τρέξει μέσα σε ένα servlet container.

Στη συνέχεια, το Γειά σου Κόσμε class ορίζει μια μέθοδο που ονομάζεται doGet (). Αυτή είναι μια τυπική μέθοδος σε servlets: λέει στον διακομιστή να δρομολογήσει HTTP GET αιτήματα σε αυτήν τη μέθοδο. Άλλες μέθοδοι HTTP, όπως το POST, αντιμετωπίζονται με μεθόδους με παρόμοια ονομασία, όπως doPost.

Παρατηρήστε ότι doGet () έχει δύο παραμέτρους: (HttpServletRequest αίτημα, HttpServletResponse απάντηση). Αυτά τα δύο αντικείμενα αντιπροσωπεύουν το αίτημα και την απάντηση. Παρέχουν πρόσβαση σε ό, τι χρειάζεται ο κώδικάς σας για την αντιμετώπιση του αιτήματος και την έκδοση απάντησης. Στο Γεια σας. Κόσμος. Λήψη μέθοδο servlet, για παράδειγμα, το απάντηση Το αντικείμενο χρησιμοποιείται για να ενημερώσει τον διακομιστή τι είδους κεφαλίδα τύπου προς έκδοση. Σε αυτήν την περίπτωση, είναι response.setContentType ("κείμενο / html");.

Τέλος, το πρόγραμμα αποκτά ένα αντικείμενο Java Writer από την απόκριση Respons.getWriter (). ο Συγγραφέας Στη συνέχεια χρησιμοποιείται για τη δημιουργία μιας απλής απόκρισης HTML για επιστροφή στο πρόγραμμα περιήγησης.

Αντιστοίχιση URL

Η δομή και η ροή κώδικα στην Λίστα 1 είναι αρκετά διαισθητικά, αλλά υπάρχει μια λαμπερή παράλειψη. Πώς ξέρει ο διακομιστής να συσχετίζει το // localhost: 8080 / παραδείγματα / servlets / servlet / HelloWorldExample URL στο Γεια σας. Κόσμος. Λήψη μέθοδος?

Θα βρείτε την απάντηση σε αυτό το μυστήριο στα μετα-δεδομένα της εφαρμογής. Κάθε εφαρμογή ιστού Java περιλαμβάνει ένα τυπικό αρχείο μετα-δεδομένων, που ονομάζεται web.xml, που λέει στον διακομιστή πώς να αντιστοιχίσει διευθύνσεις URL σε servlets.

Τι είναι τα μετα-δεδομένα;

Τα μετα-δεδομένα είναι κάθε πληροφορία που χρησιμοποιείται για τον έλεγχο της λειτουργίας λογισμικού εκτός του ίδιου του λογισμικού.

Στα παραδείγματα εφαρμογών Tomcat, το web.xml βρίσκεται στο \ apache-tomcat-9.0.11 \ webapps \ example \ WEB-INF \ web.xml. ο \ WEB-INF \ web.xml είναι η τυπική θέση του αρχείου μεταδεδομένων για servlets. Εάν ανοίξετε αυτό το αρχείο, θα δείτε πώς διαμορφώνεται ο διακομιστής.

Το συντομευμένο web.xml στην Λίστα 2 έχει μόνο τις πληροφορίες που χρειαζόμαστε για τη συζήτησή μας.

Λίστα 2. Πηγαίος κώδικας για το παράδειγμα Tomcat HelloWorld

     HelloWorldExample HelloWorldExample HelloWorldExample / servlets / servlet / HelloWorldExample 

Η λίστα 2 εμφανίζει μια τυπική κεφαλίδα αρχείου XML που αναφέρεται στο σχήμα ενός περιγραφέα εφαρμογών ιστού Java. Αυτό ακολουθείται από δύο καταχωρίσεις: και.

Η κλήση προς εκχωρεί ένα λογικό όνομα, HelloWorldExample, στο HelloWorldExample τάξη, μέσω των πεδίων και.

Η κλήση προς εκχωρεί αυτό το λογικό όνομα στο τιμή, συσχετίζοντας έτσι τον κώδικα με τη διεύθυνση URL.

Σημειώστε ότι το Το πεδίο υποστηρίζει μπαλαντέρ για να χειριστεί μια ποικιλία ευέλικτων αντιστοιχίσεων διευθύνσεων URL.

Άλλες δυνατότητες servlet

Εκτός από τη χαρτογράφηση διευθύνσεων URL, οι servlets παρέχουν επιπλέον δυνατότητες για φιλτράρισμα και έλεγχο ταυτότητας. Φίλτρα χρησιμοποιούνται για την επεξεργασία αιτημάτων και αυθεντικοποίηση χρησιμοποιείται για την εκχώρηση απλών χρηστών και ρόλων σε μοτίβα διευθύνσεων URL. Η προδιαγραφή JavaServer Pages (JSP) παρέχει υποστήριξη για τη δημιουργία HTML με πολύ πιο ισχυρό τρόπο.

συμπέρασμα

Αυτό το άρθρο υπήρξε μια εννοιολογική επισκόπηση των servlets Java, συμπεριλαμβανομένου του αιτήματος διεύθυνσης URL και του χειρισμού απόκρισης σε έναν διακομιστή Java. Η κατανόηση αυτών των βασικών στοιχείων του Java από την πλευρά του διακομιστή θα σας βοηθήσει να ενσωματώσετε πιο προηγμένες έννοιες, όπως η ώθηση διακομιστή και η ανακάλυψη χρόνου εκτέλεσης των αντιστοιχίσεων διευθύνσεων URL, οι οποίες είναι νέες στο Servlet 4.0.

Αυτή η ιστορία, "Τι είναι servlets Java; Αίτημα χειρισμού για εφαρμογές web Java" δημοσιεύθηκε αρχικά από το JavaWorld.