Servlet

Servlets en Java

Los Servlets son clases Java ejecutadas en un servidor que permiten recibir solicitudes HTTP (HTTP Request) y procesarlas y devolver una respuesta también mediante el protocolo HTTP (HTTP Response). La respuesta puede ser de tipo HTML, XML, JSON, PDF, audio, imagen, video,..

ESTRUCTURA DE UN SERVLET

Un servlet hereda o extiende de la clase HttpServlet y debe sobreescribir los métodos encargados de realizar las peticiones(doGet, doPost,...).  

  1. package servlets;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. @WebServlet(name = "Servlet", urlPatterns = {"/Servlet"})
  9. public class Servlet extends HttpServlet {
  10. @Override
  11. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  12. throws ServletException, IOException {
  13. System.out.println("petición vía GET");
  14. }
  15. @Override
  16. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  17. throws ServletException, IOException {
  18. System.out.println("petición vía POST");
  19. }
  20. }

CONFIGURACIÓN DE UN SERVLET

La configuración de un servlet se almacena en el archivo web.xml que se encuentra generalmente en el directorio WEB-INF. Este archivo permite definir mediante elementos de tipo XML (tags) la configuración del servlet. La configuración requiere un elemento servlet, que define el nombre del servlet y de la clase, y un elemento servlet-mapping, que define de nuevo el nombre del servlet y la ruta relativa  que realiza la solicitud.

  1. <webapp>
  2. <servlet>
  3. <servlet-name>Servlet</servlet-name>
  4. <servlet-class>servlets.Servlet</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>Servlet</servlet-name>
  8. <url-pattern>/servlet</url-pattern>
  9. </servlet-mapping>
  10. </webapp>

A partir de la API Servlet 3.0 también existe la opción de configuración por anotación, tal como se observa en la línea siguiente y la línea 9 del código anterior donde se define el nombre y la ruta.

  1. @WebServlet(name = "Servlet", urlPatterns = {"/Servlet"})

PETICIONES GET Y POST

El servlet se encarga de procesar las peticiones HTTP como cualquier otro lenguaje. Las de tipo GET, mediante url o link, las de tipo POST, mediante formulario.

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Peticiones</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. </head>
  8. <body>
  9. <div><b>Enviando datos por POST</b></div>
  10. <form name="form-comentarios" action="comentarios" method="POST">
  11. <p>Introduce los datos</p>
  12. <p>Nombre: <input type="text" name="name"></p>
  13. <p>E-Mail: <input type="text" name="email"></p>
  14. <p><input type="submit" name="enviar" value="Enviar"></p>
  15. </form>
  16. </body>
  17. </html>

El método getParameter() permite obtener los datos, ya sea vía GET o vía POST, que pueden ser manejados antes de devolver la respuesta.

  1. package servlets;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class Servlet extends HttpServlet {
  9. @Override
  10. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  11. throws ServletException, IOException {
  12. String name = request.getParameter("name");
  13. String email = request.getParameter("email");
  14. if(name.equals("jose")){
  15. response.setContentType("text/html;charset=UTF-8");
  16. try(PrintWriter out=response.getWriter()){
  17. out.println("<!DOCTYPE HTML>");
  18. out.println("<html>");
  19. out.println("<head>");
  20. out.println("<tittle>Petición</title>");
  21. out.println("</head>");
  22. out.println("<body>");
  23. out.println("<h2>Accediendo por GET</h2>");
  24. out.println("</body>");
  25. out.println("</html>");
  26. }
  27. }else{
  28. response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
  29. }
  30. }
  31. @Override
  32. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  33. throws ServletException, IOException {
  34. String name = request.getParameter("name");
  35. String email = request.getParameter("email");
  36. System.out.println(name);
  37. System.out.println(email);
  38. if(name.equals("jose")){
  39. response.setContentType("text/html;charset=UTF-8");
  40. try(PrintWriter out=response.getWriter()){
  41. out.println("<!DOCTYPE HTML>");
  42. out.println("<html>");
  43. out.println("<head>");
  44. out.println("<tittle>Petición</title>");
  45. out.println("</head>");
  46. out.println("<body>");
  47. out.println("<h2>Accediendo por POST</h2>");
  48. out.println("</body>");
  49. out.println("</html>");
  50. }
  51. }else{
  52. response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
  53. }
  54. }
  55. }

TIPOS DE RESPUESTA

El servlet permite devolver los distintos tipos de respuesta y formato estableciendo el tipo MIME. Generalmente, en aplicaciones web, el tipo de respuesta más común es el documento en formato HTML, sin embargo es posible devolver otro tipo de respuestas  como pueden ser documentos en formato JSON, archivos de imagen, video, documentos PDF,etc... El tipo MIME se establece mediante el método setContentType() pasando por parámetro el correspondiente tipo MIME.

  1. setContentType([tipo_respuesta]);

Establecer respuesta de tipo HTML

  1. setContentType("text/html;charset=UTF-8");

Establecer respuesta de tipo imagen (extensión png)

  1. setContentType("image/png");

Para establecer tipos de respuesta con otros tipos MIME se puede acceder a la entrada Lista de Tipos MIME que contiene una tabla con los MIME más comunes.

REDIRECCIONES

Los servlets permiten realizar redirecciones mediante el método sendRedirect(). Estas redirecciones pueden realizarse dentro del mismo directorio o proyecto, o pueden realizarse hacia una web externa. 

Redireccionar a un documento dentro del mismo directorio.

  1. sendRedirect("menu.html");

Redireccionar a un documento de otro nivel dentro del mismo proyecto.

  1. sendRedirect("/contacto/form.html");

Redireccionar a una url externa.

  1. sendRedirect("//www.google.es");


Comentarios: 0

Para poder comentar es necesario iniciar sesión



Este dominio utiliza cookies de terceros para crear estadísticas y publicidad personalizada. Si continúa navegando está aceptando su uso