JSP Implicit Objects

⚡ Έξυπνη Σύνοψη

Τα έμμεσα αντικείμενα JSP είναι προκαθορισμένες μεταβλητές που δημιουργεί αυτόματα το κοντέινερ servlet κατά τη μετάφραση σελίδας, επιτρέποντας στους προγραμματιστές να έχουν πρόσβαση σε ροές εξόδου, αιτήματα, απαντήσεις, συνεδρίες και δεδομένα εφαρμογής απευθείας μέσα σε μια σελίδα χωρίς χειροκίνητη δήλωση ή επιπλέον διαμόρφωση.

  • 🖨️ Έξω Αντικείμενο: Γράφει δεδομένα στο buffer και στέλνει έξοδο στον πελάτη μέσω του JSPWriter ρεύμα.
  • 📥 Αντικείμενο Αίτησης: Μια παρουσία του HttpServletRequest που ανακτά παραμέτρους, κεφαλίδες και λεπτομέρειες διακομιστή χρησιμοποιώντας τη συνάρτηση getParameter().
  • 📤 Αντικείμενο απόκρισης: Υλοποιεί το HttpServletResponse για να ορίσει τον τύπο περιεχομένου, να προσθέσει cookies και να ανακατευθύνει τον πελάτη.
  • ⚙️ Διαμόρφωση και εφαρμογή: Το Config διαβάζει τις παραμέτρους αρχικοποίησης από το web.xml. Η εφαρμογή μοιράζεται δεδομένα περιβάλλοντος σε ολόκληρη την ανάπτυξη.
  • 🗂️ Περίοδος σύνδεσης και περιεχόμενο σελίδας: Η συνεδρία διατηρεί τα χαρακτηριστικά χρήστη σε όλες τις σελίδες. Το PageContext διαχειρίζεται τα χαρακτηριστικά σε όλα τα εύρη σελίδας, αιτήματος, συνεδρίας και εφαρμογής.
  • ⚠️ Αντικείμενο εξαίρεσης: Ένα εργαλείο Throwable διαθέσιμο μόνο σε σελίδες σφαλμάτων που αναφέρει σφάλματα χρόνου εκτέλεσης, όπως το ArrayIndexOutOfBounds.

Τι είναι το αντικείμενο JSP Implicit;

  • Τα έμμεσα αντικείμενα JSP δημιουργούνται κατά τη φάση μετάφρασης του JSP στο servlet.
  • Αυτά τα αντικείμενα μπορούν να χρησιμοποιηθούν απευθείας σε σενάρια που περιλαμβάνονται στη μέθοδο εξυπηρέτησης.
  • Δημιουργούνται αυτόματα από το κοντέινερ και μπορούν να προσπελαστούν χρησιμοποιώντας αντικείμενα.

Πόσα Implicit Objects είναι διαθέσιμα στο JSP;

Υπάρχουν 9 τύποι σιωπηρών αντικειμένων διαθέσιμα στο κοντέινερ:

  1. Έξω
  2. Αίτημα
  3. Απάντηση
  4. Config
  5. Εφαρμογή
  6. Συνεδρία
  7. PageContext
  8. Σελίδα
  9. Εξαίρεση

Ας μελετήσουμε ένα προς ένα

1) Έξω

  • Το Out είναι ένα από τα σιωπηρά αντικείμενα για την εγγραφή των δεδομένων στο buffer και την αποστολή εξόδου στον πελάτη ως απόκριση
  • Το αντικείμενο Out μας επιτρέπει να έχουμε πρόσβαση στη ροή εξόδου του servlet
  • Το Out είναι αντικείμενο του javax.servlet.jsp.jspWriter τάξη
  • Ενώ εργάζεστε με servlet, χρειαζόμαστε αντικείμενο εκτύπωσης

Παράδειγμα:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP1</title>
</head>
<body>
<% int num1=10;int num2=20;
out.println("num1 is " +num1);
out.println("num2 is "+num2);
%>
</body>
</html>

Επεξήγηση του κώδικα:

Code Γραμμή 11-12– το out χρησιμοποιείται για εκτύπωση σε ροή εξόδου

Όταν εκτελούμε τον παραπάνω κώδικα, έχουμε την ακόλουθη έξοδο:

Έξω στο JSP

Παραγωγή:

  • Στην έξοδο, παίρνουμε τις τιμές num1 και num2

2) Αίτημα

  • Το αντικείμενο αίτησης είναι μια παρουσία του java.servlet.http.HttpServletRequest και είναι ένα από τα όρισμα της μεθόδου υπηρεσίας
  • Θα δημιουργηθεί ανά κοντέινερ για κάθε αίτημα.
  • Θα χρησιμοποιηθεί για να ζητηθούν πληροφορίες όπως παράμετρος, πληροφορίες κεφαλίδας, όνομα διακομιστή κ.λπ.
  • Χρησιμοποιεί getParameter() για πρόσβαση στην παράμετρο αιτήματος.

Παράδειγμα:

Implicit_jsp2.jsp(φόρμα από την οποία αποστέλλεται το αίτημα στο guru.jsp)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru form JSP2</title>
</head>
<body>
<form action="guru.jsp">
<input type="text" name="username">
<input type="submit" value="submit">
</form>
</body>
</html>

Guru.jsp (όπου λαμβάνεται η ενέργεια)

Αίτημα σε JSP

Επεξήγηση κωδικού:

Code Γραμμή 10-13: Στο implicit_jsp2.jsp(φόρμα) αποστέλλεται αίτημα, επομένως το όνομα χρήστη της μεταβλητής υποβάλλεται σε επεξεργασία και αποστέλλεται στο guru.jsp που είναι ενέργεια του JSP.

Guru.jsp

Code Γραμμή 10-11: Είναι η ενέργεια jsp όπου γίνεται η επεξεργασία του αιτήματος και το όνομα χρήστη λαμβάνεται από τη φόρμα jsp.

Όταν εκτελείτε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο

Παραγωγή:

Αίτημα σε JSP

Όταν γράφετε δοκιμή και κάνετε κλικ στο κουμπί υποβολής, τότε λαμβάνετε το ακόλουθο αποτέλεσμα "Welcome Test".

Αίτημα σε JSP

3) Απάντηση

  • Το "Response" είναι ένα παράδειγμα κλάσης που υλοποιεί τη διεπαφή HttpServletResponse
  • Το Container δημιουργεί αυτό το αντικείμενο και περνά στη μέθοδο _jspservice() ως παράμετρο
  • Το "Αντικείμενο απόκρισης" θα δημιουργηθεί από το κοντέινερ για κάθε αίτημα.
  • Αντιπροσωπεύει την απάντηση που μπορεί να δοθεί στον πελάτη
  • Το σιωπηρό αντικείμενο απόκρισης χρησιμοποιείται για τον τύπο περιεχομένου, την προσθήκη cookie και την ανακατεύθυνση στη σελίδα απόκρισης

Παράδειγμα:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP4</title>
</head>
<body>
<%response.setContentType("text/html"); %>
</body>
</html>

Επεξήγηση του κώδικα:

Code Γραμμή 11: Στο αντικείμενο απόκρισης μπορούμε να ορίσουμε τον τύπο περιεχομένου

Εδώ ορίζουμε μόνο τον τύπο περιεχομένου στο αντικείμενο απόκρισης. Ως εκ τούτου, δεν υπάρχει έξοδος για αυτό.

4) Διαμόρφωση

  • Το "Config" είναι του τύπου java.servlet.servletConfig
  • Δημιουργείται από το κοντέινερ για κάθε σελίδα jsp
  • Χρησιμοποιείται για τη λήψη της παραμέτρου προετοιμασίας στο web.xml

Παράδειγμα:

Web.xml (καθορίζει το όνομα και τον χάρτη)ping του servlet)

Διαμόρφωση στο JSP

Implicit_jsp5.jsp (λήψη της τιμής του ονόματος servlet)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP5</title>
</head>
<body>
<% String servletName = config.getServletName();
out.println("Servlet Name is " +servletName);%>
</body>
</html>

Επεξήγηση του κώδικα:

Στο web.xml

Code Γραμμή 14-17: Στο web.xml έχουμε τον χάρτηping των servlets στις κλάσεις.

Implicit_jsp5.jsp

Code Γραμμή 10-11: Για να λάβουμε το όνομα του servlet στο JSP, μπορούμε να χρησιμοποιήσουμε το config.getServletName, το οποίο θα μας βοηθήσει να πάρουμε το όνομα του servlet.

Όταν εκτελείτε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο:

Απάντηση στο JSP

Παραγωγή:

  • Το όνομα του servlet είναι "GuruServlet” όπως το όνομα υπάρχει στο web.xml

