Los servlets son los programas Java que se ejecutan en el servidor web o en el servidor de aplicaciones habilitado para Java. Se utilizan para manejar la solicitud obtenida del servidor web, procesar la solicitud, producir la respuesta y luego enviar una respuesta al servidor web. Las propiedades de los servlets son las siguientes:
- Los servlets funcionan del lado del servidor.
- Los servlets son capaces de manejar requests complejas obtenidas del servidor web.
Entonces, ¿qué quiere decir con ‘ manejar los datos del cliente ‘?
Nos debemos haber encontrado con muchas situaciones en las que necesitamos rellenar un formulario con nuestros datos para acceder a alguna aplicación. En esta situación, como desarrollador, debe manejar esos datos o información para pasar del navegador al servidor web/de aplicaciones y, finalmente, a su programa backend para procesar esa solicitud. En este capítulo, aprenderemos cómo manejar esta forma de datos usando Servlets.
Clase HttpServlet
Java proporciona la clase HttpServlet que amplía la clase GenericServlet para procesar requests/respuestas específicas de HTTP para un sitio web. Proporciona métodos específicos de HTTP como doGet(), doPost(), doPut(), doDelete(), etc. Si estamos ampliando el HttpServlet en nuestra clase, debemos anular al menos uno de estos métodos para procesar la solicitud y enviar el respuesta. Necesitamos usar el método doGet() o doPost() en la clase de servlet para obtener la información del navegador según el método especificado en el formulario.
Tipo de método GET y método doGet()
El método doGet() en los servlets se usa para procesar las requests HTTP GET. Entonces, básicamente, se debe usar el método HTTP GET para obtener los datos del servidor al navegador. Aunque en algunas requests, el método GET también se usa para enviar datos desde el navegador al servidor. En este caso, debe comprender los puntos a continuación sobre cómo funcionará el método GET.
- Los datos que se envían al servidor serán visibles en la URL usando parámetros de consulta como este » http://localhost:8080/HelloServlet/hello?myParam=myValue «.
- Por lo tanto, si está enviando información confidencial, como contraseñas, no debe usar el método GET, ya que los datos ingresados pueden verse claramente en la URL del navegador.
Tipo de método POST y método doPost()
El método doPost() en los servlets se utiliza para procesar las requests HTTP POST. Se utiliza para enviar los datos del navegador al servidor para su procesamiento. Los datos enviados con el tipo de método POST se envían en el cuerpo del mensaje, por lo que son seguros y no se pueden ver en la URL. Y no hay límite en los datos que se pueden enviar a través del método POST. Idealmente, necesitamos usar el método POST para enviar los datos del formulario al servidor web. Entonces, usaremos el método doPost() en este ejemplo. Y aprenderemos cómo manejar algunos de los datos de campos HTML comunes, como el campo de texto, la casilla de verificación, el botón de radio, el menú desplegable , etc., valores en el servlet.
Para lograr esto, Java proporciona una interfaz ServletRequest .
HttpServletRequest(I):
- La interfaz HttpServletRequest amplía la interfaz ServletRequest para proporcionar información de solicitud específica de Http para servlets.
- El contenedor de servlet crea un objeto HttpServletRequest y lo pasa como argumento a los métodos de servicio del servlet: doPost(), doGet(), etc.
- El objeto proporciona datos como el nombre y los valores del parámetro, los atributos y un flujo de entrada. Y tiene varios métodos para trabajar con los datos del cliente.
- En este ejemplo, usaremos getParameter() y getParameterValues() para leer los valores de los campos del formulario.
método getParameter():
- El método devuelve el valor de un campo/parámetro de la solicitud que se especifica mediante el nombre dado, como una string. Si el nombre del parámetro especificado no existe, devuelve nulo.
- Este método debe usarse en el parámetro que tiene un solo valor. Si hay varios valores, solo devuelve el primer valor.
Sintaxis:
Java
// String type specifying the parameter // name of which the value to be returned as String java.lang.String getParameter(java.lang.String name)
método getParameterValues():
El método devuelve una array de objetos String que contienen todos los valores del campo/parámetro dado de la solicitud. Si el nombre del parámetro especificado no existe, devuelve nulo.
Sintaxis:
Java
// String type specifying the parameter name // of which the values to be returned in array java.lang.String[] getParameterValues(java.lang.String name)
Ejemplo
Crearemos un formulario simple para obtener los detalles del cliente como se muestra a continuación,
Pasos para crear la aplicación:
- Cree un HTML para tomar los datos de entrada del cliente.
- Cree un servlet para manejar los datos, procesar la solicitud y generar la respuesta.
- Ejecute la aplicación.
Crear página Details.html:
HTML
<!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>User Details</title> </head> <body > <h3>Fill in the Form</h3> <form action="FormData" method="post"> <table> <tr> <td>Full Name:</td> <td><input type="text" name="name" /></td> </tr> <tr> <td>Phone Number:</td> <td><input type="text" name="phone" /></td> </tr> <tr> <td>Gender:</td> <td><input type="radio" name="gender" value="male" />Male <input type="radio" name="gender" value="female" />Female</td> </tr> <tr> <td>Select Programming Languages to learn:</td> <td><input type="checkbox" name="language" value="java" />Java <input type="checkbox" name="language" value="python" />Python <input type="checkbox" name="language" value="sql" />SQL <input type="checkbox" name="language" value="php" />PHP</td> </tr> <tr> <td>Select Course duration:</td> <td><select name="duration"> <option value="3months">3 Months</option> <option value="6months">6 Months</option> <option value="9months">9 Months</option></select></td> </tr> <tr> <td>Anything else you want to share:</td> <td><textarea rows="5" cols="40" name="comment"></textarea></td> </tr> </table> <input type="submit" value="Submit Details"> </form> </body> </html>
- Cree una página de formulario usando etiquetas HTML comunes.
- Para mostrar los campos del formulario de forma estructurada, estamos usando la etiqueta <table>.
- Tenemos ‘ Nombre completo’ y ‘Número de teléfono’ como campos de texto de entrada, ‘ Género’ como botón de opción, ‘ Lenguajes de programación’ como casilla de verificación, ‘ Duración del curso’ en valores desplegables y área de texto para ‘ Comentarios ‘.
- Mencionamos la acción de formulario para ‘ FormData ‘ y el método para ‘ post ‘. Por lo tanto, cuando se envía el formulario, la página se asignará a la URL – Servlet específico ‘/ FormData ‘ y ejecutará el método ‘ doPost() ‘.
Cree el servlet FormDataHandle.java:
Java
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // Servlet implementation class FormDataHandle // Annotation to map the Servlet URL @WebServlet("/FormData") public class FormDataHandle extends HttpServlet { private static final long serialVersionUID = 1L; // Auto-generated constructor stub public FormDataHandle() { super(); } // HttpServlet doPost(HttpServletRequest request, HttpServletResponse response) method protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Get the values from the request using 'getParameter' String name = request.getParameter("name"); String phNum = request.getParameter("phone"); String gender = request.getParameter("gender"); // To get all the values selected for // programming language, use 'getParameterValues' String progLang[] = request.getParameterValues("language"); // Iterate through the String array to // store the selected values in form of String String langSelect = ""; if(progLang!=null){ for(int i=0;i<progLang.length;i++){ langSelect= langSelect + progLang[i]+ ", "; } } String courseDur = request.getParameter("duration"); String comment = request.getParameter("comment"); // set the content type of response to 'text/html' response.setContentType("text/html"); // Get the PrintWriter object to write // the response to the text-output stream PrintWriter out = response.getWriter(); // Print the data out.print("<html><body>"); out.print("<h3>Details Entered</h3><br/>"); out.print("Full Name: "+ name + "<br/>"); out.print("Phone Number: "+ phNum +"<br/>"); out.print("Gender: "+ gender +"<br/>"); out.print("Programming languages selected: "+ langSelect +"<br/>"); out.print("Duration of course: "+ courseDur+"<br/>"); out.print("Comments: "+ comment); out.print("</body></html>"); } }
- En lugar de usar web.xml para asignar las requests de URL a los servlets, usamos la anotación ‘ @WebServlet() ‘ para asignar la URL al servlet.
- Una vez que se envía la página del formulario, se invocará el método ‘ doPost() ‘ de la clase Servlet.
- Los valores de campo se envían al servlet en forma de parámetros en la solicitud de servlet HTTP. Entonces, podemos obtener esos valores de parámetros usando los métodos ‘ getParameter() ‘ y ‘ getParameterValues() ‘ en el objeto de solicitud.
Explicación:
Como aprendimos, para obtener el valor del campo que tiene un solo valor, se usa ‘ getParameter() ‘. Así que para los campos,
- Primer nombre
- Número de teléfono
- Género
- Duración del curso
- Comentarios
‘ getParameter() ‘ devuelve el valor del parámetro respectivo como una string. Pero el campo ‘Lenguajes de programación’ es del tipo Casilla de verificación, podemos tener múltiples valores seleccionados para esta casilla de verificación. Entonces, el método ‘ getParameterValues() ‘ devuelve todos los valores seleccionados como una array. De esta forma, todos los datos de entrada ingresados en el navegador pasarán a través del cuerpo de la solicitud a los respectivos servlets. Después de obtener los valores de los parámetros, podemos realizar nuestra propia lógica para procesar la información, como por ejemplo,
- Puede realizar validaciones en los datos.
- Puede almacenar estos valores en una base de datos usando JDBC
- Puede pasar los datos a otro recurso como Servlet o JSP, etc.,
En este ejemplo, simplemente estamos escribiendo los datos de entrada que obtuvimos del objeto de solicitud al navegador a través del objeto de respuesta. Para lograr esto, estamos utilizando el objeto de clase PrintWriter del paquete java.io.
- Establezca el tipo de contenido de la respuesta en ‘ text/html ‘, de modo que la respuesta procese las etiquetas html proporcionadas a través del objeto PrintWriter.
- Para imprimir los datos, use declaraciones ‘ imprimir ‘ y pase las variables respectivas.
Producción:
- Para ejecutar la aplicación, haga clic derecho en el proyecto, Ejecutar como -> Ejecutar en el servidor
- Ejecute la URL: http://localhost:8080/JavaServletFormData/Details.html en el navegador para obtener la página del formulario inicial.
- La página del formulario HTML se mostrará con todos los campos.
- Ingrese todos los valores en los campos respectivos y haga clic en ‘ Enviar detalles ‘.
- Los detalles se enviarán al servlet y los datos se escribirán en la respuesta que se muestra en el navegador.
- Puede verificar los cambios en la URL que se está asignando al servlet.
De esta manera, podemos manejar los datos del formulario HTML en las clases de Servlet utilizando métodos en la interfaz HttpServletRequest.
Publicación traducida automáticamente
Artículo escrito por yaminitalisetty y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA