Ιωάννης Πρίγγουρης (iprigg@di.uoa.gr) Java Server Pages Ιωάννης Πρίγγουρης (iprigg@di.uoa.gr)

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
ΕΙΣΑΓΩΓΗ ΣΤΗΝ PHP. Τι θα μάθουμε;  Να καταλάβουμε τι είναι η PHP και πώς δουλεύουν τα PHP scripts  Τι χρειάζεται για να ξεκινήσουμε με την PHP  Να.
Advertisements

Τεχνικές Προγραμματισμού με την JavaScript Στυλιάδης Κων/νος Φλώρινα, Οκτώβριος 2004.
5η Συνάντηση Εκπαιδευτικών Πληροφορικής στη Δυτική Μακεδονία Πτολεμαΐδα, 29 Σεπτ 2005 Δημιουργία Δυναμικών Ιστοσελίδων με PHP και Dreamweaver MX Στυλιάδης.
Ένα απλό πρόγραμμα σε C /* ********************************************* * This program prints out the sentence “This is a test.” * *********************************************
Copyright ©: SAMSUNG & Samsung Hope for Youth. Με επιφύλαξη κάθε νόμιμου δικαιώματος Εκπαιδευτικό υλικό Λογισμικό: Δημιουργία εφαρμογών Επίπεδο.
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 1ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 5 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Κεφάλαιο 6 Threads. 2 Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Μήτρες (templates)  Μία μήτρα είναι ένα κομμάτι κώδικα που περιέχει παραμέτρους οι οποίες δέχονται ως τιμές τύπους δεδομένων.  Είναι ένας μηχανισμός.
AJAX Asynchronous JavaScript and XML Θ. Βαρβαρίγου Καθηγ. ΕΜΠ Τηλ
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις.
Microsoft ASP.NET Browser Web 2.0 CSS JavaScript Server Client Clients Κατσιώτης Ιωάννης Οικονομικό Πανεπιστήμιο Αθηνών
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
ΕΣΔ 232: Οργάνωση δεδομένων στην Κοινωνία της Πληροφορίας © 2013 Nicolas Tsapatsoulis Φόρμες Δημιουργία Περιεχομένου Ι.
ΣΥΝΑΡΤΗΣΕΙΣ.
Για τη διδασκαλία των πολυμέσων 1/15 ΛΟΓΙΣΜΙΚΟ ΑΝΑΠΤΥΞΗΣ ΕΦΑΡΜΟΓΩΝ ΠΟΛΥΜΕΣΩΝ Ομάδα Ανάπτυξης Ομάδα Ανάπτυξης: Φίλιππος Δεληγιάννης, Παναγιώτης Κωστάκης,
Εισαγωγή στον Προγραμματισμό, Αντώνιος Συμβώνης, ΣΕΜΦΕ, ΕΜΠ, Slide 1 Εβδομάδα 11: Εκτέλεση Java χωρίς το BlueJ.
PHP/MYSQL ΠΑΡΟΥΣΙΑΣΗ ΣΤΑ ΠΛΑΙΣΙΑ ΤΟΥ ΜΑΘΗΜΑΤΟΣ ΕΠΟΙΚΟΙΝΩΝΙΑ ΑΝΘΡΩΠΟΥ-ΜΗΧΑΝΗΣ ΤΥΡΟΛΟΓΟΥ ΓΛΥΚΕΡΙΑ ΑΜ 875 ΡΙΖΟΥ ΔΕΣΠΟΙΝΑ ΑΜ 816.
Google's Google App Engine and Google's Datastore API Andreas Manoli.
1 Εισαγωγή στη Java Χρήσιμες Διευθύνσεις Χαρακτηριστικά της Java Εργαλεία της Java Εργαλεία της Java Μεταγλώττιση στοιχειωδών εφαρμογών.
Επικοινωνία Ανθρώπου Μηχανής HTML CGI JAVASCRIPT Κουμπούλης Χρήστος Α.Μ. 921 Χαλαβαζής Βασίλης Α.Μ. 988.
JSPs - Servlets Θ. Βαρβαρίγου Καθηγήτρια ΕΜΠ Τηλ /4/2010Δικτυακός.
Applets Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη δυνατότητα προβολής γραφικών και τη δυνατότητα υλοποίησης ενός γραφικού.
Κουλίνας Μιχαήλ Α.Μ.:774 Μπουρνάζης Χρήστος Α.Μ.:792 Ρογκάκος Γεώργιος Α.Μ.:817.
ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ.
University of Crete HY566-Semantic Web CS566 – Semantic Web Computer Science Department - UoC Heraklion 1 April, 2003 Παπαγγελής Μάνος, Κοφφινά Ιωάννα,
Τμήμα Πληροφορικής και Τηλεπικοινωνιών
Tomcat Θ. Βαρβαρίγου Καθηγήτρια ΕΜΠ Τηλ
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Συναρτήσεις.
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
Threads Στον παραδοσιακό προγραμματισμό όταν ένα πρόγραμμα εκτελείται ονομάζεται process (διεργασία) και οι εντολές του εκτελούνται σειριακά η μία μετά.
Applets Εκτελούνται από τον appletviewer και από Java enabled web browsers Εκμεταλλεύονται τo γραφικό υπόβαθρο που παρέχουν οι browsers, έχοντας έτσι τη.
Επιστημονικός Υπολογισμός Ι Πρώτο Εργαστήριο Εισαγωγή στο matlab 15 Οκτωβρίου 2010 Γιώργος Δρακόπουλος ΤΜΗΥΠ.
ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language.
HTML-PHP Καμπέρης Άρης Α.Μ. 763 Zaher Owda Α.Μ. 849.
Βασικά στοιχεία της Java
Εφαρμογές Πολυμέσων: Εισαγωγή στην HTML (1)
Μπόλαρη Αγγελικη(1451) Επιβλέπων Βολογιαννίδης Σταύρος ΑΤΕΙ ΣΕΡΡΩΝ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΕΠΙΚΟΙΝΩΝΙΩΝ Σέρρες 2013.
Γλώσσες Προγραμματισμού Μεταγλωττιστές Πίνακας Συμβόλων Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου.
ΔΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙΔΩΝ Ένας Συνοπτικός Οδηγός Καμήλαλη Δέσποινα Μαθηματικός, MSc Πληροφορικής, Υποψήφια Διδάκτωρ Χαροκοπείου Πανεπιστημίου Αθηνών.
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Εισαγωγή στον Προγ/μό Η/Υ
Windows Programming Web Forms.
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
Εργαστηριακό σεμινάριο Χειμερινό εξάμηνο
Δεδομένα, μεταβλητές, υπολογισμοί
Κατανεμημένα Συστήματα
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΣΕΡΡΩΝ
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
Κλάσεις και αντικείμενα
Ιωάννης Πρίγγουρης Εργαστήριο Διάχυτου Υπολογισμού Παν. Αθηνών
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
Εισαγωγή στον Προγ/μό Υπολογιστών
Εισαγωγή στη Java Χαρακτηριστικά της Java Εργαλεία της Java
Κεφάλαιο 10 Streams.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
2ο ΓΥΜΝΑΣΙΟ ΣΗΤΕΙΑΣ - ΤΑΞΗ Γ'
Εισαγωγή στον Προγραμματισμό με Python, ΑΠΘ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ Εισαγωγή στον Προγραμματισμό με Python Εβδομάδα 1: Βασικά στοιχεία.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ Η/Υ
Γλώσσα Προγραμματισμού V PHP
Συγγραφέας: Ζαγκότας Στεφανος Επιβλέπων Καθηγητής: Ούτσιος Ευάγγελος
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Εισαγωγή στη Java (Μέρος Α’)
Μεταγράφημα παρουσίασης:

Ιωάννης Πρίγγουρης (iprigg@di.uoa.gr) Java Server Pages Ιωάννης Πρίγγουρης (iprigg@di.uoa.gr)

Servlets Η πρώτη απόπειρα υποστήριξης CGI programming από τη Java Χρησιμοποιούνται για τη δημιουργία web σελίδων και εφαρμογών γενικότερα Εμφανίστηκαν για πρώτη φορά το 1997 Τελευταία τρέχουσα έκδοση του προτύπου είναι η 2.5 Είναι ένα JAVA API το οποίο περιλαμβάνει ένα σύνολο κλάσεων για τη δημιουργία web εφαρμογών Τμήμα της προδιαγραφής J2EE

Servlets – Πλεονεκτήματα σε σχέση με το παραδοσιακό CGI scripting Απόδοση Πολύ καλύτερη διαχείριση της μνήμης μέσω του JVM Κάθε request γεννάει 1 καινούργιο Νήμα (Thread) και όχι process Ευκολία Δεν χρειάζεται η γνώση άλλης γλώσσας εκτός από JAVA To API που παρέχεται προσφέρει έτοιμες κλάσεις για ένα πλήθος λειτουργιών (π.χ., ανάγνωση δεδομένων από φόρμες κοκ.) Δυναμική Όλη η δυναμική της JAVA ενσωματώνεται στην web εφαρμογή Φορητότητα Όπως και η JAVA ένα servlet τρέχει σε οποιαδήποτε λειτουργικό σύστημα και υπολογιστή Χαμηλό κόστος Πληθώρα web servers παρέχονται δωρεάν, όπως άλλωστε και η JAVA

Servlets – A Hello World Example (1/2) package test; import java.io.PrintWriter; import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.ServletException; public class HelloServlet extends HttpServlet { public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter pw = res.getWriter(); pw.println("<html><head><title>HelloWorld</title></head>"); pw.println("<body>"); pw.println("<center><h2> "); pw.println("Hello World!!"); pw.println("</h2></center> "); pw.println("</body></html>"); pw.close(); }

Servlets – A Hello World Example (2/2) Configuration is needed as shown below: <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>test.HelloServlet</servlet-class> </servlet> <servlet-mapping> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>

Servlets – Μειονεκτήματα Πρέπει να τα μεταγλωττίσει (compile) και να τα εγκαταστήσει στον server o προγραμματιστής Δεν απεικονίζονται απευθείας σε http URLs Π.χ., ένα servlet με όνομα HelloWorld.java δεν καλείται κατ’ ανάγκη ως http://localhost:8080/HelloWorld.java O κώδικας της HTML (για τη εμφάνιση δεδομένων στην οθόνη) ενσωματώνεται στον κώδικα της JAVA Εάν το servlet πρέπει να τυπώσει αρκετά στοιχεία στην οθόνη η χρήση HTML μέσα σε διαδοχικά out.println(…) καταντάει κουραστική. Δεν είναι δυναμικά. Κάθε αλλαγή στον κώδικα του Servlet, απαιτεί εκ νέου μεταγλώττιση και εγκατάσταση στον Server.

JSP - Γενικά Στοιχεία Η τεχνολογία JSP παρέχει ένα εύκολο και γρήγορο τρόπο για τη δημιουργία εφαρμογών web Ανεξαρτησία από λειτουργικό σύστημα και web server Τελευταία τρέχουσα έκδοση του προτύπου είναι η 2.1 Τμήμα της προδιαγραφής J2EE Η λειτουργικότητα που παρέχεται είναι ακριβώς η ίδια με ένα servlet

JSP - Hello World! <html> <head> <title>JSP Hello World!</title> </head> <body> <%=”Hello from JSP!”%> </body> </html>

JSP – Πλεονεκτήματα Ενσωμάτωση κώδικα JAVA σε κώδικα HTML Απεικονίζονται απευθείας σε http URLs Τα μεταγλωττίζει και τα εγκαθιστά απευθείας ο server Είναι δυναμικά Αλλαγές στον κώδικα του JSP αρχείου γίνονται άμεσα ορατές στον server

Απαιτήσεις Συστήματος Περιβάλλον εκτέλεσης: Πρόσφατη έκδοση του J2SE (JDK/JRE) Servlet Engine (web server) που να υλοποιεί τουλάχιστον την προδιαγραφή JSP έκδοσης 1.2 Περιβάλλον ανάπτυξης: Απλός κειμενογράφος Προαιρετικά ολοκληρωμένο περιβάλλον ανάπτυξης

Εργαλεία Συστήματος Εγκατάσταση του JDK/JRE Web server: Apache Tomcat Εκδοση 1.3.1+ Web server: Apache Tomcat Εκδοση 5.0+ Κειμενογράφος Textpad v4.6

Κύκλος Λειτουργίας Αίτηση Απάντηση Εχει γίνει πρόσφατη μετατροπή; Οχι Μετατροπή jsp σε κώδικα Java (servlet) Αίτηση Ναι Απάντηση Εκτέλεση κώδικα

Φιλοσοφία Ανάπτυξης JSP Ανάπτυξη σελίδας ως απλό HTML Διαδοχική προσθήκη δυναμικών κομματιών (γραμμένων σε JAVA) Κατασκευή βιβλιοθηκών

Βασικά Στοιχεία Υπάρχουν δύο διαφορετικές φάσεις επεξεργασίας μιας σελίδας Φάση 1: Μετατροπή της σελίδας JSP σε κώδικα Κατά τη φάση αυτή γίνεται επεξεργασία συγκεκριμένων ορισμάτων, που αρχίζουν από <%@ Φάση 2: Εκτέλεση του κώδικα Κατά τη φάση αυτή γίνεται επεξεργασία των υπολοίπων ορισμάτων, που αρχίζουν από <%

Βασικά Στοιχεία (2) Σύμβολα εισαγωγής εντολών: <% και %> Σχόλια: <%-- Σχόλιο JSP--%> <!-- Σχόλιο HTML --> Εισαγωγή αρχείου (Server-side include): <%@include file=”sample.jsp”%> Υπολογισμός παραστάσεων: <%=1+1%> <%=”Πρόσθεση “+”αλφαριθμητικού”%>

Ασκηση Κατασκευή σελίδας JSP που να εμφανίζει το εξής κείμενο: 3*5 = 15 Ο αριθμός 15 θα πρέπει να υπολογίζεται δυναμικά

Βασικά Αντικείμενα Η κατάσταση του συστήματος μπορεί να βρεθεί από τα αντικείμενα: request session application

Αντικείμενο request Περιέχει όλες τις πληροφορίες που έρχονται από την αίτηση του πελάτη Χρήσιμες μέθοδοι: getHeader(String header) getQueryString() getParameter(String name) getParameterValues(String name) getServerName() getRemoteHost() isSecure()

Παράδειγμα Εμφάνιση παραμέτρων που δώθηκαν από το χρήστη: page1.jsp: <html> <body> <form name=”frm” method=”POST” action=”page2.jsp”> Ονομα χρήστη: <input type=”text” name=”username”><br> <input type=”submit”> </form> </body> </html> page2.jsp: <html> <body> Ονομα χρήστη: <%=request.getParameter(“username”)%> </body> </html>

Ασκηση Βασικό calculator, με το χρήστη να δίνει δύο αριθμούς και να εμφανίζεται το άθροισμά τους

Παράδειγμα Εμφάνιση του browser που χρησιμοποιεί ο χρήστης: whichbrowser.jsp: <html> <body> Αναγνωριστικό browser: <%=request.getHeader(“User-Agent”)%> </body> </html>

Αντικείμενο session Περιέχει όλες τις πληροφορίες που αφορούν τη συγκεκριμένη συνεδρία Μια συνεδρία καθορίζεται είτε με τη χρήση cookies είτε με διαμόρφωση URL Χρήσιμες μέθοδοι: getAttribute(String name) setAttribute(String name, Object value) removeAttribute(String name)

Παράδειγμα Εμφάνιση του ονόματος του χρήστη για τη συνεδρία: page2.jsp: <% session.setAttribute(“uname”,request.getParameter(“username”));%> <html> <head> <script> window.location.replace('page3.jsp'); </script> </head> </html> page1.jsp: <html> <body> <form name=”frm” method=”POST” action=”page2.jsp”> Ονομα χρήστη: <input type=”text” name=”username”><br> <input type=”submit”> </form> </body> </html> page3.jsp: <html> <body> Ονομα χρήστη: <%=session.getAttribute(“uname”)%> </body> </html>

Πολυγλωσσική Υποστήριξη Για σωστή υποστήριξη εμφάνισης Ελληνικών, είναι πιθανό να απαιτείται η εξής οδηγία στην αρχή του αρχείου: <%@page pageEncoding="..."%> Μερικές πιθανές τιμές: <%@page pageEncoding="UTF-8"%> <%@page pageEncoding="ISO-8859-7"%> <%@page pageEncoding="windows-1253"%> Κλασσικές τιμές για αγγλικά (default): <%@page pageEncoding="ISO-8859-1"%> %@page pageEncoding="windows-1252"% Για υποστήριξη ανάγνωσης Ελληνικών που εισάγονται από φόρμες απαιτείται η κλήση της μεθόδου: request.setCharacterEncoding(“…”);

Αντικείμενο application Περιέχει πληροφορίες που μοιράζονται όλοι οι χρήστες του συστήματος Παρόμοια λειτουργία με το αντικείμενο session Χρήσιμες μέθοδοι: getAttribute(String name) setAttribute(String name, Object value) removeAttribute(String name)

Βασικά Στοιχεία Java Εκφράσεις – παραστάσεις Αυτόματες μετατροπές 2 ((8/(2*4))+3)-(8/4) 7/2 7.0/2.0 “Ενα αλφαριθμητικό” “Ενα”+” “+”αλφαριθμητικό” Αυτόματες μετατροπές 7.0/2 “1+1=”+2

Βασικά Στοιχεία Java (2) Μεταβλητές int x = 5; int y = 8; x = x+5-y; String st = “hello!”; Μερικοί τύποι δεδομένων: short int long double boolean String

Βασικά Στοιχεία Java (3) Τελεστές σύγκρισης: x>5 x==5 (x>=5)&&(x<=8) String st = “hello!”; x!=5 st.equals(“hello!”); Βασικές μετατροπές τύπων Integer.toString(int x) Integer.parseInt(String xs) Double.toString(double y) Double.parseDouble(String ys)

Βασικά Στοιχεία Java (4) Εντολή if: if (x!=5) { x = x+2; } else { x = x-2; }

Βασικά Στοιχεία Java (5) Εντολή while: int x = 1; int a = 0; while (x<=5) { a = a+x; x = x+1; } Εντολή for: for (int x=1; x<=5; x++) {

Βασικά Στοιχεία Java (6) Ιδιαίτερες σταθερές: null true false Αντιστοιχία βασικών τύπων & κλάσεων: int <-> Integer long <-> Long boolean <-> Boolean double <-> Double Οπου ζητείται μια παράμετρος τύπου Object, δεν μπορούμε να χρησιμοποιήσουμε τους βασικούς τύπους αλλά μόνο τις αντίστοιχες τους κλάσεις

Παράδειγμα Κατασκευή μίας σελίδας που θα εμφανίζει ένα μετρητή για το πόσες φορές έχει εμφανιστεί η συγκεκριμένη σελίδα <%@page pageEncoding=“ISO-8859-7”%> <% String count = (String)application.getAttribute("counter"); if (count==null) { count = "0"; } int c = Integer.parseInt(count); c++; application.setAttribute("counter",Integer.toString(c)); %> <html> <body> Μετρητής: <%=c%> </body> </html>

Ασκηση Κατασκευή μίας σελίδας που θα εμφανίζει ένα μετρητή για το πόσες φορές έχει εμφανιστεί η συγκεκριμένη σελίδα από ΔΙΑΦΟΡΕΤΙΚΟΥΣ χρήστες Χρησιμοποιείστε το αντικείμενο request για να διακρίνετε τους χρήστες