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

Τι είναι το JSP; Εισαγωγή στις σελίδες JavaServer

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

Το JSP σχετίζεται επίσης στενά με το JSF (JavaServer Faces), μια προδιαγραφή Java για τη δημιουργία εφαρμογών Ιστού MVC (μοντέλο-προβολή-ελεγκτής). Το JSP είναι μια σχετικά απλούστερη και παλαιότερη τεχνολογία από το JSF, το οποίο είναι το πρότυπο για τα πλαίσια Ιστού Java όπως το Eclipse Mojarra, το MyFaces και το PrimeFaces. Αν και δεν είναι ασυνήθιστο να βλέπουμε το JSP να χρησιμοποιείται ως frontend για παλαιότερες εφαρμογές JSF, το Facelets είναι η προτιμώμενη τεχνολογία προβολής για σύγχρονες υλοποιήσεις JSF.

Ενώ το JSP μπορεί να μην είναι η πρώτη σας επιλογή για τη δημιουργία δυναμικών ιστοσελίδων, είναι μια βασική τεχνολογία Ιστού Java. Οι σελίδες JSP είναι σχετικά γρήγορες και εύκολες στην κατασκευή και αλληλεπιδρούν απρόσκοπτα με servlets Java σε ένα servlet container όπως το Tomcat. Θα συναντήσετε JSP σε παλαιότερες εφαρμογές ιστού Java και κατά καιρούς μπορεί να σας φανεί χρήσιμο για τη δημιουργία απλών, δυναμικών ιστοσελίδων Java. Ως προγραμματιστής Java, θα πρέπει τουλάχιστον να είστε εξοικειωμένοι με το JSP.

Αυτό το άρθρο θα είναι μια γρήγορη εισαγωγή στις σελίδες JavaServer, συμπεριλαμβανομένης της JSP Standard Tag Library (JSTL). Τα παραδείγματα σας δείχνουν πώς να συντάξετε μια απλή σελίδα HTML, να ενσωματώσετε ετικέτες JSP για να συνδεθείτε σε ένα servlet Java και να εκτελέσετε τη σελίδα σε ένα κοντέινερ servlet.

Δείτε προηγούμενα άρθρα σε αυτήν τη σειρά για να μάθετε περισσότερα σχετικά με τα servlets Java και τα JavaServer Faces.

JSP στην Τζακάρτα ΕΕ

Μετά την κυκλοφορία του Java EE 8, η Oracle μετέφερε τη διαχείριση της Java Enterprise Edition (Java EE) στο Eclipse Foundation. Προς τα εμπρός, η πλατφόρμα Java Enterprise έχει μετονομαστεί ως Jakarta EE. Μαζί με τις προδιαγραφές Java Servlet και JSF, το JSP είναι μια από τις τεχνολογίες Ιστού Java που περιλαμβάνονται για συνεχή υποστήριξη και αναβαθμίσεις στο Jakarta EE.

Σύνταξη σελίδων JSP

Μια απλή σελίδα JSP (.jsp) αποτελείται από σήμανση HTML ενσωματωμένη με ετικέτες JSP. Όταν το αρχείο υποβάλλεται σε επεξεργασία στο διακομιστή, το HTML αποδίδεται ως προβολή εφαρμογής, μια ιστοσελίδα. Οι ενσωματωμένες ετικέτες JSP θα χρησιμοποιηθούν για την κλήση κώδικα και δεδομένων από τον διακομιστή. Το διάγραμμα στο σχήμα 1 δείχνει την αλληλεπίδραση μεταξύ HTML, JSP και του διακομιστή εφαρμογών ιστού.

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

Η λίστα 1 εμφανίζει μια απλή σελίδα JSP.

Λίστα 1. Μια απλή σελίδα JSP

$ {2 * 2} θα πρέπει να ισούται με 4

Στην καταχώριση 1, βλέπετε ένα μπλοκ HTML που περιλαμβάνει ένα Έκφραση JSP, η οποία είναι μια εντολή για τον διακομιστή Java που γράφεται χρησιμοποιώντας τη γλώσσα έκφρασης (EL). Στην έκφραση "${2 * 2}", ο "${}"είναι η σύνταξη JSP για παρεμβολή κώδικα σε HTML. Όταν εκτελεστεί, το JSP θα εμφανίσει τα αποτελέσματα εκτέλεσης οτιδήποτε βρίσκεται μέσα στην έκφραση. Σε αυτήν την περίπτωση, η έξοδος θα είναι ο αριθμός 4.

JSP στο δοχείο servlet

Οι σελίδες JSP πρέπει να αναπτυχθούν μέσα σε ένα κοντέινερ servlet Java. Για να αναπτύξετε μια εφαρμογή ιστού Java που βασίζεται σε JSP και servlets, θα συσκευάσετε τα αρχεία .jsp, τον κώδικα Java και τα μεταδεδομένα εφαρμογής σε ένα αρχείο .war, το οποίο είναι ένα απλό αρχείο .zip με συμβατική δομή για εφαρμογές ιστού.

Μόλις φορτώσετε το JSP στο servlet container σας, θα μεταγλωττιστεί σε servlet. Τα JSP και τα servlets Java έχουν παρόμοια χαρακτηριστικά, συμπεριλαμβανομένης της δυνατότητας πρόσβασης και απόκρισης σε αιτήματα αντικειμένων. Το Apache Tomcat 9x είναι η εφαρμογή αναφοράς για τις προδιαγραφές Servlet 4.0 και JSP 2.3. (Σημειώστε ότι οι ενημερώσεις μεταξύ JSP 2.2 και 2.3 είναι σχετικά μικρές.)

Servlet container εναντίον διακομιστή εφαρμογών

Στον κόσμο της Java, α δοχείο servlet, επίσης γνωστό ως διακομιστής ιστού, μοιάζει με μια lite (μπύρα) έκδοση ενός διακομιστή εφαρμογών. Ένα κοντέινερ servlet χειρίζεται τις αλληλεπιδράσεις αιτήματος και απόκρισης και επιτρέπει σε αυτές τις αλληλεπιδράσεις να διασυνδέονται με ένα υποσύνολο επιχειρησιακών δυνατοτήτων Java για εφαρμογές web. Ένας διακομιστής εφαρμογών Java περιλαμβάνει το servlet container ως μέρος της πλήρους εταιρικής στοίβας Java, συμπεριλαμβανομένων των EJB, JPA, JMS και πολλά άλλα.

Παράδειγμα εφαρμογής για JSP

Θα χρησιμοποιήσουμε ένα παράδειγμα εφαρμογής στο Tomcat για να ξεκινήσετε με το JavaServer Pages. Εάν δεν έχετε ήδη εγκαταστήσει το Tomcat, μεταβείτε στη σελίδα λήψης του Tomcat και επιλέξτε την εγκατάσταση του Tomcat για το λειτουργικό σας σύστημα. Από αυτό το γράψιμο, το Tomcat 9 είναι η τρέχουσα έκδοση, συμβατή με Servlet 4.0 και JSP 2.3.

Μπορείτε να εγκαταστήσετε το Tomcat ως υπηρεσία Windows ή να το εκτελέσετε από τη γραμμή εντολών με /bin/catalina.sh έναρξη ή /bin/catalina.bat. Σε κάθε περίπτωση, ξεκινήστε το Tomcat και μετά πηγαίνετε στο localhost: 8080 για να δείτε τη σελίδα υποδοχής του Tomcat που φαίνεται στο σχήμα 2.

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

Σιωπηρά αντικείμενα στο Tomcat

Στη σελίδα καλωσορίσματος Tomcat, κάντε κλικ στο Παραδείγματα σύνδεσμος και, στη συνέχεια, κάντε κλικ Παραδείγματα JSP.

Στη συνέχεια, ανοίξτε το Εκτελέστε έμμεσα αντικείμενα εφαρμογή ιστού. Το Σχήμα 3 δείχνει έξοδο για αυτήν την εφαρμογή. Αφιερώστε ένα λεπτό για να μελετήσετε αυτό το αποτέλεσμα.

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

Αίτημα παραμέτρων

Σιωπηρά αντικείμενα είναι ενσωματωμένα αντικείμενα προσβάσιμα μέσω μιας σελίδας JSP. Ως προγραμματιστής ιστοσελίδων, θα χρησιμοποιήσετε αυτά τα αντικείμενα για να δημιουργήσετε πρόσβαση σε πράγματα όπως παραμέτρους αιτήματος, τα οποία είναι τα δεδομένα που αποστέλλονται από το πρόγραμμα περιήγησης κατά την έκδοση ενός αιτήματος HTTP. Εξετάστε τη διεύθυνση URL του προγράμματος περιήγησης για έμμεσα αντικείμενα:

 //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar 

Η παράμετρος είναι ? foo = μπαρκαι μπορείτε να το δείτε να αντικατοπτρίζεται στην έξοδο στην ιστοσελίδα, όπου ο πίνακας δείχνει "EL Expression" και η τιμή είναι "bar". Για να το δοκιμάσετε, αλλάξτε τη διεύθυνση URL σε //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=zork, Κτύπημα Εισαγωκαι θα δείτε την αλλαγή να αντικατοπτρίζεται στην έξοδο.

Αυτό το παράδειγμα είναι μια πολύ απλή εισαγωγή στη χρήση ετικετών JSP για πρόσβαση σε παραμέτρους αιτήματος από τον διακομιστή. Σε αυτήν την περίπτωση, η σελίδα JSP χρησιμοποιεί το ενσωματωμένο (σιωπηρό) αντικείμενο που ονομάζεται παράμετρος για πρόσβαση στις παραμέτρους αιτήματος της εφαρμογής ιστού. ο παράμετρος αντικείμενο είναι διαθέσιμο μέσα στη σύνταξη έκφρασης JSP που είδατε στην Καταχώριση 1.

Σε αυτό το παράδειγμα, χρησιμοποιήσαμε μια έκφραση για να κάνουμε κάποια μαθηματικά: ${2 * 2}, ποια έξοδος 4.

Σε αυτό το παράδειγμα, η έκφραση χρησιμοποιείται για πρόσβαση σε ένα αντικείμενο και ένα πεδίο σε αυτό το αντικείμενο: $ {param.foo}.

JSP σε μια εφαρμογή Ιστού

Στη σελίδα Implicit Objects, κάντε κλικ στο πίσω βέλος, ακολουθούμενο από το Πηγή Σύνδεσμος. Αυτό θα σας οδηγήσει στον κώδικα JSP για την εφαρμογή ιστού Implicit Objects, ο οποίος εμφανίζεται στην καταχώριση 2.

Λίστα 2. Κωδικός JSP για την εφαρμογή Ιστού Implicit Objects

     Γλώσσα έκφρασης JSP 2.0 - Σιωπηρά αντικείμενα 
