Sobes.tech
Middle

Πώς γίνεται η επεξεργασία ενός αιτήματος HTTP στην κλάση HttpServlet;

sobes.tech AI

Απάντηση από AI

Η επεξεργασία του HTTP αιτήματος στην κλάση HttpServlet πραγματοποιείται με την υπεράσπιση μιας από τις μεθόδους doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace ή service.

Ο κύκλος ζωής επεξεργασίας:

  1. Ο διακομιστής servlet (π.χ. Tomcat) λαμβάνει το HTTP αίτημα.
  2. Ο διακομιστής καθορίζει τον αντίστοιχο servlet βάσει της διεύθυνσης URL του αιτήματος.
  3. Αν ο servlet δεν έχει φορτωθεί ακόμα, ο διακομιστής τον δημιουργεί, καλεί τη μέθοδο init() (μία φορά κατά τη διάρκεια ζωής του servlet) και τον τοποθετεί στη δεξαμενή.
  4. Ο διακομιστής δημιουργεί αντικείμενα HttpServletRequest και HttpServletResponse, που περιέχουν τα δεδομένα του αιτήματος και παρέχουν μεθόδους για τη διαμόρφωση της απάντησης.
  5. Ο διακομιστής καλεί τη μέθοδο service(HttpServletRequest req, HttpServletResponse resp) του servlet.
  6. Η προεπιλεγμένη υλοποίηση της service καθορίζει τον τύπο της μεθόδου HTTP (GET, POST κ.λπ.) και αναθέτει την επεξεργασία στη σχετική μέθοδο do<Method> (doGet, doPost κ.λπ.), περνώντας τα αντικείμενα αιτήματος και απάντησης.
  7. Ο προγραμματιστής υπερασπίζεται τη σχετική μέθοδο do<Method> για την υλοποίηση της ειδικής λογικής επεξεργασίας του αιτήματος.
  8. Η μέθοδος do<Method> διαμορφώνει την απάντηση, γράφοντας δεδομένα στο HttpServletResponse.
  9. Μετά το τέλος της λειτουργίας της μεθόδου service, ο διακομιστής στέλνει την διαμορφωμένη απάντηση στον πελάτη.
  10. Όταν ο διακομιστής αποφασίζει να αποφορτίσει τον 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>.