Προγραμματισμός Internet Εξάμηνο: Χειμερινό 2006-2007 Εργασία Εργαστηρίου Δευτέρα 11 Δεκ. 2006 Περιγραφή της εργασίας Μία εταιρία ηλεκτρονικού εμπορίου εμπορεύεται βιβλία πληροφορικής μέσω διαδικτύου. Για κάθε βιβλίο αποθηκεύονται πληροφορίες στην Βάση Δεδομένων της εταιρίας. Η Βάση Δεδομένων που πρέπει να χρησιμοποιήσετε και ο τρόπος δημιουργίας της, καθώς επίσης και ο τρόπος σύνδεσής σας με την ΒΔ από την εφαρμογή του NetBeans, δίνονται στο παράρτημα που ακολουθεί την περιγραφή της εργασίας. Α. Εργασίες επισκεπτών Οι επισκέπτες θα πρέπει να μπορούν να κάνουν τα εξής: 1. Αναζήτηση βιβλίου με βάση διάφορα κριτήρια. Για τους σκοπούς της άσκησης περιοριστείτε στον τίτλο του βιβλίου, στο όνομα του συγγραφέα, και στο ISBN. (3 μονάδες) 2. Εμφάνιση όλων των βιβλίων με αλφαβητική σειρά τίτλου (3 μονάδες). 3. Για τα (1) και (2) απλά εμφανίζεται ο τίτλος του βιβλίου. Κάντε τον τίτλο του βιβλίου υπερσύνδεση που οδηγεί σε μία σελίδα με αναλυτικές πληροφορίες για το βιβλίο. (4 μονάδες) Β. Εργασίες διαχειριστή Ο διαχειριστής θα πρέπει να μπορεί να κάνει τα εξής: 1. Εισαγωγή νέων βιβλίων στην Βάση Δεδομένων μέσω της κατάλληλης ιστοσελίδας αφού κάνει login. (3 μονάδες) 2. Τροποποίηση και διαγραφή ενός βιβλίου αφού δώσει το ISBN του (3 μονάδες) 3. Για τα (1) και (2) θα πρέπει ο διαχειριστής να κάνει login με την εφαρμογή. Υποθέστε πως ο έγκυρος διαχειριστής αναγνωρίζεται από το όνομα χρήστη admin με κωδικό admin. Αφού ο διαχειριστής κάνει login θα του παρουσιάζεται η κατάλληλη σελίδα για να επιλέξει εργασία (1 ή 2). Μετά την σύνδεσή του ο διαχειριστής δεν θα πρέπει να χρειάζεται να κάνει ξανά login αν για παράδειγμα θέλει να κάνει και την 1 η εργασία και την 2 η εργασία. (4 μονάδες) Απαραίτητο λογισμικό Αναπτύξτε την πιο πάνω εφαρμογή χρησιμοποιώντας το NetBeans 4.0 και την MySQL. Το απαραίτητο λογισμικό καθώς και οδηγίες εγκατάστασής του (διαβάστε το αρχείο Readme.txt) θα το βρείτε στην διεύθυνση: http://www.cs.teilar.gr/gkakaron/ftp/ipcd Οδηγίες Η εργασία μπορεί να γίνει από έναν ή δύο φοιτητές. Αν την εργασία την κάνει ένας φοιτητής τότε μπορεί να επιλέξει είτε το Α (εργασίες επισκέπτη) είτε το
Β (εργασίες διαχειριστή). Φυσικά κάποιος μπορεί να κάνει και τα δύο, αν το επιθυμεί. Αν η εργασία γίνει από δύο φοιτητές, τότε κάποιος θα κάνει το Α και ο άλλος το Β. Η εξέταση θα γίνει στον χώρο του εργαστηρίου την ώρα που έχετε μάθημα και την ημέρα του τελευταίου εργαστηρίου. Οι παλιοί φοιτητές θα έλθουν για εξέταση στο τμήμα της Παρασκευής 7-9. Για την εξέταση θα φέρετε μαζί σας το project του NetBeans 4.0. Φροντίστε να χρησιμοποιήσετε αυτήν την έκδοση του NetBeans, διότι αυτήν την έκδοση έχουμε εγκατεστημένη στο εργαστήριο. Ακολουθείστε πιστά τις οδηγίες για την δημιουργία της ΒΔ που ακολουθούν (βλ. παράρτημα), διότι αυτήν θα είναι η ΒΔ που θα έχουμε εγκατεστημένη στο εργαστήριο. ΠΑΡΑΡΤΗΜΑ: Οδηγίες για την Βάση Δεδομένων της εφαρμογής Δημιουργία της Βάσης Δεδομένων της εφαρμογής 1. Ξεκινήστε την εφαρμογή MySQL Administrator 2. Από την περιοχή schemata κάντε δεξί κλικ και επιλέξτε Create New Schema. Στο πλαίσιο διαλόγου που θα εμφανισθεί δώστε το όνομα schools. Πατήστε το OK. Δημιουργία του χρήστη για την πρόσβαση στην Βάση Δεδομένων 1. Δημιουργείστε έναν χρήστη με το όνομα students και τον κωδικό students και δώστε του όλα τα δικαιώματα για την ΒΔ schools. a. Κάντε κλικ στο User Administration b. Κάντε δεξί κλικ στην περιοχή User Accounts και επιλέξτε Add New User. c. Στην καρτέλα User Information δώστε το όνομα χρήστη students στο πλαίσιο κειμένου MySQL User και τον κωδικό students στα πλαίσιο κειμένου Password και Confirm Password, όπως φαίνεται στην ακόλουθη εικόνα:
d. Από την καρτέλα Schema Privileges επιλέξτε την ΒΔ schools, κάνοντας κλικ πάνω της, και στην συνέχεια κάντε κλικ στο πλήκτρο έτσι ώστε όλα τα δικαιώματα που βρίσκονται στην στήλη Available Privileges, να μεταφερθούν στην στήλη Assigned Privileges, όπως φαίνεται στην εικόνα που ακολουθεί: e. Πατήστε το πλήκτρο Apply Changes για να δημιουργήσετε τον χρήστη. Δημιουργία των πινάκων της Βάσης Δεδομένων 1. Δημιουργείστε τον πίνακα authors για τους συγγραφείς των βιβλίων. a. Από την περιοχή schemata, κάντε κλικ στην ΒΔ schools, ώστε να την επιλέξετε
b. Στην καρτέλα Schema Tables κάντε κλικ στο πλήκτρο Create Table για την δημιουργία ενός νέου πίνακα. c. Στον MySQL Table Editor, δώστε τα στοιχεία όπως φαίνονται στην εικόνα που ακολουθεί και πατήστε το πλήκτρο Apply Changes για την δημιουργία του πίνακα. Μην ξεχάσετε να απενεργοποιήσετε το Auto Inc για το πεδίο authid. d. Μόλις πατήσετε το πλήκτρο Apply Changes θα εμφανιστεί το πλαίσιο διαλόγου Confirm Table Edit που φαίνεται στην ακόλουθη εικόνα. Πατήστε το πλήκτρο Execute για την δημιουργία του πίνακα authors. e. Τέλος πατήστε το πλήκτρο Close για να κλείσετε το τον MySQL Table Editor. 2. Δημιουργείστε τον πίνακα books για τα βιβλία της εφαρμογής. a. Από την περιοχή schemata, κάντε κλικ στην ΒΔ schools, ώστε να την επιλέξετε b. Στην καρτέλα Schema Tables κάντε κλικ στο πλήκτρο Create Table για την δημιουργία ενός νέου πίνακα.
c. Στον MySQL Table Editor, δώστε τα στοιχεία όπως φαίνονται στην εικόνα που ακολουθεί και πατήστε το πλήκτρο Apply Changes για την δημιουργία του πίνακα. Μην ξεχάσετε να απενεργοποιήσετε το Auto Inc για το πεδίο bookid. d. Μόλις πατήσετε το πλήκτρο Apply Changes θα εμφανιστεί το πλαίσιο διαλόγου Confirm Table Edit που φαίνεται στην ακόλουθη εικόνα. Πατήστε το πλήκτρο Execute για την δημιουργία του πίνακα books. 3. Δημιουργείστε τον πίνακα author-book για την συσχέτιση των συγγραφέων με τα βιβλία τους. Στον πίνακα αυτόν θα έχουμε μόνο δύο πεδία, το authorid και το bookid, τα οποία θα είναι σύνθετο κλειδί, και καθένα από αυτά θα είναι ξένο κλειδί του πίνακα των συγγραφέων και των βιβλίων αντίστοιχα. a. Από την περιοχή schemata, κάντε κλικ στην ΒΔ schools, ώστε να την επιλέξετε
b. Στην καρτέλα Schema Tables κάντε κλικ στο πλήκτρο Create Table για την δημιουργία ενός νέου πίνακα. c. Στον MySQL Table Editor, δώστε τα στοιχεία όπως φαίνονται στην εικόνα που ακολουθεί. Σβήστε το Auto Inc και από τα δύο πεδία. Κάντε και το δεύτερο πεδίο πρωτεύον κλειδί κάνοντας κλικ δίπλα από το όνομά του (έτσι ώστε να εμφανιστεί το εικονίδιο του κλειδιού όπως φαίνεται στην εικόνα). d. Κάντε κλικ στην καρτέλα Foreign Keys και πατήστε το πλήκτρο + για την προσθήκη του περιορισμού ότι το authid είναι ξένο κλειδί του πίνακα authors. Επιλέξτε από το Ref. Table τον πίνακα authors όπως δείχνει η εικόνα που ακολουθεί. e. Κάντε ξανά κλικ στο + για την προσθήκη του περιορισμού ότι το bookid είναι ξένο κλειδί του πίνακα books. Επιλέξτε από το Ref. Table τον πίνακα books όπως δείχνει η εικόνα που ακολουθεί. f. Πατήστε το πλήκτρο Apply Changes και στην συνέχεια στο πλαίσιο διαλόγου που θα εμφανιστεί (βλ. εικόνα) πατήστε το πλήκτρο Execute για την δημιουργία του πίνακα author-book
Δημιουργία εφαρμογής με το NetBeans και σύνδεση με την ΒΔ 1. Δημιουργείστε ένα web application με το NetBeans. Δώστε στο web application το όνομά σας (π.χ. kakarontzas). Αν είστε δύο φοιτητές δώστε τα ονόματα και των δύο (π.χ. kakarontzas-nanas). Σε αυτό το web application θα αναπτύξετε στην συνέχεια την εφαρμογή σας. 2. Προσθέστε τον mysql jdbc driver στην εφαρμογή ώστε να μπορείτε να συνδεθείτε με την Βάση Δεδομένων. a. Κάντε δεξί κλικ στο όνομα του project στην καρτέλα projects και επιλέξτε properties ώστε να εμφανιστεί το πλαίσιο διαλόγου Project Properties, όπως φαίνεται στην εικόνα που ακολουθεί b. Κάντε κλικ στο Packaging Project, και στο Additional Content to Include κάντε κλικ στο πλήκτρο Add JAR/Folder. Από το πλαίσιο διαλόγου που θα εμφανισθεί επιλέξτε από τον δίσκο σας το αρχείο mysql-connector-java-3.1.6-bin.jar (αυτό βρίσκεται στην διεύθυνση http://www.cs.teilar.gr/gkakaron/ftp/ipcd/ όπου βρίσκονται και όλα τα άλλα προγράμματα), το οποίο είναι ο MySQL JDBC Driver που θα χρησιμοποιήσουμε και κάντε κλικ στο Open. Το όνομα του αρχείου θα εμφανισθεί στην στήλη Item. Στην στήλη Path in WAR γράψτε ακριβώς (προσοχή στα κεφαλαία και στα πεζά) WEB- INF/lib και πατήστε enter. Θα σας βγάλει το μήνυμα που φαίνεται
στην ακόλουθη εικόνα. Πατήστε ΟΚ. c. Οι ιδιότητες του project θα πρέπει να είναι όπως φαίνονται στην εικόνα που ακολουθεί. Πατήστε ΟΚ για να κλείσετε το πλαίσιο διαλόγου Project Properties. Δημιουργία δοκιμαστικού servlet Στην συνέχεια δημιουργείστε ένα servlet με το όνομα TestServlet και περιεχόμενα αυτό που ακολουθεί. Τρέξτε το servlet. Θα πρέπει να δείτε το μήνυμα Connection Established. Αν δεν δείτε αυτό το μήνυμα θα δείτε ένα μήνυμα λάθους. Προσπαθήστε από το μήνυμα λάθους να καταλάβετε τι πήγε στραβά και να το διορθώσετε. Αν δεν τα καταφέρετε στείλτε μας email με το μήνυμα λάθους. Ακολουθεί ο κώδικας του TestServlet:
import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class TestServlet extends HttpServlet { private Connection con; private String message; public void init(servletconfig config) throws ServletException { super.init(config); try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection( "jdbc:mysql://localhost/schools?user=students&password=students"); catch (Exception e) { message = e.getmessage(); public void destroy() { if (con!=null) { try { con.close(); catch (SQLException e) { log("couldn't close connection with MySQL", e); protected void processrequest(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<head>"); out.println("<title>servlet</title>"); out.println("</head>"); out.println("<body>"); if (con!=null) { out.println("connection Established"); else { out.println(message); out.println("</body>");
out.println("</html>"); out.close(); protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processrequest(request, response); protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processrequest(request, response); public String getservletinfo() { return "Short description";