Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: Τεχνολογία Servlet

Σχετικά έγγραφα
Διαδικτυακές Εφαρμογές Ενότητα 5: Servlets και JSPs

Κατανεµηµένα Συστήµατα ΙΙ Μάθηµα Ελεύθερης Επιλογής, Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

Java Servlets: Principles and Programming 1/19

Περιγραφή της εργασίας

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 8 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: Τεχνολογία Java Server Pages (JSP)

Εισαγωγή στις Σελίδες Εξυπηρετητή Java Java Server Pages (JSP)

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Προγραμματισμός ΙΙ (Java) 6. Διαχείριση δεδομένων

Βασικές Έννοιες Web Εφαρμογών

Η Βίβλος σχετικά με το JDBC. Περιέχει τρία βασικά tutorials στα οποία θα βασιστεί το μάθημα και περιγράφει όλες τις τάξεις και τις μεθόδους που

MySQL + Γλώσσα Προγραμματισμού. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΜΑΘΗΜΑ: Διαδικτυακές Εφαρμογές

Τα βασικά για Servlet

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

Πτυχιακή εργασία. Ανάπτυξη παιχνιδιού πολλών παικτών

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Cloud Computing Database with Amazon SimpleDB

Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες

Διαδίκτυο και Εφαρμογές 2η Άσκηση Μετασχηματισμοί XML και XSL. Γιαννέλος Γιάννης ΑΜ: Μαρινέλλης Γιώργος ΑΜ:

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 12η Διάλεξη: Επανάληψη / Ανακεφαλαίωση

Πληροφορίες για το μάθημα

Τεχνικός Εφαρμογών Πληροφορικής

Κεφάλαιο 1. Βασικά Στοιχεία της Java... 13

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Τεχνολογίες Διαδικτύου. Server Side Scripting I PHP

Περιεχόμενα ΕΥΧΑΡΙΣΤΙΕΣ ΕΙΣΑΓΩΓΗ Σχετικά με τους συγγραφείς...24

NetBeans και σχετικά προγράμματα. Κακαρόντζας Γεώργιος Κέντρο Αριστείας Ανοιχτού Λογισμικού ΑΠΘ 1ο Θερινό Σχολείο Κώδικα

Σύστημα για on-line δημοπρασίες & πωλήσεις

Τεχνολογίες Ανάπτυξης Ηλεκτρονικού Καταστήματος Μικρομεσαίας Επιχείρησης. Μικρομεσαίες Επιχειρήσεις και Καινοτομία

Αντικειμενοστρεφής Προγραμματισμός

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 10η Διάλεξη: Web Services

Διαδικτυακές Εφαρμογές Ενότητα 7: Προσπέλαση ΒΔ με το JDBC

Σύστημα διαχείρισης περιεχομένου (Content Management System)

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

CORBA. Αρχιτεκτονική και 3-tier 3. εφαρµογές. Β. Φλώρος. Μαρτάκος. Τµήµα Πληροφορικής και Τηλεπικοινωνιών Εθνικό και Καποδιστιακό Πανεπιστήµιο Αθηνών

Τι είναι η Spring. Η Spring είναι ένα ελεύθερο (open source) περιβάλλον εργασίας για εφαρμογές Java. Μπορεί να περιγραφεί ως:

8ο Πανελλήνιο Συμποσιο Ωκεανογραφίας & Αλιείας 637

Εισαγωγή στην Ανάπτυξη Εφαρμογών Web με Χρήση της Python, του Apache και του mod_python

Social Network : Programming on FACEBOOK

ΚΑΤΑΝΕΜΗΜΕΝΟ ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΣΥΣΚΕΥΩΝ ΑΣΗΜΑΚΟΠΟΥΛΟΣ ΣΩΤΗΡΗΣ ΑΜ : 3021

ΠΕΡΙΕΧΟΜΕΝΑ. Πρόλογος Κεφάλαιο 1 ο Αρχές Διαχείρισης πληροφορίας στον Παγκόσμιο Ιστό... 15

Παράρτημα A: PHP, HTML φόρμες και το πρωτόκολλο HTTP.

Εφαρµογές διαδικτύου µε PHP

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΕΡΓΑΛΕΙΑ ΓΙΑ ΤΟ ΔΙΑΔΙΚΤΥΟ

Java Servlets. Εισαγωγή. Σταύρος Πολυβίου

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΔΙΟΙΚΗΤΙΚΗΣ ΕΠΙΣΤΗΜΗΣ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ. Τεχνολογίες και Εφαρμογές Διαδικτύου

Αντικειµενοστρεφής Προγραµµατισµός

Σταύρος Καουκάκης Ευτύχιος Βαβουράκης

ΑΝΑΠΤΥΞΗ WEB ΕΦΑΡΜΟΓΩΝ ΜΕ JAVA SERVLETS

Φορολογική Βιβλιοθήκη. Θανάσης Φώτης Προγραμματιστής Εφαρμογών

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

ιαδικτυακές Εφαρµογές

Εισαγωγή στη J2EE. Μέρος 2

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Remote Method Invocation (RMI)

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

HelloApplet. Παύλος Εφραιμίδης Java Applets 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Διάλεξη #1 η : Εισαγωγή: Λογισμικό, Γλώσσες Προγραμματισμού, Java

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

Cloud Computing with Google and Microsoft. Despoina Trikomitou Andreas Diavastos Class: EPL425

Εκπαιδευτικό Υλικό για την. «Βάση σχολικών μονάδων ΠΣΔ»

11β Δομικά πρότυπα σχεδίασης

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Αντικειμενοστρεφής Προγραμματισμός

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Προβλήµατα CGI, SSI CGI: Απόδοση Έναρξη νέας διαδικασίας για εκτέλεση (2 διαδικασιών σε περίπτωση διερµηνευόµενης γλώσσας, π.χ. perl). Κοινές διαδικασ

JAVA TUTORIAL ΠΕΡΙΕΧΟΜΕΝΑ. ΚΕΦΑΛΑΙΟ 1. Τί κάνει τη Java να ξεχωρίζει; Εγκαθιστώντας τη Java

Java & Java EE 1o Μέρος: Servlets και Java Server Pages. Κακαρόντζας Γεώργιος

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΜΕ ΧΡΗΣΗ PHP

Διαδικτυακές Εφαρμογές. Ενότητα 2: Enterprise Java Beans και Java Server Faces Μιχάλας Άγγελος Βούρκας Δημήτριος Τμήμα Μηχανικών Πληροφορικής ΤΕ

Αξιολόγηση Υπηρεσιών ιαδικτύου µέσω Περιπτώσεων Μελέτης

Java & Java EE 2o Μέρος: Διασφάλιση ευκολίας τροποποίησης με το πρότυπο MVC (Model View Controller) Κακαρόντζας Γεώργιος

Lecture 3: Introduction III

ΕΠΛ 233: Αντικειμενοστρεφής Προγραμματισμός (Object-oriented programming)

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

Προγραμματισμός και Συστήματα στον Παγκόσμιο Ιστό Ενότητα 3: Server Side Scripting II PHP & MySQL

Ανάπτυξη διαδικτυακών εφαρμογών με την Python Το εργαλείο Flask

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

Τεχνολογία Λογισμικού Τύπος Α

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions)

ιαδικτυακές Εφαρµογές Πραγµατικού Χρόνου µε Java

Injection Attacks. Protocol Host FilePath. field1=valuex&field2=valuey. Query String. Web server HTTP GET.

Διδάσκων: Παναγιώτης Ανδρέου

Αρχιτεκτονική πελάτη-εξυπηρέτη Οι διεργασίες που εκτελούνται στο δίκτυο είναι είτε πελάτες (clients) είτε εξυπηρέτες (servers). Εξυπηρέτης: παθητικός,

Δυναμικές Ιστοσελίδες Προγραμματισμός στην πλευρά του client

Γενικά (για τις γραπτές εξετάσεις)

Εισαγωγή στις Βάσεις Δεδομζνων II

2η Προγραµµατιστική Εργασία

, Evaluation of a library against injection attacks

ΑΠΟΘΕΤΗΡΙΟ ΕΦΑΡΜΟΓΩΝ ΥΠΠΕΘ ΚΑΙ ΕΠΟΠΤΕΥΟΜΕΝΩΝ ΦΟΡΕΩΝ (git.minedu.gov.gr)

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΜΕ ΘΕΜΑ: ΥΛΟΠΟΙΗΣΗ ΔΙΑΔΙΚΤΥΑΚΟΥ ΗΛΕΚΤΡΟΝΙΚΟΥ SUPER MARKET (e-shop), ΜΕ ΧΡΗΣΗ ΤΩΝ ΤΕΧΝΟΛΟΓΙΩΝ JAVA (JSP, servlets, JDBC) & MYSQL

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Ανάπτυξη Υπηρεσίας Τηλεκπαίδευσης σε ΙP Δίκτυα. Υλοποίηση Σύγχρονης Τηλεκπαίδευσης

Σύγχρονα εργαλεία και τεχνολογίες ανάπτυξης I.S. Το Microsoft.NET

Transcript:

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Προγραμματισμός στην πλευρά του εξυπηρετητή: Τεχνολογία Servlet Δρ. Απόστολος Γκάμας Λέκτορας (407/80) gkamas@uop.gr Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 1

Προγραμματισμός στην πλευρά του εξυπηρετητή (server side) Πελάτης Web Browser Τελική HTML σελίδα Διαδίκτυο Τελική HTML σελίδα Επικοινωνία HTTP Εξυπηρετητής Web Server Επεξεργασία php κώδικα και παραγωγή HTML σελίδας Επεξεργασία Δεδοì ένων Βάση Δεδομένων Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 2 Χρήστης

Προγραμματισμός στην πλευρά του εξυπηρετητή (server side) Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 3

Server Side: Καταλληλότητα, Πλεονεκτήματα, Μειονεκτήματα Καταλληλότητα: Δυναμική / Παραμετρική εμφάνιση περιεχομένου Απαραίτητο όταν απαιτείται επικοινωνία (αλληλεπίδραση) µε τον Server Δυνατότητα ελέγχου των πελατών, π.χ. μετρητές επισκέψεων (hit counters), ελεγχόμενη πρόσβαση σε κάποιες σελίδες Πλεονεκτήματα: Η επεξεργασία μεταφέρεται στο server, χρησιμοποιείται η ισχύς του server O κώδικας είναι κρυφός Η εκτέλεση του κώδικα είναι ανεξάρτητη του browser: στέλνεται «καθαρό» HTML που εμφανίζεται πανομοιότυπο σε κάθε browser Η μοναδική λύση για πρόσβαση στο file system του server Μειονεκτήματα: Χρησιμοποιεί πολύτιμη επεξεργαστική ισχύ του server. Κλιμάκωση (scalability); Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 4

Server Side: Τεχνολογίες Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 5

Τι είναι Servlet (SERVer applet) Τα Servlets είναι μικρά προγράμματα γραμμένα στη γλώσσα Java που λειτουργούν στον server και επεκτείνουν τις λειτουργίες ενός Web Server. Όπως και οι άλλες αντίστοιχες τεχνολογίες (CGIs, ASP, PHP,..), χρησιμοποιείται για την δημιουργία Web σελίδων που το περιεχόμενό τους δεν είναι στατικό αλλά μπορεί να εξαρτάται από τα δεδομένα που εισαγάγει ο χρήστη και χρειάζεται να ανακτηθεί από βάσεις δεδομένων ή από άλλα συστήματα Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 6

Τι είναι Servlet (SERVer applet) Εκτελούνται σε ένα Web Server (Servlets: server-side πρόσωπο της Java Applets: client-side πρόσωπο της Java, δηλ. εκτελούνται σε Web Browsers) Τα Servlets είναι εγκατεστημένα σε Web Server, δέχονται δεδομένα µέσω του πρωτοκόλλου HTTP και απαντούν στέλνοντας στον Web Browser αρχεία τύπου HTML. Για να προγραμματίσουµε Servlets είναι απαραίτητο το JSDK (Java Servlet Development Kit) ή Servlets API (Application Programming Interface) που είναι ενσωματωμένο σε αρκετά εργαλεία προγρ/μού Java (π.χ. NetBeans) Το Servlets API αποτελεί πλέον μέρος του JDK Τα Servlets υποστηρίζονται από (μπορούν να τρέξουν σε) σε πολλους web servers Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 7

Οι Java Servlets σε µια 3-tier αρχιτεκτονική Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 8

Η δύναμη των Servlet Είναι γραμμένα σε γλώσσα Java κατά συνέπεια είναι platform independent: Write once Serve Everywhere Εκμεταλλεύονται πλήρως το Java API, RMI, CORBA, Database Connectivity. Αποδοτικότητα & Αντοχή - Μένουν στην μνήμη μεταξύ διαδοχικών καλεσμάτων Κομψότητα (Εlegance), Object-Oriented, Clean Code, Modular, Simple Λειτουργούν µε το πρωτόκολλο ΗΤΤP Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 9

PHP vs. Servlets Τα servlets και τα PHP scripts αποτελούν εναλλακτικές για server-side προγραμματισμό. Τα servlets «φορτώνονται» µία φορά και όχι κάθε φορά που καλούνται, αντίθετα µε τα PHP scripts Τα servlets είναι τεχνολογία που βασίζεται σε μια πλήρη αντικειμενοστραφή γλώσσα (Java), η PHP είναι γλώσσα σεναρίου (script) Υπάρχει διαφορά στη λογική: η PHP μοιάζει περισσότερο µε την τεχνολογία JSP, ο PHP κώδικας είναι ενσωματωµένος σε HTML κώδικα, το στατικό HTML διακρίνεται από το HTML που παράγει δυναμικά η PHP. Οι servlets αποτελούν κλάσεις Java που όταν εκτελούνται παράγουν HTML κώδικα (στατικό & δυναµικό) Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 10

PHP vs. Servlets Οι κλήσεις σε «έτοιμες» (built-in) συναρτήσεις της PHP (που περιλαμβάνονται στις βιβλιοθήκες της PHP) είναι συνήθως γρηγορότερες από κλήσεις σε συναρτήσεις των Servlets. Το αντίστροφο όμως ισχύει για τον επιπλέον κώδικα που γράφει ο προγραμματιστής PHP. H PHP προσφέρεται για γρήγορη ανάπτυξη κώδικα λόγω απλής σύνταξης Τα servlets προσφέρονται για μεγαλύτερης κλίμακας έργα λόγω της εκμετάλλευσης των πλούσιων βιβλιοθηκών αλλά και της αντικειμενοστραφούς (object-oriented) φύσης της Java. Με τους servlets είναι εύκολη η μετάβαση από µια Β σε άλλη (µε αλλαγή λίγων γραμμών κώδικα) Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 11

Ο κύκλος ζωής του Servlet Κάθε servlet έχει τον ίδιο κύκλο ζωής: Ο server το κάνει load και το αρχικοποιεί: «τρέχει» η μέθοδος init() Το servlet δέχεται μηδέν ή και περισσότερα client requests: «τρέχουν» οι μέθοδοι service() ή doget()/dopost() Ο server το κάνει remove (ορισμένοι servers εκτελούν αυτό το βήµα µόνο όταν κάνουν shut down): «τρέχει» η μέθοδος destroy() Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 12

Ο κύκλος ζωής του Servlet Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 13

Αλληλοεπίδραση του servlet µε τον πελάτη Όταν ένα servlet δέχεται ένα κάλεσμα από τον πελάτη (client), λαμβάνει δύο αντικείμενα (objects): Ένα ServletRequest, που εξασφαλίζει την επικοινωνία από τον πελάτη προς τον server. Ένα ServletResponse, που εξασφαλίζει την επικοινωνία από το servlet πίσω στον πελάτη. (Τα ServletRequest και ServletResponse είναι interfaces ορισµένα στο javax.servlet package) Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 14

Αλληλοεπίδραση του servlet µε τον πελάτη Βασικές μέθοδοι: init (καλείται από τον servlet container στην αρχικοποίηση του servlet) doget (καλείται µε HTTP Get request) dopost (καλείται µε HTTP Post request) doput (καλείται µε HTTP Put request) service (καλείται από τον servlet container σε κάθε HTTP request) destroy (καλείται από τον servlet container όταν ο servlet πρόκειται να σβηστεί από τη µνήµη) Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 15

To Servlet API Όλα τα servlets υλοποιούν τη διασύνδεση (interface) Servlet µέσω μιας εκ των δύο βασικών κλάσεων: GenericServlet (javax.servlet package) - γενικά servlets ανεξάρτητα πρωτοκόλλου HttpServlet (javax.servlet.http package) - http servlets Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 16

To Servlet API Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 17

Ένα απλό servlet package mypackage; import javax.servlet.*; import javax.servlet.http.*; import java.io.printwriter; import java.io.ioexception; public class Servlet1 extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=windows-1253"; public void init(servletconfig config) throws ServletException { super.init(config); } Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 18