5) Εφαρμογή

  • Το αντικείμενο εφαρμογής (γραμμή κώδικα 10) είναι μια παρουσία του javax.servlet.ServletContext και χρησιμοποιείται για τη λήψη των πληροφοριών περιβάλλοντος και των χαρακτηριστικών στο JSP.
  • Το αντικείμενο εφαρμογής δημιουργείται από ένα κοντέινερ ανά εφαρμογή, όταν η εφαρμογή αναπτύσσεται.
  • Το αντικείμενο Servletcontext περιέχει ένα σύνολο μεθόδων που χρησιμοποιούνται για την αλληλεπίδραση με το κοντέινερ servlet. Μπορούμε να βρούμε πληροφορίες για το κοντέινερ servlet

Παράδειγμα:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Implicit JSP6</title>
</head>
<body>
<% application.getContextPath(); %>
</body>
</html>

Επεξήγηση του κώδικα:

  • Στον παραπάνω κώδικα, το χαρακτηριστικό εφαρμογής βοηθά να λάβετε τη διαδρομή περιβάλλοντος της σελίδας JSP.

6) Συνεδρία

  • Η συνεδρία κρατά αντικείμενο "httpsession" (γραμμή κώδικα 10).
  • Το αντικείμενο περιόδου λειτουργίας χρησιμοποιείται για τη λήψη, τον ορισμό και την αφαίρεση χαρακτηριστικών στο εύρος της περιόδου σύνδεσης και επίσης χρησιμοποιείται για τη λήψη πληροφοριών συνεδρίας

Παράδειγμα:

Implicit_jsp7 (το χαρακτηριστικό έχει οριστεί)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit JSP</title>
</head>
<body>
<% session.setAttribute("user","GuruJSP"); %>
<a href="implicit_jsp8.jsp">Click here to get user name</a>
</body>
</html>

Implicit_jsp8.jsp (getAttribute)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>implicit Guru JSP8</title>
</head>
<body>
<% String name = (String)session.getAttribute("user");
out.println("User Name is " +name);
%>
</body>
</html>

Επεξήγηση του κώδικα:

Implicit_jsp7.jsp

Code Γραμμή 11: ορίζουμε το χαρακτηριστικό χρήστη στη μεταβλητή συνεδρίας και αυτή η τιμή μπορεί να ληφθεί από τη συνεδρία σε όποιο jsp κληθεί από αυτήν (_jsp8.jsp).

Code Γραμμή 12: Καλούμε ένα άλλο jsp στο href στο οποίο θα λάβουμε την τιμή για το χαρακτηριστικό χρήστη που έχει οριστεί.

Implicit_jsp8.jsp

Code Γραμμή 11: Λαμβάνουμε την τιμή του χαρακτηριστικού χρήστη από το αντικείμενο συνεδρίας και εμφανίζουμε αυτήν την τιμή

Όταν εκτελείτε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο:

Συνεδρία στο JSP

Όταν κάνετε κλικ στον σύνδεσμο για το όνομα χρήστη. Θα λάβετε την ακόλουθη έξοδο.

Συνεδρία στο JSP

Παραγωγή:

  • Όταν κάνουμε κλικ στον σύνδεσμο που δίνεται στο implicit_jsp7.jsp, τότε ανακατευθυνόμαστε στη δεύτερη σελίδα jsp, δηλαδή στη σελίδα (_jsp8.jsp) και παίρνουμε την τιμή από το αντικείμενο περιόδου λειτουργίας του χαρακτηριστικού χρήστη (_jsp7.jsp).

7) Περιεχόμενο σελίδας

  • Αυτό το αντικείμενο είναι τύπου pagecontext.
  • Χρησιμοποιείται για τη λήψη, τον ορισμό και την αφαίρεση των χαρακτηριστικών από ένα συγκεκριμένο πεδίο

Τα πεδία είναι 4 τύπων:

  • Σελίδα
  • Αίτημα
  • Συνεδρία
  • Εφαρμογή

Παράδειγμα:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP9</title>
</head>
<body>
<% pageContext.setAttribute("student","gurustudent",pageContext.PAGE_SCOPE);
String name = (String)pageContext.getAttribute("student");
out.println("student name is " +name);
%>
</body>
</html>

Επεξήγηση του κώδικα:

Code Γραμμή 11: ορίζουμε το χαρακτηριστικό χρησιμοποιώντας το αντικείμενο pageContext και έχει τρεις παραμέτρους:

  • Κλειδί
  • αξία
  • Scope

Στον παραπάνω κώδικα, το κλειδί είναι το student και η τιμή είναι "gurustudent" ενώ το εύρος είναι το εύρος της σελίδας. Εδώ το εύρος είναι "σελίδα" και μπορεί να χρησιμοποιηθεί μόνο το εύρος της σελίδας.

Code Γραμμή 12: Λαμβάνουμε την τιμή του χαρακτηριστικού χρησιμοποιώντας το pageContext

