de-vraag
  • Ερωτήσεις
  • Ετικέτες
  • Χρήστες
Ειδοποιήσεις
Ανταμοιβές
Εγγραφή
Μόλις εγγραφείτε, θα ενημερωθείτε για τις απαντήσεις και τα σχόλια στις ερωτήσεις σας.
Συνδεθείτε
Αν έχετε ήδη λογαριασμό, συνδεθείτε για να ελέγξετε τις νέες ειδοποιήσεις.
Θα υπάρξουν ανταμοιβές για πρόσθετες ερωτήσεις, απαντήσεις και σχόλια.
Περισσότερα
Πηγή
Επεξεργασία
 dedalo
dedalo
Ερώτηση

doGet και doPost σε Servlets

Έχω αναπτύξει μια σελίδα HTML που στέλνει πληροφορίες σε ένα Servlet. Στο Servlet, χρησιμοποιώ τις μεθόδους doGet() και doPost():

public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException  {

     String id = req.getParameter("realname");
     String password = req.getParameter("mypassword");
}

public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

    String id = req.getParameter("realname");
    String password = req.getParameter("mypassword");
}

Στον κώδικα της σελίδας html που καλεί το Servlet είναι:

<form action="identification" method="post" enctype="multipart/form-data">
    User Name: <input type="text" name="realname">
    Password: <input type="password" name="mypassword">
    <input type="submit" value="Identification">
</form>   

Όταν χρησιμοποιώ τη μέθοδο method = "get" στο Servlet, λαμβάνω την τιμή του id και του password, ωστόσο όταν χρησιμοποιώ τη μέθοδο method = "post", το id και το password παίρνουν την τιμή null. Γιατί δεν λαμβάνω τις τιμές σε αυτή την περίπτωση;

Ένα άλλο πράγμα που θα ήθελα να ξέρω είναι πώς να χρησιμοποιήσω τα δεδομένα που παράγονται ή επικυρώνονται από το Servlet. Για παράδειγμα, αν το Servlet που φαίνεται παραπάνω πιστοποιεί τον χρήστη, θα ήθελα να εκτυπώσω το id του χρήστη στη σελίδα HTML μου. Θα πρέπει να μπορώ να στείλω τη συμβολοσειρά 'id' ως απάντηση και να χρησιμοποιήσω αυτές τις πληροφορίες στη σελίδα HTML μου. Είναι δυνατόν;

105 2010-02-28T01:02:40+00:00 3
 drognisep
drognisep
Επεξεργασμένη ερώτηση Κάνε Αύγουστος 2016 в 5:42
Προγραμματισμός
java
servlets
Αυτή η ερώτηση έχει 1 απάντηση στα αγγλικά, για να τις διαβάσετε συνδεθείτε στο λογαριασμό σας.
Λύση / Απάντηση
 BalusC
BalusC
Κάνε Φεβρουάριος 2010 в 1:43
2010-02-28T01:43:08+00:00
Περισσότερα
Πηγή
Επεξεργασία
#10122779

Εισαγωγή

Θα πρέπει να χρησιμοποιείτε την [doGet()][1] όταν θέλετε να αναχαιτίσετε [αιτήσεις HTTP GET][2]. Θα πρέπει να χρησιμοποιείτε το [doPost()][3] όταν θέλετε να υποκλέψετε [αιτήσεις HTTP POST][4]. Αυτά είναι όλα. Μην μεταφέρετε το ένα στο άλλο ή το αντίστροφο (όπως στην ατυχή αυτοδημιουργούμενη μέθοδο processRequest() του Netbeans). Αυτό δεν έχει κανένα απολύτως νόημα.

GET

Συνήθως, τα αιτήματα HTTP GET είναι [idempotent][5]. Δηλαδή, παίρνετε ακριβώς το ίδιο αποτέλεσμα κάθε φορά που εκτελείτε την αίτηση (αφήνοντας την εξουσιοδότηση/ταυτοποίηση και τη χρονικά ευαίσθητη φύση της σελίδας -αποτελέσματα αναζήτησης, τελευταίες ειδήσεις κ.λπ.- εκτός εξέτασης). Μπορούμε να μιλήσουμε για ένα αίτημα που μπορεί να καταχωρηθεί με σελιδοδείκτη. Κάνοντας κλικ σε έναν σύνδεσμο, κάνοντας κλικ σε έναν σελιδοδείκτη, εισάγοντας την ακατέργαστη διεύθυνση URL στη γραμμή διευθύνσεων του προγράμματος περιήγησης κ.λπ. θα πυροδοτήσουν όλα ένα αίτημα HTTP GET. Εάν ένα Servlet ακούει την εν λόγω διεύθυνση URL, τότε θα κληθεί η μέθοδος doGet() του. Συνήθως χρησιμοποιείται για την προεπεξεργασία ενός αιτήματος. Δηλαδή, για να κάνει κάποια επιχειρησιακά πράγματα πριν παρουσιάσει την έξοδο HTML από ένα JSP, όπως για παράδειγμα να συλλέξει δεδομένα για εμφάνιση σε έναν πίνακα.

@WebServlet("/products")
public class ProductsServlet extends HttpServlet {

    @EJB
    private ProductService productService;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Product> products = productService.list();
        request.setAttribute("products", products); // Will be available as ${products} in JSP
        request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
    }

}