Servlet - Dati modulo

Devi esserti imbattuto in molte situazioni in cui devi passare alcune informazioni dal tuo browser al server web e, infine, al tuo programma di backend. Il browser utilizza due metodi per passare queste informazioni al server web. Questi metodi sono il metodo GET e il metodo POST.

Metodo GET

Il metodo GET invia le informazioni utente codificate aggiunte alla richiesta della pagina. La pagina e le informazioni codificate sono separate dal? (punto interrogativo) come segue:

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

Il metodo GET è il metodo predefinito per passare le informazioni dal browser al server web e produce una lunga stringa che appare nella casella Posizione: del browser. Non utilizzare mai il metodo GET se si dispone di password o altre informazioni riservate da passare al server. Il metodo GET ha limiti di dimensione: è possibile utilizzare solo 1024 caratteri in una stringa di richiesta.

Queste informazioni vengono passate utilizzando l'intestazione QUERY_STRING e saranno accessibili tramite la variabile d'ambiente QUERY_STRING e Servlet gestisce questo tipo di richieste utilizzando doGet() metodo.

Metodo POST

Un metodo generalmente più affidabile per passare informazioni a un programma di backend è il metodo POST. Questo impacchetta le informazioni esattamente allo stesso modo del metodo GET, ma invece di inviarle come stringa di testo dopo un? (punto interrogativo) nell'URL lo invia come messaggio separato. Questo messaggio arriva al programma di backend sotto forma di input standard che puoi analizzare e utilizzare per la tua elaborazione. Servlet gestisce questo tipo di richieste utilizzandodoPost() metodo.

Lettura dei dati del modulo utilizzando Servlet

I servlet gestiscono automaticamente l'analisi dei dati dei moduli utilizzando i seguenti metodi a seconda della situazione:

  • getParameter() - Chiami il metodo request.getParameter () per ottenere il valore di un parametro del form.

  • getParameterValues() - Chiama questo metodo se il parametro appare più di una volta e restituisce più valori, ad esempio la casella di controllo.

  • getParameterNames() - Chiama questo metodo se desideri un elenco completo di tutti i parametri nella richiesta corrente.

Esempio di metodo GET utilizzando URL

Ecco un semplice URL che passerà due valori al programma HelloForm utilizzando il metodo GET.

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

Di seguito è riportato il file HelloForm.javaprogramma servlet per gestire l'input fornito dal browser web. UseremogetParameter() metodo che rende molto facile accedere alle informazioni trasmesse -

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

Supponendo che il tuo ambiente sia impostato correttamente, compila HelloForm.java come segue:

$ javac HelloForm.java

Se tutto va bene, la compilazione di cui sopra produrrebbe HelloForm.classfile. Successivamente dovresti copiare questo file di classe in <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes e creare le seguenti voci inweb.xml file situato in <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>

Ora digita http: // localhost: 8080 / HelloForm? First_name = ZARA & last_name = ALI nella casella Posizione: del tuo browser e assicurati di aver già avviato il server Tomcat, prima di eseguire il comando sopra nel browser. Questo genererebbe il seguente risultato:

Using GET Method to Read Form Data

  • First Name: ZARA
  • Last Name: ALI

Esempio di metodo GET utilizzando il modulo

Ecco un semplice esempio che trasmette due valori utilizzando HTML FORM e il pulsante di invio. Useremo lo stesso servlet HelloForm per gestire questo input.

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

Conserva questo HTML in un file Hello.htm e mettilo nella directory <Tomcat-installationdirectory> / webapps / ROOT. Quando accederai a http: // localhost: 8080 / Hello.htm , ecco l'output effettivo del modulo precedente.

Prova a inserire Nome e Cognome, quindi fai clic sul pulsante Invia per vedere il risultato sul tuo computer locale su cui è in esecuzione Tomcat. Sulla base dell'input fornito, genererà un risultato simile a quello menzionato nell'esempio precedente.

Esempio di metodo POST utilizzando il modulo

Facciamo piccole modifiche al servlet sopra, in modo che possa gestire i metodi GET e POST. Sotto èHelloForm.java programma servlet per gestire l'input fornito dal browser web utilizzando i metodi GET o 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);
   }
}

Ora compila e distribuisci il servlet sopra e testalo usando Hello.htm con il metodo POST come segue:

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

Ecco l'output effettivo del modulo sopra, prova a inserire Nome e Cognome, quindi fai clic sul pulsante Invia per vedere il risultato sul tuo computer locale su cui è in esecuzione Tomcat.

Sulla base dell'input fornito, genererebbe un risultato simile a quello menzionato negli esempi precedenti.

Passaggio dei dati della casella di controllo al programma servlet

Le caselle di controllo vengono utilizzate quando è necessario selezionare più di un'opzione.

Ecco un esempio di codice HTML, CheckBox.htm, per un modulo con due caselle di controllo

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

Il risultato di questo codice è la seguente forma

Di seguito è riportato il programma servlet CheckBox.java per gestire l'input fornito dal browser Web per il pulsante della casella di controllo.

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

Per l'esempio sopra, verrà visualizzato il seguente risultato:

Reading Checkbox Data

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

Lettura di tutti i parametri del modulo

Di seguito è riportato l'esempio generico che utilizza getParameterNames()metodo di HttpServletRequest per leggere tutti i parametri del modulo disponibili. Questo metodo restituisce un'enumerazione che contiene i nomi dei parametri in un ordine non specificato

Una volta che abbiamo un'enumerazione, possiamo eseguire il ciclo dell'enumerazione in modo standard, utilizzando il metodo hasMoreElements () per determinare quando fermarsi e utilizzando il metodo nextElement () per ottenere ogni nome di parametro.

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

Ora, prova il servlet sopra con il seguente modulo:

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

Ora la chiamata del servlet utilizzando il modulo sopra genererebbe il seguente risultato:

Reading All Form Parameters

Param Name Param Value(s)
maths on
chemistry on

Puoi provare il servlet sopra per leggere i dati di qualsiasi altro modulo con altri oggetti come casella di testo, pulsante di opzione o casella a discesa ecc.