Servlets - Données de formulaire

Vous devez avoir rencontré de nombreuses situations où vous devez transmettre certaines informations de votre navigateur au serveur Web et, finalement, à votre programme backend. Le navigateur utilise deux méthodes pour transmettre ces informations au serveur Web. Ces méthodes sont la méthode GET et la méthode POST.

Méthode GET

La méthode GET envoie les informations utilisateur codées ajoutées à la demande de page. La page et les informations encodées sont séparées par le? (point d'interrogation) comme suit -

http://www.test.com/hello?key1 = value1&key2 = value2

La méthode GET est la méthode par défaut pour transmettre des informations du navigateur au serveur Web et elle produit une longue chaîne qui apparaît dans la zone Emplacement: de votre navigateur. N'utilisez jamais la méthode GET si vous avez un mot de passe ou d'autres informations sensibles à transmettre au serveur. La méthode GET a une limitation de taille: seuls 1024 caractères peuvent être utilisés dans une chaîne de requête.

Ces informations sont transmises à l'aide de l'en-tête QUERY_STRING et seront accessibles via la variable d'environnement QUERY_STRING et Servlet gère ce type de requêtes à l'aide de doGet() méthode.

Méthode POST

Une méthode généralement plus fiable pour transmettre des informations à un programme backend est la méthode POST. Cela regroupe les informations exactement de la même manière que la méthode GET, mais au lieu de les envoyer sous forme de chaîne de texte après un? (point d'interrogation) dans l'URL, il l'envoie sous forme de message séparé. Ce message arrive au programme principal sous la forme de l'entrée standard que vous pouvez analyser et utiliser pour votre traitement. Servlet gère ce type de requêtes en utilisantdoPost() méthode.

Lecture des données de formulaire à l'aide du servlet

Les servlets gèrent automatiquement l'analyse des données de formulaire à l'aide des méthodes suivantes en fonction de la situation -

  • getParameter() - Vous appelez la méthode request.getParameter () pour obtenir la valeur d'un paramètre de formulaire.

  • getParameterValues() - Appelez cette méthode si le paramètre apparaît plus d'une fois et renvoie plusieurs valeurs, par exemple une case à cocher.

  • getParameterNames() - Appelez cette méthode si vous voulez une liste complète de tous les paramètres de la demande en cours.

Exemple de méthode GET utilisant l'URL

Voici une URL simple qui transmettra deux valeurs au programme HelloForm en utilisant la méthode GET.

http://localhost:8080/HelloForm?first_name = ZARA&last_name = ALI

Ci-dessous est le HelloForm.javaprogramme de servlet pour gérer les entrées fournies par le navigateur Web. Nous allons utilisergetParameter() méthode qui facilite l'accès aux informations transmises -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>" +
         "</html>"
      );
   }
}

En supposant que votre environnement est correctement configuré, compilez HelloForm.java comme suit -

$ javac HelloForm.java

Si tout se passe bien, la compilation ci-dessus produirait HelloForm.classfichier. Ensuite, vous devrez copier ce fichier de classe dans <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes et créer les entrées suivantes dansweb.xml fichier situé dans <Tomcat-installation-directory> / webapps / ROOT / WEB-INF /

<servlet>
   <servlet-name>HelloForm</servlet-name>
   <servlet-class>HelloForm</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>HelloForm</servlet-name>
   <url-pattern>/HelloForm</url-pattern>
</servlet-mapping>

Tapez maintenant http: // localhost: 8080 / HelloForm? First_name = ZARA & last_name = ALI dans la case Location: de votre navigateur et assurez-vous que vous avez déjà démarré le serveur tomcat, avant de lancer la commande ci-dessus dans le navigateur. Cela générerait le résultat suivant -

Using GET Method to Read Form Data

  • First Name: ZARA
  • Last Name: ALI

Exemple de méthode GET utilisant le formulaire

Voici un exemple simple qui transmet deux valeurs à l'aide du formulaire HTML et du bouton d'envoi. Nous allons utiliser le même servlet HelloForm pour gérer cette entrée.

<html>
   <body>
      <form action = "HelloForm" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

Conservez ce HTML dans un fichier Hello.htm et placez-le dans le répertoire <Tomcat-installationdirectory> / webapps / ROOT. Lorsque vous accéderez à http: // localhost: 8080 / Hello.htm , voici la sortie réelle du formulaire ci-dessus.

Essayez d'entrer le prénom et le nom, puis cliquez sur le bouton Soumettre pour voir le résultat sur votre machine locale sur laquelle tomcat est en cours d'exécution. Sur la base de l'entrée fournie, il générera un résultat similaire à celui mentionné dans l'exemple ci-dessus.

Exemple de méthode POST utilisant le formulaire

Faisons peu de modifications dans le servlet ci-dessus, afin qu'il puisse gérer les méthodes GET ainsi que POST. Ci-dessousHelloForm.java programme de servlet pour gérer les entrées fournies par le navigateur Web à l'aide des méthodes GET ou POST.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

Maintenant, compilez et déployez le servlet ci-dessus et testez-le en utilisant Hello.htm avec la méthode POST comme suit -

<html>
   <body>
      <form action = "HelloForm" method = "POST">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

Voici la sortie réelle du formulaire ci-dessus, essayez d'entrer le prénom et le nom, puis cliquez sur le bouton Soumettre pour voir le résultat sur votre ordinateur local sur lequel tomcat est en cours d'exécution.

Sur la base de l'entrée fournie, cela générerait un résultat similaire à celui mentionné dans les exemples ci-dessus.

Transmission des données de case à cocher au programme de servlet

Les cases à cocher sont utilisées lorsque plusieurs options doivent être sélectionnées.

Voici un exemple de code HTML, CheckBox.htm, pour un formulaire avec deux cases à cocher

<html>
   <body>
      <form action = "CheckBox" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked" /> Maths
         <input type = "checkbox" name = "physics"  /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked" /> 
                                          Chemistry
         <input type = "submit" value = "Select Subject" />
      </form>
   </body>
</html>

Le résultat de ce code est la forme suivante

Vous trouverez ci-dessous le programme de servlet CheckBox.java pour gérer les entrées fournies par le navigateur Web pour le bouton de la case à cocher.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class CheckBox extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Checkbox Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>Maths Flag : </b>: "
                  + request.getParameter("maths") + "\n" +
                  "  <li><b>Physics Flag: </b>: "
                  + request.getParameter("physics") + "\n" +
                  "  <li><b>Chemistry Flag: </b>: "
                  + request.getParameter("chemistry") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Pour l'exemple ci-dessus, il afficherait le résultat suivant -

Reading Checkbox Data

  • Maths Flag : : on
  • Physics Flag: : null
  • Chemistry Flag: : on

Lecture de tous les paramètres du formulaire

Voici l'exemple générique qui utilise getParameterNames()méthode de HttpServletRequest pour lire tous les paramètres de formulaire disponibles. Cette méthode retourne une énumération qui contient les noms des paramètres dans un ordre non spécifié

Une fois que nous avons une énumération, nous pouvons boucler l'énumération de manière standard en utilisant la méthode hasMoreElements () pour déterminer quand arrêter et en utilisant la méthode nextElement () pour obtenir chaque nom de paramètre.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ReadParams extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading All Form Parameters";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
            "<th>Param Name</th>"
            "<th>Param Value(s)</th>\n"+
         "</tr>\n"
      );

      Enumeration paramNames = request.getParameterNames();

      while(paramNames.hasMoreElements()) {
         String paramName = (String)paramNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n<td>");
         String[] paramValues = request.getParameterValues(paramName);

         // Read single valued data
         if (paramValues.length == 1) {
            String paramValue = paramValues[0];
            if (paramValue.length() == 0)
               out.println("<i>No Value</i>");
               else
               out.println(paramValue);
         } else {
            // Read multiple valued data
            out.println("<ul>");

            for(int i = 0; i < paramValues.length; i++) {
               out.println("<li>" + paramValues[i]);
            }
            out.println("</ul>");
         }
      }
      out.println("</tr>\n</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Maintenant, essayez le servlet ci-dessus avec la forme suivante -

<html>
   <body>
      <form action = "ReadParams" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked" /> Maths
         <input type = "checkbox" name = "physics"  /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked" /> Chem
         <input type = "submit" value = "Select Subject" />
      </form>
   </body>
</html>

Maintenant, appeler le servlet en utilisant le formulaire ci-dessus générerait le résultat suivant -

Reading All Form Parameters

Param Name Param Value(s)
maths on
chemistry on

Vous pouvez essayer le servlet ci-dessus pour lire les données de tout autre formulaire ayant d'autres objets comme une zone de texte, un bouton radio ou une zone de liste déroulante, etc.