Ένα απλό servlet } public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { } response.setcontenttype(content_type); PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<head><title>servlet1</title></head>"); out.println("<body>"); out.println("<p>the servlet has received a GET. This is the reply.</p>"); out.println("</body></html>"); out.close(); Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 19

Προϋποθέσεις για να «τρέξουμε» ένα servlet Κάνουμε compilation του java file: SimpleServlet.java -> SimpleServlet.class (πρέπει να είναι εγκατεστημένο το Java Servlet API που περιέχει τις κλάσεις javax.servlet και javax.servlet.http) Απαιτείται ένας Application Server (ή Servlet Engine ή Servlet Container), π.χ. οι Oracle OC4J, Tomcat, JavaServer,... Μπορούμε να «τρέξουμε» το servlet απ ευθείας από κάποιο περιβάλλον προγραμματισμού σε Java (π.χ. ο NetBeans έχει ενσωματώσει το Servlet API και τον Application Server Tomcat) Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 20

Πως «τρέχουμε» ένα servlet Αν ο servlet ανήκει σε μια εφαρμογή που ονομάσαµε ServletApp και αποθηκεύσαμε το class αρχείου του servlet (αυτό που προκύπτει από το compilation) σε ένα directory, π.χ. το: \Project\classes\ServletPackage\ Κλήση του servlet: http://localhost:8084/servletapp/testservlet Γενικά: http://<servername>:8084/<projectname>/<servletna me> Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 21

Εισαγωγή στο NetBeans Ένα IDE ανεπτυγμένο από την Sun Χρησιμότητα των IDEs (Integrated Development Environment): Ολοκληρωμένα περιβάλλοντα για ανάπτυξη εφαρμογών Εύκολη και γρήγορη συγγραφή κώδικα Ενσωματωμένος compiler Ta IDEs για Java ενσωματώνουν και interpreter, applet viewer Εύκολος εντοπισμός και διόρθωση λαθών Ενσωματωμένος debugger Ενσωματωμένο documentation, help Άλλα IDEs για ανάπτυξη εφαρμογών Java (και Servlets): JBuilder (Borland), Java Sun One (Sun), Visual Cafe (Symantec), VisualAge for Java (IBM) Η έννοια του project Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 22

Περνώντας παραμέτρους στο servlet: η HTML φόρμα <html> <head> <title>servlet Example - Passing Parameters</title> </head> <body> <form method="get" action="servlet2"> <p>give your name: <input type="text" name="username" «size="20"> <input type="submit" value="try it"></p> </form> </body> </html> Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 23

Περνώντας παραμέτρους στο servlet: Ο κώδικας του servlet package mypackage; import javax.servlet.*; import javax.servlet.http.*; import java.io.printwriter; import java.io.ioexception; public class Servlet2 extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=windows-1253"; public void init(servletconfig config) throws ServletException { super.init(config); } Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 24

Περνώντας παραμέτρους στο servlet: Ο κώδικας του servlet public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype(content_type); PrintWriter out = response.getwriter(); //Store the parameter value passed by the form String user = request.getparameter("username"); // then write the data of the response out.println("<html>"); out.println("<head><title>servlet talking to an HTML form!...</title></head>"); out.println("<body>"); out.println("<h2>hello " + user + "</h2>"); out.println("<h5>the time is: " + new java.util.date() + "</h5>"); out.println("</body></html>"); out.close(); } } Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 25

Πως ένα servlet μπορεί να απαντάει σε Get και Post requests µε τον ίδιο ακριβώς τρόπο; Έχουμε έναν Servlet στον οποίο κάποια HTML φόρμα μπορεί να στείλει είτε GET είτε POST request. Θέλουμε η απόκριση του Servlet να είναι πανομοιότυπη ανεξαρτήτως του τύπου του request, χωρίς όμως να αντιγράψουµε τον κώδικα της doget() στην dopost() Λύση: Απλά, η dopost() καλεί την doget(): public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { doget(request, response); } Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 26

Επικοινωνία μεταξύ Servlets Υπάρχουν πολλοί τρόποι µε τους οποίους ένα servlet μπορεί να επικοινωνήσει µε ένα άλλο servlet: Servlet Chaining ( Κάνοντας διαδοχικά Post, Get ) Μπορούμε να αλισιδώσουμε μια σειρά από servlets Θα μπορούσε πχ, να είναι μια διαδοχική καταχώρηση δεδομένων. Servlet Interface through a Database ( πχ για ένα Chat Room ) Μπορούμε να καταχωρούμε στοιχεία από ένα servlet σε μια βάση δεδομένων όπου, μπορεί να τα ανακτήσει ένα άλλο servlet ταυτόχρονα και να δίνεται η εικόνα ότι επικοινωνούν ταυτόχρονα. Socket, RMI Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 27

