Middle
Πώς γίνεται η επεξεργασία ενός αιτήματος HTTP στην κλάση HttpServlet;
sobes.tech AI
Απάντηση από AI
Η επεξεργασία του HTTP αιτήματος στην κλάση HttpServlet πραγματοποιείται με την υπεράσπιση μιας από τις μεθόδους doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace ή service.
Ο κύκλος ζωής επεξεργασίας:
- Ο διακομιστής servlet (π.χ. Tomcat) λαμβάνει το HTTP αίτημα.
- Ο διακομιστής καθορίζει τον αντίστοιχο servlet βάσει της διεύθυνσης URL του αιτήματος.
- Αν ο servlet δεν έχει φορτωθεί ακόμα, ο διακομιστής τον δημιουργεί, καλεί τη μέθοδο
init()(μία φορά κατά τη διάρκεια ζωής του servlet) και τον τοποθετεί στη δεξαμενή. - Ο διακομιστής δημιουργεί αντικείμενα
HttpServletRequestκαιHttpServletResponse, που περιέχουν τα δεδομένα του αιτήματος και παρέχουν μεθόδους για τη διαμόρφωση της απάντησης. - Ο διακομιστής καλεί τη μέθοδο
service(HttpServletRequest req, HttpServletResponse resp)του servlet. - Η προεπιλεγμένη υλοποίηση της
serviceκαθορίζει τον τύπο της μεθόδου HTTP (GET, POST κ.λπ.) και αναθέτει την επεξεργασία στη σχετική μέθοδοdo<Method>(doGet,doPostκ.λπ.), περνώντας τα αντικείμενα αιτήματος και απάντησης. - Ο προγραμματιστής υπερασπίζεται τη σχετική μέθοδο
do<Method>για την υλοποίηση της ειδικής λογικής επεξεργασίας του αιτήματος. - Η μέθοδος
do<Method>διαμορφώνει την απάντηση, γράφοντας δεδομένα στοHttpServletResponse. - Μετά το τέλος της λειτουργίας της μεθόδου
service, ο διακομιστής στέλνει την διαμορφωμένη απάντηση στον πελάτη. - Όταν ο διακομιστής αποφασίζει να αποφορτίσει τον servlet (π.χ. κατά το σταμάτημα της εφαρμογής), καλεί τη μέθοδο
destroy()για την απελευθέρωση πόρων.
Παράδειγμα υπεράσπισης της doGet:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Ορισμός τύπου περιεχομένου και κωδικοποίησης απάντησης
response.setContentType("text/html;charset=UTF-8");
// Λήψη PrintWriter για εγγραφή στην απάντηση
try (PrintWriter out = response.getWriter()) {
// Εγγραφή HTML markup στην απάντηση
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Χαιρετισμός</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Χαιρετισμός από το servlet μου!</h1>");
out.println("</body>");
out.println("</html>");
}
}
}
Πίνακας με τις βασικές μεθόδους do<Method> και τον σκοπό τους:
| Μέθοδος | Σκοπός |
|---|---|
doGet |
Επεξεργασία GET αιτημάτων (λήψη δεδομένων, idempotent λειτουργίες). |
doPost |
Επεξεργασία POST αιτημάτων (αποστολή δεδομένων για επεξεργασία, δημιουργία πόρων). |
doPut |
Επεξεργασία PUT αιτημάτων (ενημέρωση πόρων). |
doDelete |
Επεξεργασία DELETE αιτημάτων (διαγραφή πόρων). |
doHead |
Επεξεργασία HEAD αιτημάτων (λήψη μόνο των κεφαλίδων της απάντησης). |
doOptions |
Επεξεργασία OPTIONS αιτημάτων (λήψη πληροφοριών για διαθέσιμες μεθόδους). |
doTrace |
Επεξεργασία TRACE αιτημάτων (αποσφαλμάτωση, echo του αιτήματος). |
Η υπεράσπιση της μεθόδου service επιτρέπει την πλήρη ανακατεύθυνση της λογικής διαχείρισης αιτημάτων, αλλά συνήθως υπερασπίζονται τις συγκεκριμένες do<Method>.