Αίτημα πελάτη JSP
⚡ Έξυπνη Σύνοψη
Το αίτημα πελάτη JSP και η απόκριση διακομιστή χρησιμοποιούν στοιχεία δράσης JSP για τον έλεγχο της μηχανής servlet. Το πρόγραμμα περιήγησης στέλνει πληροφορίες μέσω κεφαλίδων HTTP, ο διακομιστής επιστρέφει μια γραμμή κατάστασης και κεφαλίδες, και οι κωδικοί κατάστασης HTTP αναφέρουν το αποτέλεσμα κάθε αιτήματος.
Οι ενέργειες JSP χρησιμοποιούν δομές σε σύνταξη XML για να ελέγχουν τη συμπεριφορά της μηχανής servlet. Θα μάθουμε περισσότερες λεπτομέρειες σχετικά με διάφορα στοιχεία ενέργειας JSP, όπως το αίτημα πελάτη, την απόκριση διακομιστή και τους κωδικούς κατάστασης HTTP.
Αίτημα πελάτη JSP
- Όταν ζητείται η ιστοσελίδα, στέλνει πληροφορίες στον διακομιστή ιστού στην κεφαλίδα HTTP.
- Μπορούμε να χρησιμοποιήσουμε αυτές τις πληροφορίες χρησιμοποιώντας το αντικείμενο HTTPServletRequest.
- Οι πληροφορίες που αποστέλλονται από το πρόγραμμα περιήγησης αποθηκεύονται στην κεφαλίδα αιτήματος του αιτήματος HTTP.
- Χρησιμοποιούμε διαφορετικές κεφαλίδες για να στείλουμε πληροφορίες στο αντικείμενο αιτήματος.
Κεφαλίδες στο JSP
Οι διαφορετικές κεφαλίδες στο JSP περιγράφονται παρακάτω:
| επικεφαλίδα | Περιγραφή | Παράδειγμα |
|---|---|---|
| Αποδέχομαι | Καθορίζει τύπους MIME που μπορούν να χειριστούν το πρόγραμμα περιήγησης ή άλλοι πελάτες | Εικόνα/png ή εικόνα/jpeg |
| Αποδοχή-σετ χαρακτήρων | Χρησιμοποιεί το σύνολο χαρακτήρων που χρησιμοποιείται από το πρόγραμμα περιήγησης για την εμφάνιση των πληροφοριών | ISO-8859-1 |
| Αποδοχή-Κωδικοποίηση | Καθορίζει τον τύπο της κωδικοποίησης που χειρίζεται το πρόγραμμα περιήγησης | Gzip ή συμπίεση |
| Αποδοχή-γλώσσα | Καθορίζει τη γλώσσα που καθορίζεται από τους πελάτες | En, en_us |
| εξουσιοδότηση | Κεφαλίδα που χρησιμοποιείται από πελάτες όταν προσπαθούν να αποκτήσουν πρόσβαση σε ιστοσελίδες που προστατεύονται με κωδικό πρόσβασης | |
| σύνδεση | Υποδεικνύει εάν ο πελάτης μπορεί να χειριστεί μόνιμες συνδέσεις HTTP (το πρόγραμμα περιήγησης μπορεί να ανακτήσει πολλά αρχεία) | Κρατήσει ζωντανή |
| Μήκος περιεχομένου | Ισχύει για ανάρτηση αιτημάτων. Δίνει μέγεθος των δεδομένων ανάρτησης byte | |
| Cookie | Επιστρέφει το cookie στο διακομιστή (αυτά που είχαν σταλεί προηγουμένως στο πρόγραμμα περιήγησης) | |
| Οικοδεσπότης | Καθορίζει τον κεντρικό υπολογιστή και τη θύρα του αρχικού URL | |
| Εάν τροποποιηθεί από τότε | Υποδεικνύει ότι απαιτεί μόνο μια σελίδα εάν έχει αλλάξει ή τροποποιηθεί | |
| Αν δεν έχει τροποποιηθεί από τότε | Υποδεικνύει ότι απαιτεί μια σελίδα μόνο εάν δεν έχει αλλάξει ή τροποποιηθεί | |
| Αναφέρων | Υποδηλώνει URL της παραπομπής URL σελίδα | |
| Χρήστης-πράκτορας | Προσδιορίζει το αίτημα δημιουργίας προγράμματος περιήγησης ή πελάτη |
Μέθοδοι κεφαλίδας HTTP στο JSP
Οι ακόλουθες μέθοδοι χρησιμοποιούνται για την ανάγνωση της κεφαλίδας HTTP στη σελίδα JSP:
- Cookie[] getCookies() – επιστρέφει έναν πίνακα που περιέχει αντικείμενα cookie που έχει στείλει ο πελάτης
- Απαρίθμηση getAttributeNames() – περιέχει απαρίθμηση ονομάτων χαρακτηριστικών για αίτημα
- Απαρίθμηση getHeaderNames() – Περιέχει απαρίθμηση των ονομάτων της κεφαλίδας.
- Απαρίθμηση getParameterNames() – περιέχει απαρίθμηση των ονομάτων παραμέτρων στο αίτημα.
- HttpSession getSession() – επιστρέφει την τρέχουσα συνεδρία που σχετίζεται με το αίτημα ή εάν δεν έχει συνεδρία τότε θα δημιουργήσει μια νέα.
- Τοπικές ρυθμίσεις getLocale() – επιστρέφει την προτιμώμενη τοπική ρύθμιση στην οποία ο πελάτης θα δέχεται περιεχόμενο. Έχει αντιστοιχιστεί στην απάντηση. Από προεπιλογή, η τιμή θα είναι η προεπιλεγμένη τοπική ρύθμιση του διακομιστή.
- Αντικείμενο getAttribute (όνομα συμβολοσειράς) – επιστρέφει την τιμή του named χαρακτηριστικό ως αντικείμενο.
- ServletInputStream getInputStream() – ανακτά το σώμα του αιτήματος ως δυαδικά δεδομένα.
- Συμβολοσειρά getAuthType() – επιστρέφει το όνομα του συστήματος ελέγχου ταυτότητας για την προστασία του servlet
- Συμβολοσειρά getCharacterEncoding() – επιστρέφει το όνομα της κωδικοποίησης χαρακτήρων που χρησιμοποιείται στο σώμα της αίτησης.
- Συμβολοσειρά getContentType() – επιστρέφει τον τύπο MIME του σώματος της αίτησης.
- Συμβολοσειρά getContextPath() – επιστρέφει το τμήμα του αιτήματος Το URI υποδεικνύει τη διαδρομή περιβάλλοντος του URI
- String getHeader (Όνομα συμβολοσειράς) – επιστρέφει την κεφαλίδα αιτήματος ως συμβολοσειρά
- String getMethod() – επιστρέφει το όνομα της μεθόδου HTTP όπως GET, POST
- String getParameter (όνομα συμβολοσειράς) – επιστρέφει την παράμετρο του αιτήματος ως συμβολοσειρά.
- Συμβολοσειρά getPathInfo() – επιστρέφει τις πληροφορίες διαδρομής που σχετίζονται με το URL
- Συμβολοσειρά getQueryString() – επιστρέφει τη συμβολοσειρά ερωτήματος που σχετίζεται με το αίτημα URL
- Συμβολοσειρά getServletPath() – επιστρέφει το μέρος του URLτου αιτήματος που καλεί το JSP
- String[] getParameterValues(Όνομα συμβολοσειράς) – επιστρέφει τον πίνακα αντικειμένων συμβολοσειράς που περιέχουν τις τιμές που έχει η παράμετρος αιτήματος
Παράδειγμα:
Στο παρακάτω παράδειγμα, χρησιμοποιούμε διαφορετικές μεθόδους χρησιμοποιώντας αντικείμενο αίτησης
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.io.* java.util.*" %> <!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>Client Request Guru JSP</title> </head> <body> <h2>Client Request Guru JSP</h2> <table border="1"> <tr> <th>guru header</th><th>guru header Value(s)</th> </tr> <% HttpSession gurusession = request.getSession(); out.print("<tr><td>Session Name is </td><td>" +gurusession+ "</td.></tr>"); Locale gurulocale = request.getLocale (); out.print("<tr><td>Locale Name is</td><td>" +gurulocale + "</td></tr>"); String path = request.getPathInfo(); out.print("<tr><td>Path Name is</td><td>" +path+ "</td></tr>"); String lpath = request.get(); out.print("<tr><td>Context path is</td><td>" +lipath + "</td></tr>"); String servername = request.getServerName(); out.print("<tr><td>Server Name is </td><td>" +servername+ "</td></tr>"); int portname = request.getServerPort(); out.print("<tr><td>Server Port is </td><td>" +portname+ "</td></tr>"); Enumeration hnames = request.getHeaderNames(); while(hnames.hasMoreElements()) { String paramName = (String)hnames.nextElement(); out.print ("<tr><td>" + paramName + "</td>" ); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>"); } %>
Επεξήγηση του κώδικα:
Code Γραμμή 17: Χρησιμοποιώντας το αντικείμενο αιτήματος, λαμβάνουμε το αντικείμενο συνεδρίας αυτής της συγκεκριμένης συνεδρίας και παίρνουμε την τιμή αντικειμένου αυτής της συνεδρίας
Code Γραμμή 19: Χρησιμοποιώντας το αντικείμενο request, λαμβάνουμε τις τοπικές ρυθμίσεις αυτής της συγκεκριμένης συνεδρίας, δηλαδή τις τοπικές ρυθμίσεις en_US για αυτό το JSP.
Code Γραμμή 21: Χρησιμοποιώντας το αντικείμενο request, λαμβάνουμε πληροφορίες διαδρομής για αυτό το JSP. Σε αυτήν την περίπτωση, είναι null καθώς δεν υπάρχει διαδρομή για URL που αναφέρθηκαν.
Code Γραμμή 23: Χρησιμοποιώντας το αντικείμενο αιτήματος, λαμβάνουμε τη διαδρομή περιβάλλοντος, δηλαδή τη διαδρομή ρίζας
Code Γραμμή 25: Χρησιμοποιώντας το αντικείμενο αιτήματος, παίρνουμε το όνομα διακομιστή.
Code Γραμμή 27: Χρησιμοποιώντας το αντικείμενο αιτήματος, λαμβάνουμε θύρα διακομιστή.
Code Γραμμή 29-35: Χρησιμοποιώντας το αντικείμενο αιτήματος, λαμβάνουμε ονόματα κεφαλίδων που βγαίνουν ως απαρίθμηση και επομένως παίρνουμε όλες τις τιμές κεφαλίδων στα ονόματα κεφαλίδων.
Σε αυτό, λαμβάνουμε όλες τις τιμές κεφαλίδας ως α Cookie, κεντρικός υπολογιστής, σύνδεση, αποδοχή γλώσσας, αποδοχή κωδικοποίησης.
Όταν εκτελείτε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο:
Παραγωγή:
Λαμβάνουμε τη σειρά τιμών όπως όνομα συνεδρίας, όνομα τοπικής ρύθμισης, όνομα διαδρομής, όνομα διακομιστή, όνομα θύρας, κεντρικός υπολογιστής, διαδρομή περιβάλλοντος και όλες οι τιμές κεφαλίδας αυτού JSP.
Απόκριση διακομιστή JSP
- Όταν ένα αίτημα υποβάλλεται σε επεξεργασία και στη συνέχεια δημιουργείται η απάντηση από τον διακομιστή web. Αποτελείται από μια γραμμή κατάστασης, κεφαλίδες απόκρισης, μια κενή γραμμή και έγγραφο.
- Είναι το αντικείμενο της κλάσης HTTPServletResponse, η οποία είναι ένα αντικείμενο απόκρισης.
- Η γραμμή κατάστασης είναι μια έκδοση του HTML.
Κεφαλίδες απόκρισης στο JSP
Οι κεφαλίδες απόκρισης στο JSP αναφέρονται παρακάτω:
| επικεφαλίδα | Περιγραφή |
|---|---|
| Επιτρέψτε | Καθορίζει τις μεθόδους αιτήματος όπως GET, POST που ζητά ο διακομιστής |
| Cache-έλεγχος | Το έγγραφο απάντησης μπορεί να αποθηκευτεί προσωρινά. Μπορεί να είναι δημόσιο, ιδιωτικό και χωρίς κρυφή μνήμη. Καμία κρυφή μνήμη δεν καθορίζει ότι το έγγραφο δεν πρέπει να αποθηκευτεί προσωρινά |
| σύνδεση | Καθοδηγεί εάν το πρόγραμμα περιήγησης θα πρέπει να χρησιμοποιεί savedHTTPConnections ή όχι. Η τιμή κλεισίματος αντιπροσωπεύει ότι το πρόγραμμα περιήγησης δεν πρέπει να χρησιμοποιεί μόνιμες συνδέσεις HTTP και το "keep-alive" σημαίνει τη χρήση μόνιμων συνδέσεων |
| Περιεχόμενο-διάθεση | Για να ρωτήσετε τον χρήστη εάν θα αποθηκεύσει την απάντηση στο δίσκο ή όχι |
| Κωδικοποίηση περιεχομένου | Η σελίδα πρέπει να κωδικοποιείται κατά τη μετάδοση |
| Μήκος περιεχομένου | Αριθμός byte στην απάντηση |
| Τύπος περιεχομένου | Καθορίζει τον τύπο απόκρισης MIME |
| Λήγει | Καθορίζει μέχρι πότε το περιεχόμενο θα πρέπει να θεωρείται μη ενημερωμένο και δεν θα πρέπει να αποθηκευτεί προσωρινά |
| Τελευταία ενημέρωση: | Υποδεικνύει πότε το έγγραφο τροποποιήθηκε τελευταία φορά |
| Θα πρέπει να συμπεριληφθεί σε όλες τις απαντήσεις που έχουν κωδικό κατάστασης το 300 ως κωδικό κατάστασης | |
| Φρεσκάρω | Καθορίζει τον τρόπο εύρεσης της ενημερωμένης σελίδας. |
| Επανάληψη-μετά | Μπορεί να χρησιμοποιηθεί με απόκριση 503 για να πει στον πελάτη πόσο σύντομα μπορεί να επαναλάβει το αίτημα |
| Set-cookie | Καθορίζει το cookie που σχετίζεται με τη σελίδα |
Μέθοδοι κεφαλίδας απόκρισης HTTP στο JSP
Ακολουθούν οι μέθοδοι στο JSP που χρησιμοποιούν αντικείμενο απόκρισης:
- Συμβολοσειρά encodeRedirectURL(Σειρά URL) - κωδικοποιεί το URL σε ανακατεύθυνσηURL μέθοδος.
- Κωδικοποίηση συμβολοσειράςURL(Σειρά URL) - κωδικοποιεί το URL συμπεριλαμβάνοντας το αναγνωριστικό περιόδου σύνδεσης.
- Ο Boolean περιέχει κεφαλίδα (όνομα συμβολοσειράς) - περιέχει μια κεφαλίδα στο JSP ή όχι.
- Boolean isCommited() – απάντηση έχει δεσμευτεί ή όχι.
- Άκυρο addCookie (cookie cookie) – προσθέτει cookie στην απάντηση
- Άκυρο addDateHeader (Όνομα συμβολοσειράς, τιμή συμβολοσειράς) – προσθέτει όνομα και τιμή ημερομηνίας κεφαλίδας απάντησης
- Άκυρο addHeader (Όνομα συμβολοσειράς, τιμή συμβολοσειράς) – προσθέτει κεφαλίδα απάντησης με όνομα και τιμή
- Άκυρο addIntHeader (Όνομα συμβολοσειράς, τιμή int) – προσθέτει κεφαλίδα απάντησης με όνομα και ακέραια τιμή
- Κενό ξέπλυμαBuffer() - αναγκάζει το περιεχόμενο του buffer στην έξοδο στον πελάτη.
- Κενή επαναφορά () – διαγράφει δεδομένα στο buffer.
- Μηδενισμός κενούBuffer - διαγράφει την προσωρινή μνήμη περιεχομένου στην απόκριση χωρίς διαγραφή κωδικών κατάστασης.
- Άκυρο sendError(int sc,String msg) – στέλνει μια απάντηση σφάλματος στον πελάτη χρησιμοποιώντας τον κωδικό κατάστασης.
- Void sendRedirect (Τοποθεσία συμβολοσειράς) – στέλνει μια προσωρινή απάντηση ανακατεύθυνσης στον πελάτη.
- Κενό σύνολοBufferΜέγεθος (μέγεθος int) – καθορίζει το μέγεθος του buffer του σώματος
- Void setCharacterEncoding (σύνολο χαρακτήρων συμβολοσειράς) – ορίζει την κωδικοποίηση χαρακτήρων
- Void setContentType (τύπος συμβολοσειράς) – ορίζει τον τύπο περιεχομένου της απάντησης
- Κενό setContentLength(int len) – ορίζει το μήκος περιεχομένου της απάντησης
- Void setLocale (Locale lcl) – ορίζει τον τύπο τοπικής ρύθμισης της απόκρισης
- Void setStatus(int sc) – ορίζει τον κωδικό κατάστασης της απάντησης
Παράδειγμα:
Σε αυτό το παράδειγμα, καλύπτουμε διαφορετικές μεθόδους getLocale, flushbuffer, getWriter, getContentType, setIntHeader.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.io.* java.util.*" %> <!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 Action Response</title> </head> <body> <center> <h2>Guru Response</h2> <% Locale lcl = response.getLocale(); out.println("Locale is : " + lcl + "\n"); response.flushBuffer(); PrintWriter output = response.getWriter(); output.println("This is from writer object"); String type = response.getContentType(); out.println("The content type : " + type + "\n"); // Set refresh,autoload time as 5 seconds response.setIntHeader("Refresh", 5); //Get current time Date dt = new Date(); out.println("Today's date is : " +dt.toString() + "\n"); %> </center> </body> </html>
Επεξήγηση του κώδικα:
Code Γραμμή 13: Χρησιμοποιώντας το αντικείμενο απόκρισης, λαμβάνουμε αντικείμενο τοπικής ρύθμισης αυτής της περιόδου λειτουργίας JSP
Code Γραμμή 15: Χρησιμοποιώντας το αντικείμενο απόκρισης, το flushbuffer χρησιμοποιείται για να εξαναγκάσει το περιεχόμενο του buffer στον πελάτη
Code Γραμμή 16: Χρησιμοποιώντας το αντικείμενο απόκρισης, παίρνουμε αντικείμενο εγγραφής που βγαίνει στη ροή εξόδου
Code Γραμμή 18: Χρησιμοποιώντας το αντικείμενο απόκρισης, παίρνουμε τον τύπο περιεχομένου, δηλαδή τον τύπο MIME του αντικειμένου απόκρισης
Code Γραμμή 21: Χρησιμοποιώντας το αντικείμενο απόκρισης, χρησιμοποιείται για αυτόματη φόρτωση κάθε 5 δευτερόλεπτα καθώς το 5 έχει οριστεί ως δεύτερη παράμετρος
Όταν εκτελείτε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο:
Παραγωγή:
- Εδώ παίρνουμε την έξοδο όπως αυτή είναι από το αντικείμενο writer από το getWriter, το οποίο μας δίνει ένα αντικείμενο και μπορούμε να το εξάγουμε στη ροή εξόδου.
- Λαμβάνουμε την τοπική ρύθμιση ως en_us και τον τύπο περιεχομένου ως κείμενο/html
- Λαμβάνουμε σύνολο χαρακτήρων ως ISO 8859
- Η σημερινή ημερομηνία είναι η τρέχουσα ημερομηνία.
Κατάσταση HTTP JSP Codes
- Όταν το αίτημα υποβάλλεται σε επεξεργασία, δημιουργείται η απάντηση. Η γραμμή κατάστασης απόκρισης αποτελείται από την έκδοση HTTP, έναν κωδικό κατάστασης και ένα σχετικό μήνυμα.
- Το μήνυμα σχετίζεται άμεσα με τον κωδικό κατάστασης και την έκδοση HTTP και καθορίζεται από τον διακομιστή.
- Από προεπιλογή, το 200 ορίζεται ως κωδικός κατάστασης στο JSP, επομένως δεν χρειάζεται να ορίσουμε ρητά.
- Μπορούμε να ορίσουμε ως μέθοδο answer.setStatus().
Οι κωδικοί εμπίπτουν στις ακόλουθες 5 κατηγορίες:
- 100-199 - Εδώ ο πελάτης υποδεικνύει ότι πρέπει να ανταποκριθεί με κάποια ενέργεια
- 200-299 - Σημαίνει ότι το αίτημα είναι επιτυχές
- 300-399 – Χρησιμοποιούνται για αρχεία που έχουν μετακινηθεί και συνήθως περιλαμβάνουν μια κεφαλίδα τοποθεσίας που υποδεικνύει τη νέα διεύθυνση
- 400-499 – Υποδεικνύει σφάλμα από τον πελάτη
- 500-599 – Υποδεικνύει σφάλμα από τον διακομιστή
Μερικοί από τους κοινούς κωδικούς κατάστασης είναι παρακάτω:
- 200 – Υποδεικνύει ότι όλα είναι καλά
- 301 – Μετακόμισε οριστικά
- 304 – Δεν έχει τροποποιηθεί από την τελευταία αλλαγή
- 400 - Κακό αίτημα
- 404 δεν βρέθηκε
- 405 – Η μέθοδος δεν βρέθηκε
- 500 Εσωτερικό σφάλμα διακομιστή
- 503 Υπηρεσία Μη Διαθέσιμη
- 505 – Η έκδοση HTTP δεν υποστηρίζεται
Κατάσταση HTTP Code Μέθοδοι σε JSP
Μερικές από τις μεθόδους κωδικού κατάστασης στο JSP παρατίθενται παρακάτω:
- Δημόσιο void setStatus(int statusCode): Ορίζει τον κωδικό κατάστασης όποιον θέλουμε να ορίσουμε σε αυτήν τη Σελίδα JSP. Αυτό θα μας δώσει το μήνυμα του κωδικού κατάστασης που έχει οριστεί
- Δημόσιο void sendRedirect(Συμβολοσειρά URL): Παράγει απόκριση 302 μαζί με την κεφαλίδα τοποθεσίας που δίνει URL του νέου εγγράφου
- Δημόσιο void sendError(int code,String msg): Στέλνει τον κωδικό κατάστασης μαζί με το σύντομο μήνυμα και μορφοποιείται σε έγγραφο HTML.
Παράδειγμα:
Σε αυτό το παράδειγμα, στέλνουμε ρητά σφάλμα στη σελίδα 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>Guru Status Code</title> </head> <body> <% response.sendError(404,"Guru Page Not Found"); %> </body> </html>
Επεξήγηση του κώδικα:
Code Γραμμή 10: Χρησιμοποιώντας το αντικείμενο απόκρισης στέλνουμε το σφάλμα σε μια σελίδα με δύο παραμέτρους.
- Κωδικός κατάστασης – Μπορεί να είναι οποιοδήποτε από τα παραπάνω. Σε αυτή την περίπτωση, έχουμε περιγράψει ως 404
- Μήνυμα – Μπορεί να είναι οποιοδήποτε συγκεκριμένο μήνυμα που θέλουμε να εμφανίσουμε το σφάλμα
Εάν εκτελέσετε τον παραπάνω κώδικα, λαμβάνετε την ακόλουθη έξοδο:
Παραγωγή:
Εδώ λαμβάνουμε τον κωδικό σφάλματος 404, ο οποίος στάλθηκε από τον κώδικα και εμφανίζει επίσης την ένδειξη "Guru Εμφανίζεται το μήνυμα "Η σελίδα δεν βρέθηκε" στην έξοδο.