ODBC (Open DataΒase Connectivity) Η διεπαφή ODBC της Microsoft επιτρέπει σε εφαρμογές πρόσβαση σε συστήματα Β µέσω SQL Χρησιμοποιώντας ODBC ένας application developer μπορεί να αναπτύξει, μεταγλωτίσσει και προωθήσει μια εφαρμογή ανεξάρτητη του DBMS ιαφορετικά, η εφαρμογή δεν έχει μεταφερσιµότητα (non-portable) -> δύσκολη συντήρηση (δεν υποστηρίζονται άλλα DBMS ή άλλες εκδόσεις του ίδιου DBMS) Συστατικά μιας ODBC αρχιτεκτονικής: Application: καλεί ODBC συναρτήσεις Driver Manager: «φορτώνει» drivers για την εφαρμογή Driver: επεξεργάζεται και εκτελεί τις κλήσεις ODBC συναρτήσεων, στέλνει SQL requests και επιστρέφει τα αποτελέσματα στην εφαρμογή Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 28

JDBC (Java DataΒase Connectivity) Τo JDBC API της Sun Microsystems παρέχει ένα τυποποιημένο τρόπο πρόσβασης σε DBMS µέσω της γλώσσας Java. Με το JDBC, μια εφαρμογή έχει ομοιόμορφη πρόσβαση (µε SQL ερωτήματα) στα δεδομένα ανεξαρτήτως του DBMS και τρέχει πανομοιότυπα σε οποιαδήποτε πλατφόρμα υποστηρίζει Το JDBC API ορίζει ένα σύνολο διεπαφών Java που ενσωματώνουν την κύρια λειτουργικότητα Β (εκτέλεση queries, επεξεργασία αποτελεσμάτων,...) Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 29

JDBC (Java DataΒase Connectivity) Το JDBC API υλοποιείται µέσω του JDBC driver: ένα σύνολο κλάσεων που αποτελούν διεπαφές για επεξεργασία JDBC κλήσεων και επιστροφή αποτελεσμάτων στην εφαρμογή Java Γιατί χρειαζόμαστε το JDBC και δεν αρκούμαστε στο ODBC που είναι ένα API τυποποίησης της πρόσβασης σε Β ; Το ODBC δεν είναι κατάλληλο για άμεση χρήση από εφαρμογές Java γιατί είναι μια διεπαφή γραμμένη σε C Το JDBC προσφέρει μια λύση για μια φυσική διεπαφή Java, δηλαδή μια «αμιγώς Java» στον application development Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 30

Τύποι JDBC drivers 4 είδη JDBC drivers σε χρήση: Type 1: JDBC-ODBC bridge Type 2: «μερικός» Java driver Type 3: «αμιγής» Java driver προς ενδιάμεσο λογισμικό (middleware) Β Type 4: «αμιγής» Java driver για άμεση πρόσβαση σε Β Οι «αμιγείς» λύσεις προσφέρουν ανώτερη απόδοση Τo JDK περιέχει µόνο έναν JDBC driver, το jdbc-odbc bridge Για Β που δεν υποστηρίζονται από το ODBC, χρειαζόμαστε έναν JDBC driver για τη συγκεκριμένη Β (συνήθως αυτοί drivers πωλούνται) Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 31

Τύποι JDBC drivers Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 32

Διασύνδεση Servlets µε Βάσεις Δεδομένων Τα Servlets όπως όλα τα αλλά προγράμματα Java μπορούν να συνδεθούν µε βάσεις δεδομένων µε την χρήση JDBC driver Τo JDBC είναι database-independent. Πχ µε αλλαγή 2 γραμμών κώδικα μπορούμε να αλλάξουμε τη βάση µας από Microsoft Access σε MySQL, χωρίς αλλαγή του υπόλοιπου κώδικα Κύριο πλεονέκτημα είναι ότι τα Servlets μπορούν να διατηρούν Open Database Connections, µε αποτέλεσμα να μπορούν πολλά requests να εξυπηρετηθούν από ένα µόνο κάλεσμα, σε αντίθεση µε τα CGI scripts Που βρίσκω τον κατάλληλο driver; H επιλογή εξαρτάται από την πλατφόρμα (λειτουργικό σύστημα) όπου τρέχει ο Servlet και από το RDBMS (Β ) µε την οποία θα επικοινωνήσει: http://servlet.java.sun.com/products/jdbc/drivers Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 33

