Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19...

19
Java Servlets: Principles and Programming 1/19

Transcript of Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19...

Page 1: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

Java Servlets: Principles and Programming

1/19

Page 2: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 2/19

Περιεχόµενα

ΕισαγωγήΠλεονεκτήµατα των Servlet έναντι CGIΑρχιτεκτονική Servlet Παραλλαγές Τεχνολογίας Servlet

Pure ServletsServer Side Includes (SSI)Java Server Pages (JSPs)

Αλληλεπίδραση µε Πελάτες Ο κύκλος ζωής ενός ServletHelloWWW ServletΕπεξεργασία φόρµας µε ServletServlet Resources

Page 3: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 3/19

Εισαγωγή

Servlets είναι µια τεχνολογία Java αντίστοιχη µε τον προγραµµατισµό CGI. => Είναι προγράµµατα που τρέχουν σε ένα Web server και δηµιουργούν δυναµικά ιστοσελίδες (Web pages). Η δηµιουργία δυναµικών ιστοσελίδων είναι χρήσιµη, και συνήθως γίνεται για τους πιο κάτω λόγους: 1. Η ιστοσελίδα βασίζεται σε δεδοµένα που εισάγονται από το

χρήστη. π.χ τα αποτελέσµατα από µια µηχανή αναζήτησης και προγράµµατα επεξεργασίας παραγγελιών για e-commerce sites.

2. Τα δεδοµένα αλλάζουν πολύ συχνά. π.χ αναφορά καιρικών συνθηκών, τιµές χρηµατιστηρίου, τίτλοι ειδήσεων.

3. Η ιστοσελίδα χρησιµοποιεί πληροφορίες από βάσεις δεδοµένων. π.χ ιστοσελίδες που παρουσιάζουν τιµοκαταλόγους σε ένα on-line κατάστηµα.

Page 4: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 4/19

Πλεονεκτήµατα των Servlet έναντι CGI (1/3)

Απόδοση: CGI:

Νέο HTTP request => Νέα διεργασία (process) N ταυτόχρονες αιτήσεις στο ίδιο CGI πρόγραµµα => ο κώδικας του cgi φορτώνεται στη µνήµη Ν φορές

Servlets:Νέο HTTP request => Νέο lightweight Java thread (λιγότερο overhead από µια heavyweight διεργασία του Λειτουργικού Συστήµατος)N ταυτόχρονες αιτήσεις στο ίδιο servlet => N threads και το servlet class είναι φορτωµένο στη µνήµη µόνο µια φοράΠερισσότερες εναλλακτικές βελτιστοποίησης από ότι τα προγράµµατα CGI (επειδή η εικονική µηχανή Java µένει φορτωµένη στη µνήµη) όπως είναι το caching προηγούµενων υπολογισµών, διατήρηση ανοικτών συνδέσεων σε βάσεις δεδοµένων κ.α.

Page 5: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 5/19

Πλεονεκτήµατα των Servlet έναντι CGI (2/3)

Ευκολία: Για τους προγραµµατιστές Java. Τα servlets έχουν µεγάλη υποδοµή για αυτόµατο parsing και αποκωδικοποίηση των δεδοµένων µια φόρµας HTML, διάβασµα και καθορισµό των HTTP headers και άλλα παρόµοια utilities.

Portable: Τα Servlets είναι γραµµένα σε Java => Platform Independent.Υποστηρίζονται απ' ευθείας ή µέσω ενός plugin σε όλους του γνωστούς Web Servers όπως Apache, Microsoft IIS => Server Independent

Οικονοµία: Υπάρχουν πολλοί δωρεάν Web servers που είναι καλοί για προσωπική χρήση ή για Web Site που έχουν χαµηλό traffic. Η προσθήκη υποστήριξης servlet σε εµπορικούς Web servers είναι δωρεάν ή πολύ φθηνή.

Page 6: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 6/19

Πλεονεκτήµατα των Servlet έναντι CGI (3/3)

Άλλα: Τα Servlets είναι γραµµένα σε Java => Εκµετάλλευση του Java APIΕύκολη προσθήκη 3rd party componentsGarbage CollectionException HandlingObject oriented.

Page 7: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 7/19

Αρχιτεκτονική Servlet (1/2)

Servlet EnginesStandalone (Sun’s JavaWebServer (Jeeves), W3C’s JigSaw, O’Reilley’s Website Pro)Add-On to existing server (Allaires Jrun, Java-Apache project’s Jserv, IbmServletExpress)

Page 8: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 8/19

Αρχιτεκτονική Servlet (2/2)

Page 9: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 9/19

Παραλλαγές Servlet - Pure Servlets

Καλώντας το class file 1. javac HelloWorld.java2. http://server:port/servlets/HelloWord

// HelloWorld.javaimport java.io.*; import javax.servlet.*; import javax.servlet.http.*;

public class HelloWord extends HttpServlet {public void doGet(HttpServletRequest req,HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/html");PrintWriter out = res.getWriter();out.println("<HTML><HEAD><TITLE>Hello Client!</TITLE>"+

"</HEAD><BODY>Hello Word</BODY></HTML>");out.close(); }}

