JSP - Procesamiento de formularios

En este capítulo, analizaremos el procesamiento de formularios en JSP. Debe haberse encontrado con muchas situaciones en las que necesita pasar cierta información de su navegador al servidor web y, en última instancia, a su programa de backend. El navegador utiliza dos métodos para pasar esta información al servidor web. Estos métodos son el método GET y el método POST.

Los métodos en el procesamiento de formularios

Analicemos ahora los métodos en Procesamiento de formularios.

Método GET

El método GET envía la información de usuario codificada adjunta a la solicitud de página. La página y la información codificada están separadas por? personaje de la siguiente manera:

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

El método GET es el método predeterminado para pasar información del navegador al servidor web y produce una cadena larga que aparece en el Location:box. Se recomienda no utilizar el método GET. si tiene contraseña u otra información confidencial para pasar al servidor.

El método GET tiene una limitación de tamaño: only 1024 characters can be in a request string.

Esta información se pasa usando QUERY_STRING header y será accesible a través de la variable de entorno QUERY_STRING que se puede manejar usando getQueryString() y getParameter() métodos de objeto de solicitud.

Método POST

Un método generalmente más confiable para pasar información a un programa de backend es el método POST.

Este método empaqueta la información exactamente de la misma manera que el método GET, pero en lugar de enviarla como una cadena de texto después de? en la URL lo envía como un mensaje separado. Este mensaje llega al programa backend en forma de entrada estándar que puede analizar y utilizar para su procesamiento.

JSP maneja este tipo de solicitudes usando getParameter() método para leer parámetros simples y getInputStream() método para leer el flujo de datos binarios provenientes del cliente.

Leer datos de formularios usando JSP

JSP maneja el análisis de datos de formularios automáticamente usando los siguientes métodos dependiendo de la situación:

  • getParameter() - tu llamas request.getParameter() método para obtener el valor de un parámetro de formulario.

  • getParameterValues() - Llame a este método si el parámetro aparece más de una vez y devuelve varios valores, por ejemplo, casilla de verificación.

  • getParameterNames() - Llame a este método si desea una lista completa de todos los parámetros en la solicitud actual.

  • getInputStream() - Llame a este método para leer el flujo de datos binarios provenientes del cliente.

Ejemplo de método GET usando URL

La siguiente URL pasará dos valores al programa HelloForm utilizando el método GET.

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

abajo esta el main.jspPrograma JSP para manejar la entrada proporcionada por el navegador web. Vamos a utilizar elgetParameter() método que hace que sea muy fácil acceder a la información transmitida -

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

Ahora escribe http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI en tu navegador Location:box. Esto generará el siguiente resultado:

Uso del método GET para leer datos de formularios

  • First Name: ZARA

  • Last Name: ALI

Ejemplo de método GET usando formulario

A continuación se muestra un ejemplo que pasa dos valores utilizando el FORMULARIO HTML y el botón de envío. Vamos a usar el mismo JSP main.jsp para manejar esta entrada.

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

Mantenga este HTML en un archivo Hello.htm y colóquelo en <Tomcat-installation-directory>/webapps/ROOT directory. Cuando accederíashttp://localhost:8080/Hello.htm, recibirá el siguiente resultado.

<p> Intente ingresar el Nombre y el Apellido y luego haga clic en el botón Enviar para ver el resultado en su máquina local donde se está ejecutando Tomcat. Según la entrada proporcionada, generará un resultado similar al mencionado en el ejemplo anterior.

Ejemplo de método POST usando formulario

Hagamos una pequeña modificación en el JSP anterior para manejar tanto el método GET como el POST. abajo esta elmain.jsp Programa JSP para manejar la entrada proporcionada por el navegador web utilizando los métodos GET o POST.

De hecho, no hay ningún cambio en el JSP anterior porque se cambia la única forma de pasar parámetros y no se pasan datos binarios al programa JSP. Los conceptos relacionados con el manejo de archivos se explicarán en un capítulo separado donde necesitamos leer el flujo de datos binarios.

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

A continuación se muestra el contenido de la Hello.htm archivo -

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

Ahora mantengamos main.jsp y hola.htm en <Tomcat-installationdirectory>/webapps/ROOT directory. Cuando accedeshttp://localhost:8080/Hello.htm, recibirá el siguiente resultado.

Intente ingresar el nombre y el apellido y luego haga clic en el botón enviar para ver el resultado en su máquina local donde se está ejecutando tomcat.

Según la información proporcionada, recibirá resultados similares a los de los ejemplos anteriores.

Pasar datos de casilla de verificación al programa JSP

Las casillas de verificación se utilizan cuando se requiere seleccionar más de una opción.

A continuación se muestra un ejemplo HTML code, CheckBox.htm, para un formulario con dos casillas de verificación.

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

El código anterior generará el siguiente resultado:

A continuación se muestra el programa JSP main.jsp para manejar la entrada proporcionada por el navegador web para el botón de casilla de verificación.

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

El programa anterior generará el siguiente resultado:

Reading Checkbox Data

  • Maths Flag :: on

  • Physics Flag:: null

  • Chemistry Flag:: on

Leer todos los parámetros de formulario

A continuación se muestra un ejemplo genérico que usa getParameterNames()método de HttpServletRequest para leer todos los parámetros de formulario disponibles. Este método devuelve una enumeración que contiene los nombres de los parámetros en un orden no especificado.

Una vez que tenemos una enumeración, podemos recorrer la enumeración de la manera estándar, usando el hasMoreElements() método para determinar cuándo detenerse y usar el nextElement() método para obtener el nombre de cada parámetro.

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

A continuación se muestra el contenido de la 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>

Ahora intente llamar a JSP usando el Hello.htm anterior; esto generaría un resultado similar al siguiente en función de la entrada proporcionada:

Leer todos los parámetros de formulario

Nombre de parámetro Valor (es) de parámetro
matemáticas en
química en

Puede probar el JSP anterior para leer los datos de cualquier otro formulario que tenga otros objetos como cuadro de texto, botón de opción o menú desplegable, etc.