Εγκατάσταση JDBC driver Κατεβάζουμε (download) τον κατάλληλο JDBC driver (διαφορετικός για κάθε Βάση Δεδομένων) Για MySQL: http://www.mysql.com/downloads/api-jdbc.html Αποσυμπιέζουμε (unzip) το αρχείο που κατεβάσαμε σε κάποιο φάκελο (directory) «Φόρτωμα» JDBC driver: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName("postgresql.Driver"); Class.forName("oracle.jdbc.driver.OracleDriver"); Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 34

Διασύνδεση Servlets µε Βάσεις Δεδομένων: Μεθοδολογία import java.sql.*; Class.forName("org.gjt.mm.mysql.Driver"); String url = "jdbc:mysql://host:port/db"; π.χ. String url = "jdbc:mysql://localhost:3306/books"; con = DriverManager.getConnection(url, "root", ""); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select "); while(rs.next()) { } Γενική σύνταξη ενός connection URL:<url> ::= jdbc:easysoft:[<server spec>]:[<database>]{:<attribute>=<value>}*<server spec> ::= //[<host name>][:<port>]/<database> ::= <dsn> DSN=<dsn> FILEDSN=<filedsn><DSNlessconnection string > Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 35

Εξαγωγή δεδομένων από βάση public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype(content_type); PrintWriter out = response.getwriter(); out.print("<html><head>"); out.print("</head><body>"); out.print("<code><pre>"); out.print("<font color=green>id\t Name\t\t Title\n</font>"); // debugging info long time1 = System.currentTimeMillis(); // connecting to database Connection con = null; Statement stmt = null; ResultSet rs = null; try { // Load the JDBC-ODBC Bridge driver Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Get a connection to the database con = DriverManager.getConnection("jdbc:odbc:FPNWIND", "", ""); stmt = con.createstatement(); rs = stmt.executequery("select customerid, contactname, contacttitle FROM customers"); // displaying records Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 36

Εξαγωγή δεδομένων από βάση while(rs.next()) { out.print(rs.getobject(1).tostring() + "\t"); out.print(rs.getobject(2).tostring() + "\t"); out.print(rs.getobject(3).tostring() + "\n"); } } catch (SQLException e) { throw new ServletException("Servlet could not display records: " + e.tostring(), e); } catch (ClassNotFoundException e) { throw new ServletException("JDBC Driver not found.", e); } // debugging info long time2 = System.currentTimeMillis(); out.print("</pre></code>"); out.print("<p>search took : "); out.print( (time2 - time1) ); out.print(" ms.</p>"); out.print("<p\"><a href=\""); out.print(request.getrequesturi()); out.print("\">back</a></p>"); out.print("</body></html>"); out.close(); } Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 37

Εισαγωγή δεδομένων σε βάση public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype(content_type); PrintWriter out = response.getwriter(); // ιάβασµα παραµέτρων String id = request.getparameter("id").trim(); String name = request.getparameter("name").trim(); String price = request.getparameter("price").trim(); Connection con = null; Statement stmt = null; ResultSet rs = null; try { // «Φόρτωµα» JDBC driver και σύνδεση στη Β Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:FPNWIND", "", ""); String sql = "INSERT INTO Products(ProductID,ProductName, UnitPrice) VALUES (?,?,?)"; PreparedStatement ps = con.preparestatement(sql); stmt = con.createstatement(); // Εισαγωγή εγγραφής Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 38

Εισαγωγή δεδομένων σε βάση ps.setstring(1, id); ps.setstring(2, name); ps.setstring(3, price); ps.executeupdate(); } catch (SQLException e) { throw new ServletException("Servlet could not insert records: " + e.tostring(), e); } catch (ClassNotFoundException e) { throw new ServletException("JDBC Driver not found.", e); } out.print("<html><head>"); out.print("</head><body>"); out.print("<p> Data added </p>"); out.print("</body></html"); out.close(); } Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 39