ΚΕΝΤΡΟ ΠΛΗ.ΝΕ.Τ. Ν. ΦΛΩΡΙΝΑΣ

Η Τεχνολογία JSP (JavaServer Pages)
(Μέρος 2 - Μεταβλητές και Τύποι Δεδομένων)

 

Τα Tags στην JSP

Όπως έχουμε ήδη μάθει, μπορούμε να χρησιμοποιήσουμε τα tags (ετικέτες) της JSP για να δημιουργήσουμε το δυναμικό περιεχόμενο (dynamic content) των ιστοσελίδων. Τα tags της JSP δίνουν τη δυνατότητα στους σχεδιαστές ιστοσελίδων (Web page developers) να δημιουργούν ιστοσελίδες με δυναμικό περιεχόμενο χρησιμοποιώντας προγραμματιστική λογική. Τα tags της JSP είναι δύο ειδών, δηλ. μπορούν να δημιουργηθούν με τα ζευγάρια των tags <% και %> ή και με τα ισοδύναμα tags της XML : <jsp:tagid> και </jsp:tagid>.

Οι εντολές δήλωσης (declaration statements) δηλώνουν μεταβλητές (variables) και μεθόδους (methods) που θα είναι διαθέσιμες στον υπόλοιπο JSP κώδικα και η σύνταξή τους είναι ως εξής :

<%!

                        εντολές_δήλωσης

%>

ή και με το XML ισοδύναμο

            <jsp:declaration>

                        εντολές_δήλωσης

            </jsp:declaration>

Το παρακάτω παράδειγμα JSP κώδικα δηλώνει δύο μεταβλητές και δύο μεθόδους.

 

MyDeclarations.jsp

<html>

<head>

<title> Δήλωση Μεταβλητών και Μεθόδων σε JSP </title>

</head>

<body>

            <%! String variableA = "Αυτή είναι μια μεταβλητή string";

                        int variableB = 100;

 

                        int methodA(int newInteger) {

                                    variableB = newInteger;

                                    return variableB;

                        }

 

String methodB(String newString) {

                                    variableA = newString;

                                    return variableA;

                        }

            %>

</body>

</html>

Οι εκφράσεις (expressions) αποτελούν έναν συνδυασμό από σταθερές, μεταβλητές και μεθόδους μαζί με τελεστές (operators). Οι εκφράσεις μπορούν να βρεθούν είτε μέσα σε JSP scriptlets ή μέσα σ’ ένα tag έκφρασης (expression tag) της JSP. Αν βρίσκονται σ’ ένα scriptlet, οι εκφράσεις αποτελούν συνήθως μέρος μιας εντολής εκχώρησης ή της κλήσης μιας μεθόδου. Αυτό σημαίνει ότι η έκφραση λαμβάνει τιμή (υπολογίζεται) και η τιμή αυτή εκχωρείται σε κάποια άλλη μεταβλητή ή μεταβιβάζεται σε κάποια μέθοδο.

Ενώ, όταν βρίσκονται σ’ ένα tag, οι εκφράσεις υπολογίζονται, το αποτέλεσμά τους μετατρέπεται σε μια παράσταση από strings και τα strings αυτά συμπεριλαμβάνονται στον προκύπτοντα HTML κώδικα που δημιουργείται από το JSP. Η σύνταξη για να δηλώσουμε ένα tag έκφρασης της JSP είναι η εξής :

            <%= έκφραση %>

ή και με το XML ισοδύναμο :

            <jsp:expression>

                        έκφραση

            </jsp:expression >

Ακολουθεί ένα παράδειγμα :

            <%= variableA %>

Όταν εκτελεσθεί το JSP, η έκφραση θα λάβει την τιμή της και θα γίνει τμήμα του HTML κώδικα που θα προκύψει. Αν, όμως, η μεταβλητή δεν είναι string, θα μετατραπεί αυτόματα σε string και θα συμπεριληφθεί στον HTML κώδικα που θα προκύψει. Τα scriptlets δίνουν τη δυνατότητα στους web developers να ενσωματώσουν κώδικα της Java στα JSPs που δημιουργούν και αυτό για να μπορέσουν να εκμεταλλευτούν τις μεγάλες δυνατότητες μιας ισχυρής γλώσσας προγραμματισμού και να δημιουργήσουν έτσι δυναμικό περιεχόμενο.