Όταν εκτελείτε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο:

PageContext στο JSP

Παραγωγή:

  • Η έξοδος θα εκτυπώσει "το όνομα του μαθητή είναι γκουρούστεντ".

8) Σελ

  • Η μεταβλητή Page implicit κρατά το τρέχον εκτελούμενο αντικείμενο servlet για το αντίστοιχο jsp.
  • Λειτουργεί ως αυτό το αντικείμενο για την τρέχουσα σελίδα jsp.

Παράδειγμα:

Σε αυτό το παράδειγμα, χρησιμοποιούμε αντικείμενο σελίδας για να λάβουμε το όνομα της σελίδας χρησιμοποιώντας τη μέθοδο toString

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP10</title>
</head>
<body>
<% String pageName = page.toString();
out.println("Page Name is " +pageName);%>
</body>
</html>

Επεξήγηση του κώδικα:

Code Γραμμή 10-11: Σε αυτό το παράδειγμα, προσπαθούμε να χρησιμοποιήσουμε τη μέθοδο toString() του αντικειμένου σελίδας και προσπαθούμε να πάρουμε το όνομα συμβολοσειράς της Σελίδας JSP.

Όταν εκτελείτε τον κώδικα, λαμβάνετε την ακόλουθη έξοδο:

Σελίδα στο JSP

Παραγωγή:

  • Η έξοδος είναι το όνομα συμβολοσειράς της παραπάνω σελίδας jsp

9) Εξαίρεση

  • Εξαίρεση είναι το σιωπηρό αντικείμενο της κλάσης ρίχνοντας.
  • Χρησιμοποιείται για χειρισμός εξαιρέσεων στο JSP.
  • Το αντικείμενο εξαίρεσης μπορεί να χρησιμοποιηθεί μόνο σε σελίδες σφαλμάτων.Παράδειγμα:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP 11</title>
</head>
<body>
<%int[] num1={1,2,3,4};
out.println(num1[5]);%>
<%= exception %>
</body>
</html>

Επεξήγηση του κώδικα:

Code Γραμμή 10-12 – Έχει έναν πίνακα αριθμών, δηλαδή num1 με τέσσερα στοιχεία. Στην έξοδο, προσπαθούμε να εκτυπώσουμε το πέμπτο στοιχείο του πίνακα από το num1, το οποίο δεν δηλώνεται στη λίστα πίνακα. Έτσι χρησιμοποιείται για να λάβουμε αντικείμενο εξαίρεσης του jsp.

Παραγωγή:

Εξαίρεση στο JSP

Λαμβάνουμε ArrayIndexOfBoundsException στον πίνακα όπου λαμβάνουμε έναν πίνακα num1 του πέμπτου στοιχείου.

Συχνές Ερωτήσεις

Όχι. Το container δημιουργεί αυτόματα και τα εννέα έμμεσα αντικείμενα κατά τη φάση μετάφρασης. Οι προγραμματιστές μπορούν να τα χρησιμοποιήσουν απευθείας μέσα σε scriptlets και στη μέθοδο service χωρίς να εισάγουν πακέτα ή να δηλώσουν μεταβλητές.

Όχι. Τα έμμεσα αντικείμενα είναι διαθέσιμα μόνο μέσα σε scriptlets και εκφράσεις που αντιστοιχίζονται στη μέθοδο service. Δεν μπορούν να χρησιμοποιηθούν μέσα σε ετικέτες δήλωσης JSP, οι οποίες δημιουργούν μέλη σε επίπεδο κλάσης εκτός αυτής της μεθόδου.

Το PageContext λειτουργεί και στα τέσσερα πεδία εφαρμογής - σελίδα, αίτημα, συνεδρία και εφαρμογή. Παρέχει τις μεθόδους setAttribute, getAttribute και removeAttribute, καθιστώντας το το πιο ευέλικτο έμμεσο αντικείμενο για τη διαχείριση δεδομένων σε διαφορετικά επίπεδα πεδίου εφαρμογής.

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

Ναι. Τα εργαλεία τεχνητής νοημοσύνης μπορούν να δημιουργήσουν λειτουργικά τμήματα JSP χρησιμοποιώντας τα αντικείμενα out, request, session και άλλα έμμεσα αντικείμενα και, στη συνέχεια, να εξηγήσουν κάθε γραμμή. Οι προγραμματιστές θα πρέπει να ελέγξουν την έξοδο για σωστό χειρισμό εμβέλειας και ασφάλεια.

Συνοψίστε αυτήν την ανάρτηση με: