Περιγραφή Εργασίας Προγραμματισμός Internet

fairieshourglassSoftware and s/w Development

Jun 9, 2012 (5 years and 4 months ago)

442 views

Προγραμματισμός 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";
}

}