Servlets - Formulardaten

Sie müssen auf viele Situationen gestoßen sein, in denen Sie einige Informationen von Ihrem Browser an den Webserver und letztendlich an Ihr Backend-Programm übergeben müssen. Der Browser verwendet zwei Methoden, um diese Informationen an den Webserver zu übergeben. Diese Methoden sind GET-Methode und POST-Methode.

GET-Methode

Die GET-Methode sendet die codierten Benutzerinformationen, die an die Seitenanforderung angehängt sind. Die Seite und die verschlüsselten Informationen werden durch die getrennt? (Fragezeichen) Symbol wie folgt -

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

Die GET-Methode ist die Standardmethode zum Übergeben von Informationen vom Browser an den Webserver und erzeugt eine lange Zeichenfolge, die im Feld Speicherort: Ihres Browsers angezeigt wird. Verwenden Sie niemals die GET-Methode, wenn Sie ein Kennwort oder andere vertrauliche Informationen haben, die an den Server übergeben werden sollen. Die GET-Methode hat eine Größenbeschränkung: In einer Anforderungszeichenfolge können nur 1024 Zeichen verwendet werden.

Diese Informationen werden mithilfe des QUERY_STRING-Headers übergeben und sind über die Umgebungsvariable QUERY_STRING zugänglich. Servlet verarbeitet diese Art von Anforderungen mithilfe von doGet() Methode.

POST-Methode

Eine allgemein zuverlässigere Methode zum Übergeben von Informationen an ein Backend-Programm ist die POST-Methode. Dadurch werden die Informationen genauso verpackt wie bei der GET-Methode, jedoch nicht als Textzeichenfolge nach einem? (Fragezeichen) in der URL, die es als separate Nachricht sendet. Diese Nachricht wird in Form der Standardeingabe an das Backend-Programm gesendet, die Sie analysieren und für Ihre Verarbeitung verwenden können. Servlet verarbeitet diese Art von Anforderungen mitdoPost() Methode.

Lesen von Formulardaten mit Servlet

Servlets verarbeiten die Analyse von Formulardaten je nach Situation automatisch mit den folgenden Methoden:

  • getParameter() - Sie rufen die Methode request.getParameter () auf, um den Wert eines Formularparameters abzurufen.

  • getParameterValues() - Rufen Sie diese Methode auf, wenn der Parameter mehrmals angezeigt wird und mehrere Werte zurückgibt, z. B. das Kontrollkästchen.

  • getParameterNames() - Rufen Sie diese Methode auf, wenn Sie eine vollständige Liste aller Parameter in der aktuellen Anforderung wünschen.

Beispiel für eine GET-Methode unter Verwendung einer URL

Hier ist eine einfache URL, die mit der GET-Methode zwei Werte an das HelloForm-Programm übergibt.

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

Unten ist die angegeben HelloForm.javaServlet-Programm für Eingaben vom Webbrowser. Wir werden verwendengetParameter() Methode, die den Zugriff auf übergebene Informationen sehr einfach macht -

// 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>"
      );
   }
}

Angenommen, Ihre Umgebung ist ordnungsgemäß eingerichtet, kompilieren Sie HelloForm.java wie folgt:

$ javac HelloForm.java

Wenn alles gut geht, würde die obige Kompilierung ergeben HelloForm.classDatei. Als nächstes müssten Sie diese Klassendatei in <Tomcat-Installationsverzeichnis> / webapps / ROOT / WEB-INF / classes kopieren und die folgenden Einträge in erstellenweb.xml Datei im Verzeichnis <Tomcat-Installationsverzeichnis> / 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>

Geben Sie nun http: // localhost: 8080 / HelloForm? First_name = ZARA & last_name = ALI in das Feld Location: Ihres Browsers ein und stellen Sie sicher, dass Sie den Tomcat-Server bereits gestartet haben, bevor Sie den obigen Befehl im Browser auslösen . Dies würde folgendes Ergebnis erzeugen -