Αυτό το παράδειγμα απεικονίζει ορισμένα από τα έμμεσα αντικείμενα που είναι διαθέσιμα στη γλώσσα έκφρασης. Τα ακόλουθα σιωπηρά αντικείμενα είναι διαθέσιμα (δεν απεικονίζονται όλα εδώ):
  • pageContext - το αντικείμενο PageContext
  • pageScope - ένας χάρτης που αντιστοιχίζει τα ονόματα των χαρακτηριστικών που καλύπτονται από τη σελίδα στις τιμές τους
  • requestScope - ένας χάρτης που αντιστοιχίζει ονόματα χαρακτηριστικών request-scoped στις τιμές τους
  • sessionScope - ένας χάρτης που αντιστοιχίζει τα ονόματα των χαρακτηριστικών που καλύπτονται από τις συνεδρίες στις τιμές τους
  • applicationScope - ένας χάρτης που αντιστοιχίζει τα ονόματα των χαρακτηριστικών εφαρμογής-scoped στις τιμές τους
  • param - ένας χάρτης που αντιστοιχίζει τα ονόματα των παραμέτρων σε μία τιμή παραμέτρου String
  • paramValues ​​- ένας χάρτης που αντιστοιχίζει ονόματα παραμέτρων σε μια συμβολοσειρά [] όλων των τιμών για αυτήν την παράμετρο
  • κεφαλίδα - ένας χάρτης που αντιστοιχίζει τα ονόματα κεφαλίδων σε μία τιμή κεφαλίδας συμβολοσειράς
  • headerValues ​​- ένας χάρτης που αντιστοιχίζει τα ονόματα των κεφαλίδων σε μια συμβολοσειρά [] όλων των τιμών για αυτήν την κεφαλίδα
  • initParam - ένας χάρτης που αντιστοιχίζει τα ονόματα των παραμέτρων προετοιμασίας περιβάλλοντος στην τιμή παραμέτρου String
  • cookie - ένας χάρτης που χαρτογραφεί ονόματα cookie σε ένα αντικείμενο cookie.
Αλλαγή παραμέτρου foo =

EL ΈκφρασηΑποτέλεσμα
\ $ {param.foo}$ {fn: escapeXml (param ["foo"])}
\ $ {param ["foo"]}$ {fn: escapeXml (param ["foo"])}
\ $ {κεφαλίδα ["κεντρικός υπολογιστής"]}$ {fn: escapeXml (κεφαλίδα ["host"])}
\ $ {κεφαλίδα ["αποδοχή"]}$ {fn: escapeXml (κεφαλίδα ["αποδοχή"])}
\ $ {κεφαλίδα ["user-agent"]}$ {fn: escapeXml (κεφαλίδα ["user-agent"])}

Λειτουργίες JSP

Εάν είστε εξοικειωμένοι με το HTML, τότε η Λίστα 2 θα πρέπει να φαίνεται αρκετά οικεία. Έχετε τον αναμενόμενο HTML στοιχεία, ακολουθούμενα από το ${ } Η σύνταξη έκφρασης JSP εισήχθη στην Καταχώριση 1. Αλλά παρατηρήστε την αξία Για param.foo: $ {fn: escapeXml (param ["foo"])} . Ο "fn: escapeXML ()"είναι μια συνάρτηση JSP.

ΕΝΑ Συνάρτηση JSP ενσωματώνει ένα κομμάτι επαναχρησιμοποιήσιμης λειτουργικότητας. Σε αυτήν την περίπτωση, η λειτουργικότητα είναι να ξεφύγετε από το XML. Το JSP προσφέρει μια ποικιλία λειτουργιών και μπορείτε επίσης να δημιουργήσετε μόνοι σας λειτουργίες. Για να χρησιμοποιήσετε μια συνάρτηση, εισάγετε τη βιβλιοθήκη της στη σελίδα JSP και, στη συνέχεια, καλέστε τη συνάρτηση.

Στη λίστα 2, το escapeXML Η συνάρτηση περιλαμβάνεται στη γραμμή:

Η σύνταξη είναι αρκετά σαφής: εισάγει τις απαιτούμενες συναρτήσεις και τους εκχωρεί ένα πρόθεμα (στην περίπτωση αυτή "fn") που μπορεί να χρησιμοποιηθεί σε όλες τις ακόλουθες εκφράσεις.

Η τυπική βιβλιοθήκη ετικετών JSP (JSTL)