Page 10: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 10/19

Παραλλαγές Servlet - SSI

Ο Server κάνει προεπεξεργασία κάθε αρχείου *.shtml πριν στείλει την απάντηση στον client.

<html><!-- ssiExample.shtml--><head><title>Embedded Servlet Tag</title></head>

<body><SERVLET CODE="Servlet1" CODEBASE="http://server:port/dir"

initParam1=initvalue1 initParam2=initvalue2 ><SERVLET></body></html>

Page 11: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 11/19

Παραλλαγές Servlet - JSPs

Η τεχνολογία JSP επιτρέπει την ανάµειξη στατικού HTML µε δυναµικού.Πολλές σελίδες που δηµιουργούνται από CGI προγράµµατα είναι ως επί το πλείστον στατικές, και το δυναµικό κοµµάτι είναι πολύ περιορισµένο. Όµως το CGI και παραλλαγές του (και τα servlet), µας αναγκάζουν να δηµιουργούµε ολόκληρη τη σελίδα από το πρόγραµµα.

Page 12: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 12/19

Παραλλαγές Servlet - JSPs

<html>

<head><title>JSP File</title></head>

<body><%

if (request.getParameter("name") == null) {out.println ("You typed nothing");

}else {

out.println("You typed" + request.getParameter("name")); }

%> </body></html>

Page 13: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 13/19

Αλληλεπίδραση µε Πελάτες (1/2)

Όταν ένα servlet δέχεται ένα κάλεσµα από τον πελάτη (client), λαµβάνει δύο αντικείµενα (objects):

Ένα ServletRequest, που εξασφαλίζει την επικοινωνία από τον πελάτη προς τον server. Ένα ServletResponse, που εξασφαλίζει την επικοινωνία από το servlet πίσω στον πελάτη.

(Τα ServletRequest και ServletResponse είναι interfaces ορισµένα στο javax.servlet package.)

Page 14: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 14/19

Αλληλεπίδραση µε Πελάτες (2/2)

Οι µέθοδοι του Servlet οι οποίες εκτελούνται µετά από ένα HTTP request είναι οι ακόλουθοι:

doGet, για εκτέλεση αιτήσεων GET, conditional GET και HEAD doPost, για εκτέλεση αιτήσεων POST

Οι πιο πάνω µέθοδοι by default, επιστρέφουν το µήνυµα λάθους BAD_REQUEST (400). => Το servlet που θα γράψουµε πρέπει να κάνει override τις µεθόδους που θέλουµε να εξυπηρετούν τα αντίστοιχα HTTP requests.

Page 15: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 15/19

Ο κύκλος ζωής ενός Servlet

destroy()

init()

Page 16: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 16/19

HelloWWW Servlet

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class HelloWWW extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException, IOException {

// set content type and other response header fieldsresponse.setContentType("text/html");// Write the data of the responsePrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +

"Transitional//EN\">\n" +"<HTML>\n" +"<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" +"<BODY>\n" +"<H1>Hello WWW</H1>\n" +"</BODY></HTML>");

}}

Page 17: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 17/19

Επεξεργασία φόρµας µε Servlet (1/2)

<html><head><title>Choosing a picture</title></head><body><form ACTION="http://localhost/servlet/ChoosePicture" METHOD="GET"

name="FORM1">Choose a funny picture:<select name="picture" size="1"><option value="funny1.jpg">Bill Gates</option><option value="funny2.jpg">2 much time on the Internet</option><option value="funny3.jpg">Bill Clinton</option>

</select></p><input TYPE="submit" name="submit_btn" value="choose"></p>

</form></body></html>

Page 18: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 18/19

Επεξεργασία φόρµας µε Servlet (2/2)

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class ChoosePicture extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {response.setContentType("text/html");PrintWriter out = response.getWriter();String pictureName = request.getParameter("picture");out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +

"Transitional//EN\">\n" +"<HTML>\n" +"<HEAD><TITLE>ChoosePicture Servlet</TITLE></HEAD>\n" +"<BODY>\n" +"<IMG SRC=\"../images/" + pictureName + "\">\n" +"</BODY></HTML>");

}

public void init(ServletConfig config) throws ServletException {System.out.print("init()\n");

}

public void destroy() {System.out.print("destroy()\n");}}

Page 19: Java Servlets: Principles and Programmingepl425/java-Servlets.pdf · 15/3/2004 4/19 Πλεονεκτήµατατων Servlet έναντι CGI (1/3) aΑπόδοση: ¾CGI: Νέο

15/3/2004 19/19

Servlet Resources

The Jakarta Projectjakarta.apache.org

Java Servlet Reference Guidewebreview.com/pub/97/10/10/feature/guide.html

Servlets and JSP: A Tutorialwww.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Intro.html

Sun’s Servlet Tutorialjava.javasoft.com/docs/books/tutorial/servlets/TOC.html

Servlet Essentials http://www.novocode.com/doc/servlet-essentials/

Servlet BooksJavaTM Servlet Programming, Jason Hunter with William

Crawford by O’REILLY