JSP - Elaborazione moduli

In questo capitolo, discuteremo dell'elaborazione dei moduli in JSP. 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.

I metodi nell'elaborazione dei moduli

Parliamo ora dei metodi in Form Processing.

Metodo GET

Il metodo GET invia le informazioni utente codificate aggiunte alla richiesta della pagina. La pagina e le informazioni codificate sono separate dal? carattere 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 nel tuo browser Location:box. Si consiglia di non utilizzare il metodo GET. se si dispone di password o altre informazioni sensibili da passare al server.

Il metodo GET ha limiti di dimensione: only 1024 characters can be in a request string.

Queste informazioni vengono passate utilizzando QUERY_STRING header e sarà accessibile tramite la variabile d'ambiente QUERY_STRING che può essere gestita utilizzando getQueryString() e getParameter() metodi di richiesta oggetto.

Metodo POST

Un metodo generalmente più affidabile per passare le informazioni a un programma di backend è il metodo POST.

Questo metodo impacchetta le informazioni esattamente allo stesso modo del metodo GET, ma invece di inviarle come stringa di testo dopo un? 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.

JSP gestisce questo tipo di richieste utilizzando getParameter() metodo per leggere parametri semplici e getInputStream() metodo per leggere il flusso di dati binari proveniente dal client.

Lettura dei dati del modulo utilizzando JSP

JSP gestisce automaticamente l'analisi dei dati del modulo utilizzando i seguenti metodi a seconda della situazione:

  • getParameter() - Chiama tu request.getParameter() metodo per ottenere il valore di un parametro del modulo.

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

  • getInputStream() - Chiama questo metodo per leggere il flusso di dati binari proveniente dal client.

Esempio di metodo GET utilizzando URL

Il seguente URL passerà due valori al programma HelloForm utilizzando il metodo GET.

http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI

Di seguito è riportato il file main.jspProgramma JSP per gestire l'input fornito dal browser web. Useremo il filegetParameter() metodo che rende molto facile accedere alle informazioni passate -

<html>
   <head>
      <title>Using GET Method to Read Form Data</title>
   </head>
   
   <body>
      <h1>Using GET Method to Read Form Data</h1>
      <ul>
         <li><p><b>First Name:</b>
            <%= request.getParameter("first_name")%>
         </p></li>
         <li><p><b>Last  Name:</b>
            <%= request.getParameter("last_name")%>
         </p></li>
      </ul>
   
   </body>
</html>

Ora scrivi http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI nel tuo browser Location:box. Questo genererà il seguente risultato:

Utilizzo del metodo GET per leggere i dati del modulo

  • First Name: ZARA

  • Last Name: ALI

Esempio di metodo GET utilizzando il modulo

Di seguito è riportato un esempio che trasmette due valori utilizzando il FORM HTML e il pulsante di invio. Useremo lo stesso JSP main.jsp per gestire questo input.

<html>
   <body>
      
      <form action = "main.jsp" 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 inseriscilo <Tomcat-installation-directory>/webapps/ROOT directory. Quando avresti accessohttp://localhost:8080/Hello.htm, riceverai il seguente output.

<p> Prova a inserire il nome e il cognome, quindi fai clic sul pulsante di invio 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 una piccola modifica nel JSP sopra per gestire sia il metodo GET che il metodo POST. Di seguito è riportato il filemain.jsp Programma JSP per gestire l'input fornito dal browser web utilizzando i metodi GET o POST.

Infatti non vi è alcun cambiamento nel JSP di cui sopra perché l'unico modo per passare i parametri è cambiato e nessun dato binario viene passato al programma JSP. I concetti relativi alla gestione dei file verranno spiegati in un capitolo separato in cui è necessario leggere il flusso di dati binario.

<html>
   <head>
      <title>Using GET and POST Method to Read Form Data</title>
   </head>
   
   <body>
      <center>
      <h1>Using POST Method to Read Form Data</h1>
      
      <ul>
         <li><p><b>First Name:</b>
            <%= request.getParameter("first_name")%>
         </p></li>
         <li><p><b>Last  Name:</b>
            <%= request.getParameter("last_name")%>
         </p></li>
      </ul>
   
   </body>
</html>

Di seguito è riportato il contenuto del file Hello.htm file -

<html>
   <body>
      
      <form action = "main.jsp" 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>

Cerchiamo ora di mantenere main.jsp e ciao.htm in <Tomcat-installationdirectory>/webapps/ROOT directory. Quando accedihttp://localhost:8080/Hello.htm, riceverai il seguente output.

Prova a inserire il nome e il cognome, quindi fai clic sul pulsante di invio per vedere il risultato sul tuo computer locale su cui è in esecuzione tomcat.

In base all'input fornito, riceverai risultati simili a quelli degli esempi precedenti.

Passaggio dei dati della casella di controllo al programma JSP

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

Di seguito è riportato un esempio HTML code, CheckBox.htm, per un modulo con due caselle di controllo.

<html>
   <body>
      
      <form action = "main.jsp" 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 codice sopra genererà il seguente risultato:

Di seguito è riportato il programma JSP main.jsp per gestire l'input fornito dal browser Web per il pulsante della casella di controllo.

<html>
   <head>
      <title>Reading Checkbox Data</title>
   </head>
   
   <body>
      <h1>Reading Checkbox Data</h1>
      
      <ul>
         <li><p><b>Maths Flag:</b>
            <%= request.getParameter("maths")%>
         </p></li>
         <li><p><b>Physics Flag:</b>
            <%= request.getParameter("physics")%>
         </p></li>
         <li><p><b>Chemistry Flag:</b>
            <%= request.getParameter("chemistry")%>
         </p></li>
      </ul>
   
   </body>
</html>

Il programma sopra genererà 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 un 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 nel modo standard, utilizzando il hasMoreElements() metodo per determinare quando interrompere e utilizzare il nextElement() metodo per ottenere il nome di ogni parametro.

<%@ page import = "java.io.*,java.util.*" %>

<html>
   <head>
      <title>HTTP Header Request Example</title>
   </head>

   <body>
      <center>
         <h2>HTTP Header Request Example</h2>
         <table width = "100%" border = "1" align = "center">
            <tr bgcolor = "#949494">
               <th>Param Name</th>
               <th>Param Value(s)</th>
            </tr>
            <%
               Enumeration paramNames = request.getParameterNames();
               while(paramNames.hasMoreElements()) {
                  String paramName = (String)paramNames.nextElement();
                  out.print("<tr><td>" + paramName + "</td>\n");
                  String paramValue = request.getHeader(paramName);
                  out.println("<td> " + paramValue + "</td></tr>\n");
               }
            %>
         </table>
      </center>
   
   </body>
</html>

Di seguito è riportato il contenuto del file Hello.htm -

<html>
   <body>
      
      <form action = "main.jsp" 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 prova a chiamare JSP usando Hello.htm sopra; questo genererebbe un risultato simile al seguente in base all'input fornito -

Lettura di tutti i parametri del modulo

Nome parametro Param Value (s)
matematica sopra
chimica sopra

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