Servlets - Datos de formulario
Debe haberse encontrado con muchas situaciones en las que necesita pasar 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.
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? (signo de interrogación) símbolo 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 cuadro Ubicación: de su navegador. Nunca use el método GET si tiene una contraseña u otra información confidencial para pasar al servidor. El método GET tiene una limitación de tamaño: solo se pueden usar 1024 caracteres en una cadena de solicitud.
Esta información se pasa usando el encabezado QUERY_STRING y será accesible a través de la variable de entorno QUERY_STRING y Servlet maneja este tipo de solicitudes usando doGet() método.
Método POST
Un método generalmente más confiable para pasar información a un programa de backend es el método POST. Esto 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? (signo de interrogación) 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. Servlet maneja este tipo de solicitudes usandodoPost() método.
Lectura de datos de formulario usando Servlet
Servlets maneja el análisis de datos de formularios automáticamente usando los siguientes métodos dependiendo de la situación:
getParameter() - Llamas al método request.getParameter () 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.
Ejemplo de método GET usando URL
Aquí hay una URL simple que pasará dos valores al programa HelloForm usando el método GET.
http://localhost:8080/HelloForm?first_name = ZARA&last_name = ALIA continuación se muestra el HelloForm.javaprograma servlet para manejar la entrada proporcionada por el navegador web. Vamos a usargetParameter() método que facilita el acceso a la información transmitida -
// 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>"
);
}
}
Suponiendo que su entorno esté configurado correctamente, compile HelloForm.java de la siguiente manera:
$ javac HelloForm.java
Si todo va bien, la compilación anterior produciría HelloForm.classarchivo. A continuación, tendría que copiar este archivo de clase en <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes y crear las siguientes entradas enweb.xml archivo ubicado en <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>
Ahora escriba http: // localhost: 8080 / HelloForm? First_name = ZARA & last_name = ALI en el cuadro Ubicación: de su navegador y asegúrese de haber iniciado el servidor Tomcat, antes de ejecutar el comando anterior en el navegador. Esto generaría el siguiente resultado:
Using GET Method to Read Form Data
- First Name: ZARA
- Last Name: ALI
Ejemplo de método GET usando formulario
Aquí hay un ejemplo simple que pasa dos valores usando el FORMULARIO HTML y el botón de envío. Vamos a utilizar el mismo Servlet HelloForm para manejar esta entrada.
<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>
Guarde este HTML en un archivo Hello.htm y colóquelo en el directorio <Tomcat-installationdirectory> / webapps / ROOT. Cuando acceda a http: // localhost: 8080 / Hello.htm , aquí está el resultado real del formulario anterior.
Intente ingresar el nombre y 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 servlet anterior, para que pueda manejar los métodos GET y POST. A continuación esHelloForm.java programa servlet para manejar la entrada proporcionada por el navegador web usando métodos 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);
}
}
Ahora compile e implemente el Servlet anterior y pruébelo usando Hello.htm con el método POST de la siguiente manera:
<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>
Aquí está el resultado real del formulario anterior, intente ingresar el nombre y 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, generaría un resultado similar al mencionado en los ejemplos anteriores.
Pasar datos de casilla de verificación al programa Servlet
Las casillas de verificación se utilizan cuando se requiere seleccionar más de una opción.
Aquí hay un ejemplo de código HTML, CheckBox.htm, para un formulario con dos casillas de verificación
<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>
El resultado de este código es el siguiente formulario
A continuación se muestra el programa servlet CheckBox.java para manejar la entrada proporcionada por el navegador web para el botón de casilla de verificación.
// 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);
}
}
Para el ejemplo anterior, mostraría 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 el 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 manera estándar usando el método hasMoreElements () para determinar cuándo parar y usando el método nextElement () para obtener el nombre de cada parámetro.
// 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);
}
}
Ahora, pruebe el servlet anterior con el siguiente formulario:
<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>
Ahora llamar al servlet usando el formulario anterior generaría el siguiente resultado:
Reading All Form Parameters
Param Name
Param Value(s)
maths
on
chemistry
on
Puede probar el servlet anterior para leer los datos de cualquier otro formulario que tenga otros objetos como cuadro de texto, botón de radio o cuadro desplegable, etc.