ο εισαγωγή γραμμή στην λίστα 2 κλήσεων taglib, το οποίο είναι σύντομο βιβλιοθήκη ετικετώνή (σε αυτήν την περίπτωση) JSP Standard Tag Library (JSTL). Οι βιβλιοθήκες ετικετών ορίζουν επαναχρησιμοποιήσιμα κομμάτια λειτουργικότητας για το JSP. Το JSTL είναι η τυπική βιβλιοθήκη ετικετών, που περιέχει μια συλλογή ετικετών ετικετών που αποστέλλονται με κάθε servlet και υλοποίηση JSP, συμπεριλαμβανομένου του Tomcat.

Η βιβλιοθήκη "λειτουργιών" είναι μόνο ένα από τα taglib που περιλαμβάνονται στο JSTL. Ένα άλλο κοινό taglib είναι το πυρήνας βιβλιοθήκη, την οποία εισάγετε καλώντας:

Όπως το "fn", η ονομασία "c" είναι συμβατική και θα τη δείτε στις περισσότερες σελίδες JSP.

Εξασφάλιση σελίδων JSP

Ένα παράδειγμα ετικέτας από τη βασική βιβλιοθήκη είναι

που εξάγει το η ετικέτα με το XML έχει ήδη ξεφύγει. Αυτή η συνάρτηση είναι σημαντική επειδή εξάγετε περιεχόμενο απευθείας σε μια ιστοσελίδα μέσω $ {μεταβλητή} ανοίγει την πόρτα σε επιθέσεις με ένεση σεναρίου. Αυτή η απλή λειτουργία χρησιμοποιείται για την προστασία των ιστοσελίδων από τέτοιες επιθέσεις.

Η βασική βιβλιοθήκη περιλαμβάνει επίσης διάφορες ετικέτες για επανάληψη και έλεγχο ροής (όπως χειρισμός IF / ELSE).

Ταξινομήσεις ετικετών JSTL

Υπάρχουν πέντε σύνολα ετικετών που περιλαμβάνονται στο JSTL, το καθένα σχεδιασμένο για έναν συγκεκριμένο τομέα λειτουργικότητας εφαρμογών ιστού:

  • Πυρήνας JSTL: Αντιμετώπιση λογικής και ροής εκτέλεσης. συμβατική ετικέτα: "ντο"
  • Μορφοποίηση JSTL: Αντιμετώπιση μορφοποίησης (όπως ημερομηνίες) και διεθνοποίηση. συμβατική ετικέτα: "fmt".
  • JSTL SQL: Αντιμετώπιση ερωτημάτων βάσεων δεδομένων SQL (αυτό συνήθως αποθαρρύνεται στο επίπεδο προβολής). συμβατική ετικέτα: "τετραγωνικά".
  • JSTL XML: Αντιμετώπιση εργασιών με έγγραφα XML. συμβατική ετικέτα: "Χ".
  • Λειτουργίες JSTL: Αντιμετωπίζοντας κυρίως χειρισμούς String. συμβατική ετικέτα: "στ".

Κλήση taglibs σε σελίδες JSP

Τώρα που έχετε μια λαβή στα βασικά του JSP, ας κάνουμε μια αλλαγή στο παράδειγμα εφαρμογής. Για να ξεκινήσετε, εντοπίστε την εφαρμογή Implicit Object στην εγκατάσταση του Tomcat. Το μονοπάτι είναι: apache-tomcat-8.5.33 / webapps / παραδείγματα / jsp / jsp2 / el.

Ανοίξτε αυτό το αρχείο και εντοπίστε το λειτουργίες περιλαμβάνω:

ακριβώς κάτω από αυτήν τη γραμμή, προσθέστε μια νέα γραμμή:

Πατήστε Return και προσθέστε μια άλλη νέα γραμμή:

Φορτώστε ξανά τη σελίδα στο //localhost:8080/examples/jsp/jsp2/el/implicit-objects.jsp?foo=bar.

Θα πρέπει να δείτε τις ενημερώσεις σας να αντικατοπτρίζονται στην έξοδο.