Using GET Method to Read Form Data

  • First Name: ZARA
  • Last Name: ALI

Beispiel für eine GET-Methode mit Formular

Hier ist ein einfaches Beispiel, das zwei Werte mit HTML FORM und der Schaltfläche "Senden" übergibt. Wir werden dasselbe Servlet HelloForm verwenden, um diese Eingabe zu verarbeiten.

<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>

Bewahren Sie diesen HTML-Code in einer Datei Hello.htm auf und legen Sie ihn im Verzeichnis <Tomcat-Installationsverzeichnis> / webapps / ROOT ab. Wenn Sie auf http: // localhost: 8080 / Hello.htm zugreifen würden , sehen Sie hier die tatsächliche Ausgabe des obigen Formulars.

Versuchen Sie, Vor- und Nachnamen einzugeben, und klicken Sie dann auf die Schaltfläche Senden, um das Ergebnis auf Ihrem lokalen Computer anzuzeigen, auf dem Tomcat ausgeführt wird. Basierend auf der bereitgestellten Eingabe wird ein ähnliches Ergebnis wie im obigen Beispiel generiert.

Beispiel für eine POST-Methode mit Formular

Lassen Sie uns das obige Servlet nur geringfügig ändern, damit es sowohl GET- als auch POST-Methoden verarbeiten kann. Drunter istHelloForm.java Servlet-Programm zur Verarbeitung von Eingaben, die vom Webbrowser mithilfe von GET- oder POST-Methoden gegeben werden.

// 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);
   }
}

Kompilieren und implementieren Sie nun das obige Servlet und testen Sie es mit Hello.htm mit der POST-Methode wie folgt:

<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>

Hier ist die tatsächliche Ausgabe des obigen Formulars. Versuchen Sie, Vor- und Nachnamen einzugeben, und klicken Sie dann auf die Schaltfläche Senden, um das Ergebnis auf Ihrem lokalen Computer anzuzeigen, auf dem Tomcat ausgeführt wird.

Basierend auf der bereitgestellten Eingabe würde es ein ähnliches Ergebnis erzeugen, wie in den obigen Beispielen erwähnt.

Übergeben von Checkbox-Daten an das Servlet-Programm

Kontrollkästchen werden verwendet, wenn mehr als eine Option ausgewählt werden muss.

Hier ist der HTML-Beispielcode CheckBox.htm für ein Formular mit zwei Kontrollkästchen

<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>

Das Ergebnis dieses Codes ist das folgende Formular

Im Folgenden finden Sie das Servlet-Programm CheckBox.java, mit dem Eingaben des Webbrowsers für die Schaltfläche zum Aktivieren des Kontrollkästchens verarbeitet werden können.

// 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);
   }
}

Für das obige Beispiel würde folgendes Ergebnis angezeigt:

Reading Checkbox Data

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

Alle Formularparameter lesen

Es folgt das allgemeine Beispiel, das verwendet wird getParameterNames()Methode von HttpServletRequest zum Lesen aller verfügbaren Formularparameter. Diese Methode gibt eine Aufzählung zurück, die die Parameternamen in einer nicht angegebenen Reihenfolge enthält

Sobald wir eine Aufzählung haben, können wir die Aufzählung auf standardmäßige Weise durchlaufen , indem wir die hasMoreElements () -Methode verwenden, um zu bestimmen, wann gestoppt werden soll, und die nextElement () -Methode verwenden, um jeden Parameternamen abzurufen .

// 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);
   }
}

Versuchen Sie nun das obige Servlet mit dem folgenden Formular:

<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>

Wenn Sie nun ein Servlet mit dem obigen Formular aufrufen, wird das folgende Ergebnis generiert:

Reading All Form Parameters

Param Name Param Value(s)
maths on
chemistry on

Sie können das obige Servlet versuchen, um die Daten eines anderen Formulars mit anderen Objekten wie Textfeld, Optionsfeld oder Dropdown-Feld usw. zu lesen.