Τα scriptlets διαθέτουν πολλές δομές ελέγχου της ροής του προγράμματος (flow control structures), όπως είναι οι γνωστές εντολές if, switch και for. Τα directive tags χρησιμοποιούνται για να δώσουν εντολή στα JSPs να εκτελέσουν συγκεκριμένες λειτουργίες ή να έχουν κάποια συγκεκριμένη συμπεριφορά. Για παράδειγμα, το επόμενο directive tag εισάγει κάποιες τάξεις (classes) της Java από ένα πακέτο (packet) :

<%@ page import="java.sql.*" %>

Υπάρχουν τριών ειδών directive tags, τα page, include και taglib, που θα τα δούμε αναλυτικά αργότερα.

Τα tags ενέργειας (action tags) χρησιμοποιούνται για να επεκτείνουν τη λειτουργικότητα των JSPs. Υπάρχουν ενέργειες που δίνουν τη δυνατότητα στα JSPs να χρησιμοποιήσουν αντικείμενα που έχουν δημιουργηθεί στην Java, να συμπεριλάβουν (include) άλλα JSPs, να προωθήσουν (forward) requests σ’ άλλα JSPs και να αλληλεπιδράσουν (interact) μ’ ένα Java plugin. Υπάρχουν έξι tags ενέργειας στην JSP : useBean, setProperty, getProperty, include, forward και plugin.

 

Δήλωση Μεταβλητών στην JSP

Η δήλωση των μεταβλητών και των μεθόδων γίνεται με την τοποθέτησή τους μέσα στα tags δήλωσης της JSP, που είναι τα <%! και %>. Οι δηλώσεις αυτές ορίζουν την ύπαρξη των μεταβλητών και των μεθόδων που θα είναι διαθέσιμες στον υπόλοιπο JSP κώδικα. Οι μεταβλητές (variables) μάς δίνουν τη δυνατότητα να αναφερόμαστε στο περιεχόμενο ενός συγκεκριμένου τμήματος της μνήμης. Η δομή και το μέγεθος των δεδομένων που παριστάνει μια μεταβλητή είναι γνωστά ως τύπος δεδομένων (data type).

Στον αντικειμενοστραφή (object-oriented) προγραμματισμό, οι μεταβλητές συχνά αποκαλούνται αντικείμενα (objects) και οι τύποι δεδομένων αποκαλούνται τάξεις (classes). Ο όρος αντικείμενο χρησιμοποιείται συχνότερα όταν αναφερόμαστε σε μια μεταβλητή που έχει δηλωθεί χρησιμοποιώντας μια τάξη της Java σαν τύπο δεδομένων. Για να ορίσουμε μια μεταβλητή, θα πρέπει να δηλώσουμε τον τύπο και το όνομα της μεταβλητής μέσα στα tags <%! και %> και με την εξής γενική σύνταξη :

            τύπος_δεδομένων όνομα_μεταβλητής [=αρχική_τιμή];

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

<html>

<head>

<title> Παράδειγμα Δήλωσης Μεταβλητών </title>

</head>

<body>

            <%!

int myInteger;

String myString;

float myFloat;

            %>

</body>

</html>

 

Οι Τύποι Δεδομένων της JSP

Οι πιο κοινοί τύποι δεδομένων (data types) που θα συναντήσουμε στην JSP είναι οι εξής :

Τύπος Δεδομένων

Περιγραφή

int

Ακέραιοι αριθμοί

float

Αριθμοί κινητής υποδιαστολής

double

Πραγματικοί αριθμοί διπλής ακρίβειας

long

Ακέραιοι αριθμοί μεγάλης τιμής

char

Χαρακτήρας

String

Ένα Java class με πολλούς χαρακτήρες

Vector

Ένα Java utility class που είναι μια συλλογή αντικειμένων διαφορετικών τύπων

Enumeration

Ένα Java utility interface για τη σειριακή επιθεώρηση συλλογών αντικειμένων

Όταν δηλώνουμε μια μεταβλητή, εκχωρείται κάποια μνήμη για να κρατήσει τα δεδομένα της μεταβλητής. Η μνήμη μπορεί να εκχωρηθεί εμμέσως (implicitly) ή αμέσως (explicitly), ανάλογα με τον τύπο δεδομένων που χρησιμοποιούμε. Οι βασικοί (θεμελιώδεις) τύποι δεδομένων, όπως είναι οι int, float, double, long και char, εκχωρούν μνήμη όταν δηλώνουμε τις μεταβλητές.

Οι τύποι δεδομένων που δημιουργούνται (υλοποιούνται) μέσω των Java classes πρέπει να εκχωρηθούν ρητά (explicitly) με τον τελεστή new. Ο τύπος δεδομένων String είναι μια τάξη (class) της Java, αλλά χρησιμοποιείται τόσο πολύ ώστε ο μεταγλωττιστής της Java αντιμετωπίζει τα strings σαν να ήταν βασικοί (θεμελιώδεις) τύποι δεδομένων.

