2.1 Classe HttpServletRequest

A maior parte do trabalho que seu servlet precisa fazer com base nas informações recebidas da solicitação. O objeto é responsável por isso HttpServletRequest, que o container vai passar para o seu servlet (para o método serviceou métodos doGet(), doPost()etc.)

Este objeto possui alguns métodos, pois ele simplesmente armazena os dados da requisição, e através dele você pode interagir com o container.

Os métodos podem ser divididos em 2 grandes grupos:

  • Métodos relacionados à autorização do usuário
  • Métodos para trabalhar com dados de consulta

Darei os métodos de autorização do usuário na forma de uma tabela, mas não os analisaremos. O fato é que eles raramente são usados ​​para autorizar um usuário. Todas as estruturas populares usam suas próprias abordagens muito mais avançadas para autorização.

Eu deveria listá-los, mas, novamente, não vi ninguém usá-los.

Método Descrição
1 authenticate(HttpServletResponse) Executa autenticação de resposta
2 changeSessionId() Forçar a alteração do ID da sessão
3 getAuthType() Retorna o tipo de autenticação utilizada: ASIC_AUTH, FORM_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH
4 getRemoteUser() Retorna o login do usuário
5 getRequestedSessionId() Retorna o SessionID do cliente
6 getSession() Retorna um objeto HttpSession
7 getUserPrincipal() Retorna um objeto java.security.Principal
8 login(username, password) Realiza o login do usuário
9 logout() Sai da sessão do usuário

2.2 Solicitar dados

O segundo grupo de métodos é muito mais interessante. Que tipo de dados temos no pedido?

  • método http
  • URI
  • Opções
  • Títulos

Vamos ver quais métodos estão disponíveis para trabalhar com eles:

Método Descrição
1 getMethod() Retorna o método HTTP: GET, POST, DELETE, ...
2 getRequestURI() Retorna o URI da solicitação: http://codegym.cc/my/data
3 getRequestURL() Retorna o URL da solicitação: http://codegym.cc/my/data
4 getQueryString() Retorna Consulta, ou seja, tudo após o ?
5 getParameterMap() Retorna uma lista de parâmetros de consulta
6 getParameter(String name) Retorna o valor do parâmetro pelo seu nome
7 getContentType() Retorna o corpo da solicitação MimeType
8 getReader() Leitor para ler o corpo da solicitação como texto
9 getInputStream() InputStream para ler o corpo da solicitação como byte[]
10 getSession() Retorna um objeto HttpSession
onze getCookies() Retorna uma matriz de objetos Cookie[]
12 getHeaderNames() Retorna uma lista de títulos, apenas nomes
13 getHeader(String name) Retorna o valor do cabeçalho por nome
14 getServletPath() Retorna a parte da URL que se refere ao servlet
15 getContextPath() Retorna a parte do URI que especifica o conteúdo da solicitação

E isso nem é todos os métodos ...

Embora depois de estudarmos o protocolo HTTP e aprendermos a trabalhar com HttpClient, tudo é mais ou menos familiar aqui, não é?

Vamos escrever um servlet para o qual possa ser passado texto e uma cor, e ele retornará uma página HTML com esse texto escrito na cor especificada. Gostou da ideia?

Vamos começar escrevendo nosso servlet:

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

Agora precisamos obter o texto e a cor passados ​​do URI pelo usuário:

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");

    }
}

E, finalmente, você precisa enviar o texto como HTML. Abordaremos isso na próxima palestra, mas aqui darei uma pequena dica:

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();
        }
    }
}