2.1 Clase HttpServletRequest

La mayor parte del trabajo que tiene que hacer su servlet se basa en la información recibida de la solicitud. El objeto es responsable de ello HttpServletRequest, que el contenedor pasará a su servlet (al método serviceo métodos doGet(), doPost()etc.)

Este objeto tiene bastantes métodos, ya que simplemente almacena los datos de la solicitud, ya través de él puedes interactuar con el contenedor.

Los métodos se pueden dividir en 2 grandes grupos:

  • Métodos relacionados con la autorización del usuario
  • Métodos para trabajar con datos de consulta

Daré los métodos de autorización del usuario en forma de tabla, pero no los analizaremos. El hecho es que muy pocas veces se utilizan para autorizar a un usuario. Todos los marcos populares utilizan sus propios enfoques mucho más avanzados para la autorización.

Debería enumerarlos, pero de nuevo, no he visto a nadie usarlos.

Método Descripción
1 authenticate(HttpServletResponse) Realiza la autenticación de respuesta
2 changeSessionId() Cambiar a la fuerza el ID de la sesión
3 getAuthType() Devuelve el tipo de autenticación que se utiliza: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Devuelve el inicio de sesión del usuario
5 getRequestedSessionId() Devuelve el SessionID del cliente
6 getSession() Devuelve un objeto HttpSession
7 getUserPrincipal() Devuelve un objeto java.security.Principal
8 login(username, password) Realiza el inicio de sesión del usuario
9 logout() Cierra la sesión del usuario

2.2 Solicitar datos

El segundo grupo de métodos es mucho más interesante. ¿Qué tipo de datos tenemos en la solicitud?

  • método http
  • URI
  • Opciones
  • Títulos

Veamos qué métodos están disponibles para trabajar con ellos:

Método Descripción
1 getMethod() Devuelve el método HTTP: GET, POST, DELETE, ...
2 getRequestURI() Devuelve el URI de solicitud: http://codegym.cc/my/data
3 getRequestURL() Devuelve la URL de solicitud: http://codegym.cc/my/data
4 getQueryString() Devuelve Query, es decir, todo después de ?
5 getParameterMap() Devuelve una lista de parámetros de consulta.
6 getParameter(String name) Devuelve el valor del parámetro por su nombre
7 getContentType() Devuelve el cuerpo de la solicitud MimeType
8 getReader() Lector para leer el cuerpo de la solicitud como texto
9 getInputStream() InputStream para leer el cuerpo de la solicitud como byte []
10 getSession() Devuelve un objeto HttpSession
once getCookies() Devuelve una matriz de objetos Cookie[]
12 getHeaderNames() Devuelve una lista de títulos, solo nombres.
13 getHeader(String name) Devuelve el valor del encabezado por nombre
14 getServletPath() Devuelve la parte de la URL que hace referencia al servlet
15 getContextPath() Devuelve la parte de la URI que especifica el contenido de la solicitud

Y esos ni siquiera son todos los métodos ...

Aunque después de haber estudiado el protocolo HTTP y aprendido a trabajar con HttpClient, aquí todo es más o menos familiar, ¿no?

Escribamos un servlet al que se le pueda pasar texto y un color, y devolverá una página HTML con ese texto escrito en el color especificado. ¿Qué te parece la idea?

Comencemos escribiendo nuestro servlet:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
          //write your code here
    }
}

Ahora necesitamos que el usuario pase el texto y el color del URI:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Getting the parameter “text” and “color” from request
        String text= request.getParameter("text");
        String color = request.getParameter("color");

    }
}

Y finalmente, debe generar el texto como HTML. Cubriremos esto en la próxima lección, pero aquí daré una pequeña pista:

public class ColorTextServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {

        // Get the "text" and "color" parameters from the request
        String text = request.getParameter("text");
        String color = request.getParameter("color");


        // Print the HTML as a response to the browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out =  response.getWriter();
        try {
            out.println("<html>");
            out.println("<head> <title> ColorTextServlet </title> </head>");
            out.println("<body>");
            out.println("<h1 style="color:"+color+">"+text+"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}