Ακολουθεί ένα παράδειγμα με τη χρήση του τελεστή new για να δηλώσουμε αντικείμενα (objects) στην Java.

<html>

<head>

<title> Παράδειγμα Δήλωσης Αντικειμένων της Java </title>

</head>

<body>

            <%!

String myString = new String();    // άμεση εκχώρηση μνήμης

String String01;                               // έμμεση εκχώρηση μνήμης

Vector myVector = new Vector();   // άμεση εκχώρηση μνήμης

            %>

</body>

</html>

 

Αρχικοποίηση Μεταβλητών

Η αρχικοποίηση (initialization) μιας μεταβλητής σημαίνει τη συσχέτισή της με μια τιμή και μπορεί να γίνει ταυτόχρονα ή μετά τη δήλωση της μεταβλητής. Ακολουθεί ένα παράδειγμα αρχικοποίησης μεταβλητών κατά τη στιγμή της δήλωσής τους.

<html>

<head>

<title> Αρχικοποίηση Μεταβλητών με τη Δήλωσή τους </title>

</head>

<body>

            <%!

int myInteger = 100;

String myString = "Florina";

float myFloat = 12.57f;

            %>

            <p> myInteger = <%= myInteger %>

            <p> myString = <%= myString %>

            <p> myFloat = <%= myFloat %>

</body>

</html>

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

<html>

<head>

<title> Αρχικοποίηση Μεταβλητών </title>

</head>

<body>

            <%!

int a = 2;

int b = a * 3;

double c = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2));

            %>

            <p> a = <%= a %>

            <p> b = <%= b %>

            <p> c = <%= c %>

</body>

</html>

Το αντικείμενο Math αποτελεί μέρος του πακέτου java.lang και η κλήση στις παραπάνω συναρτήσεις θα μπορούσε να γίνει και ως εξής :

java.lang.Math.sqrt() και java.lang.Math.pow()

 

Δήλωση Πινάκων στην JSP

Μερικές φορές είναι βολικό να χειριστούμε ένα σύνολο δεδομένων σαν μια ομάδα (group) ή συλλογή (collection). Η Java παρέχει αρκετούς τύπους δεδομένων για να μπορέσουμε να χειρισθούμε τα δεδομένα σαν συλλογές, ανάλογα με το αν τα δεδομένα είναι όλα του ιδίου τύπου, με το αν το μέγεθος της συλλογής είναι σταθερό και με το πώς σκοπεύουμε να έχουμε πρόσβαση στα δεδομένα.

Η απλούστερη μορφή μιας συλλογής δεδομένων είναι ο πίνακας (array). Οι πίνακες περιέχουν τιμές ενός συγκεκριμένου τύπου δεδομένων και μπορούμε να δημιουργήσουμε έναν πίνακα που να περιέχει έναν οποιοδήποτε τύπο δεδομένων, χρησιμοποιώντας τα σύμβολα [ και ].

Για να δηλώσουμε έναν πίνακα, γράφουμε πρώτα τον τύπο δεδομένων των τιμών που θα περιέχει ο πίνακας, μετά τα σύμβολα [ ], το όνομα της μεταβλητής πίνακα και τέλος είτε τον τελεστή new για να δημιουργήσουμε έναν κενό πίνακα ή τα σύμβολα { και } με τις τιμές του καινούργιου πίνακα ανάμεσά τους. Ακολουθεί ένα χαρακτηριστικό παράδειγμα.

<html>

<head>

<title> Δήλωση Πινάκων στην JSP </title>

</head>

<body>

            <%!

int[ ] population = {15, 14, 50, 20};

String cities = {"Florina", "Grevena", "Kozani", "Kastoria"};

            %>

            <% for(int i=0; i<4; i++){ %> <hr>

                        <br> Πόλη : <%= cities[i] %>

                        <br> Πληθυσμός : <%= population[i] %>

            <% } %>

</body>

</html>

Οι πίνακες στην JSP έχουν δείκτες που ξεκινούν με την τιμή 0. Στο παραπάνω παράδειγμα, ο πίνακας population περιέχει 4 ακέραιες τιμές, τις 15, 14, 50 και 20, ενώ ο πίνακας cities περιέχει 4 strings (ονόματα πόλεων). Κατά την εκτέλεση του κώδικα, χρησιμοποιούμε έναν βρόχο for για να έχουμε πρόσβαση στα στοιχεία των πινάκων.

 

Δήλωση Μεθόδων στην JSP

Η δήλωση μιας μεθόδου στην JSP γίνεται μέσα στα tags δήλωσης <%! και %> και περιλαμβάνει τον τύπο δεδομένων της τιμής επιστροφής της μεθόδου, το όνομα της μεθόδου, τη λίστα παραμέτρων και τις εντολές (σώμα) της μεθόδου. Η δήλωση μιας μεθόδου έχει την εξής σύνταξη :΄

            τύπος_επιστροφής όνομα_μεθόδου (λίστα_παραμέτρων) {σώμα_μεθόδου}

Το όνομα_μεθόδου είναι ένα αναγνωριστικό (identifier) που χρησιμοποιείται για να αναφερόμαστε στη μέθοδο με το όνομά της. Η λίστα λίστα_παραμέτρων αποτελείται από μια λίστα μεταβλητών και των τύπων δεδομένων τους που είναι χωρισμένες με κόμματα και μέσα σε παρενθέσεις. Το σώμα_μεθόδου αποτελείται από εντολές της Java και μπορεί προαιρετικά να επιστρέφει μια τιμή σ’ αυτόν που κάλεσε τη μέθοδο.

Ο τύπος επιστροφής, το όνομα της μεθόδου και οι παράμετροι αποτελούν την υπογραφή (signature) της μεθόδου. Ακολουθεί ένα απλό παράδειγμα δήλωσης μιας μεθόδου η οποία ελέγχει αν ένα login password έχει ένα ελάχιστο μήκος.

<%! boolean verifyPasswordLength(String password) {

                        if(password.length() < MIN_PASSWORD_LEN) return false;

                        return true;

            }

%>

 

Δημιουργία Δικών μας Τύπων Δεδομένων

Μπορούμε να δημιουργήσουμε δικούς μας τύπους δεδομένων, δημιουργώντας μια κατάλληλη τάξη (class). Για παράδειγμα, η επόμενη τάξη δηλώνει έναν καινούργιο τύπο δεδομένων που αποκαλείται Friend :

public class Friend {

            protected String lastName, firstName;

}

Μπορούμε τώρα να χρησιμοποιήσουμε τις μεθόδους get και set σ’ έναν JSP κώδικα για να έχουμε πρόσβαση στα δεδομένα, ως εξής :

<html>

<head>

<title> Μια Σελίδα JSP με την τάξη Friend </title>

</head>

<body>

<%!     Friend mary = new Friend("Papadopoulou", "Mary"); %>

            <p> Επώνυμο Φίλου : <%= mary.getLastName() %>

            <p> Όνομα Φίλου : <%= mary.getFirstName() %>

</body>

</html>

 

Τα Tags Έκφρασης της JSP

Τα tags έκφρασης της JSP είναι τα <%= και %>, τα οποία μας δίνουν τη δυνατότητα να υπολογίσουμε εκφράσεις της Java και να ενσωματώσουμε το αποτέλεσμα που θα προκύψει σαν απλό κείμενο μέσα στον HTML κώδικα. Για παράδειγμα, ένα JSP που εκτυπώνει πληροφορίες για μια μισθοδοσία, μπορεί να ζητήσει από μια βάση δεδομένων στοιχεία για τους υπαλλήλους που ικανοποιούν κάποια συγκεκριμένα κριτήρια. Για να εκτυπώσει το αποτέλεσμα, το JSP μπορεί να χρησιμοποιήσει μια δομή επανάληψης, όπως είναι ένα for ή ένα while loop.

Μέσα στη δομή τα ονόματα των υπαλλήλων, αφού ανακτηθούν από τη βάση δεδομένων, αποθηκεύονται προσωρινά σε μια μεταβλητή με όνομα employeeName. Η έξοδος του JSP θα είναι πιθανότατα ένας πίνακας στην HTML με μια γραμμή για τον κάθε υπάλληλο. Ανακατεμένο με τον HTML κώδικα για τον πίνακα, το JSP θα πρέπει να εισάγει το όνομα του υπαλλήλου στη μεταβλητή employeeName στο κατάλληλο κελί του πίνακα. Η καταχώριση δυναμικού περιεχομένου, όπως είναι η τιμή της μεταβλητής employeeName, επιτυγχάνεται με τη χρήση των tags έκφρασης της JSP, δηλ. των <%= και %>.

Οι εκφράσεις της JSP είναι κομμάτια JSP κώδικα που μπορούν να πάρουν τιμές για να γίνουν strings και να αναμιχθούν έτσι με τον HTML κώδικα. Στην ουσία χρησιμοποιούνται για να μπορούμε να εκτυπώσουμε τις τιμές των μεταβλητών. Οι εκφράσεις της JSP δηλώνονται με την εξής σύνταξη :

            <%= έκφραση %>

Το = στο αριστερό tag σημαίνει ότι η έκφραση θα πρέπει να πάρει τιμή (υπολογισθεί) και τα tags θα πρέπει να αντικατασταθούν με το αποτέλεσμα που θα προκύψει σε μορφή string. Ας δούμε ένα παράδειγμα :

            <%! int paidia = 2 %>

             Ο Νίκος έχει <%= paidia %> παιδιά

Ο παραπάνω κώδικας θα έχει σαν αποτέλεσμα το string Ο Νίκος έχει 2 παιδιά. Εδώ βέβαια η έκφραση είναι μια απλή αναφορά σε μια μεταβλητή με τιμή 2.

 

Αναφορά σε Μεταβλητές Μέσα από Εκφράσεις

Θα δούμε τώρα έναν πιο πολύπλοκο JSP κώδικα όσον αφορά τα tags έκφρασης. Το παρακάτω παράδειγμα περιέχει μεταβλητές διαφορετικών βασικών τύπων δεδομένων. Εδώ φαίνεται πώς η JSP μετατρέπει τις αριθμητικές τιμές σε strings και τα ενώνει μετά μ’ άλλα strings.

Ο τελεστής + συνενώνει strings σ’ ένα μόνο string και προσθέτει αριθμούς, ενώ όταν έχουμε συνδυασμό από strings και αριθμούς, πρώτα μετατρέπονται οι αριθμοί σε strings και μετά ενώνονται σ’ ένα ενιαίο string.

<html>

<head>

<title> Αναφορά σε Μεταβλητές </title>

</head>

<body>

<%!     String stringVar = "Μεταβλητή string";

            int integerVar = 200;

            double doubleVar = 216.782;

%>

            Μεταβλητή string = <%=stringVar%>

            Μεταβλητή integer = <%=integerVar%>

            Μεταβλητή double = <%=doubleVar%>

String + Integer = <%=stringVar + integerVar%>

String + Double = <%=stringVar + doubleVar%>

Integer + Double = <%=integerVar + doubleVar%>

</body>

</html>

 

Κλήση Μεθόδων Μέσα από Εκφράσεις

Οι εκφράσεις της JSP μπορεί να περιέχουν μεταβλητές αλλά και κλήσεις σε μεθόδους. Οι μέθοδοι μπορεί να δηλωθούν είτε τοπικά μέσα στον JSP κώδικα ή σ’ ένα Java class. Τοπικά οι μέθοδοι δηλώνονται με τα tags δήλωσης της JSP, τα γνωστά <%! και %>.

Το επόμενο παράδειγμα δείχνει πώς μια έκφραση της JSP μπορεί να αναφέρεται σε μεθόδους που έχουν δηλωθεί τοπικά χρησιμοποιώντας τα tags δήλωσης της JSP. Οι μέθοδοι επιστρέφουν τιμές διαφορετικών τύπων δεδομένων και μετατρέπονται σε strings από τα tags έκφρασης της JSP έτσι ώστε να μπορούν να ενσωματωθούν στον HTML κώδικα που θα προκύψει.

<html>

<head>

<title> Κλήση Τοπικών Μεθόδων </title>

</head>

<body>

<%!     String stringVar = "Μεταβλητή string";

int integerVar = 100;

            double doubleVar = 200.543;

            String getStringVar() {return stringVar;}

            integer getIntegerVar() {return integerVar;}

            double getDoubleVar() {return doubleVar;}

%>

<ul>

<li>    getStringVar() = <%=getStringVar()%>

<li>    getIntegerVar() = <%=getIntegerVar()%>

<li>    getDoubleVar() = <%=getDoubleVar()%>

<li>    getStringVar()+getIntegerVar() = <%=getStringVar()+getIntegerVar()%>

<li>    getStringVar()+getDoubleVar() = <%=getStringVar()+getDoubleVar()%>

<li>    getIntegerVar()+getDoubleVar() = <%=getIntegerVar()+getDoubleVar()%>

</ul>

</body>

</html>

 

Τα Scriptlets

Τα scriptlets αποτελούνται από ενσωματωμένο κώδικα της Java ανάμεσα στα tags <% και %>. Ο κώδικας της Java αποτελείται από ένα σύνολο δηλώσεων, εκφράσεων και εντολών που ελέγχουν προγραμματιστικά το περιεχόμενο του JSP.

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

Η Java παρέχει τις εξής δύο δομές ελέγχου της ροής ενός προγράμματος :

 

back.gif (9867 bytes)

Επιστροφή