3
respostas

Ajuda para entender o Código - Aula 05 - vídeo 02

Bom dia! Gostaria de uma ajuda dos colegas para compreender um trecho de código da classe WebClient utilizada nessa aula para estabelecer conexão com servidores.

Vou fazer as observações por partes:

O URL permite instanciar a classe que proverá a url para a classe HttpURLConnection criar a conexão propriamente dita certo?

URL url = new URL("https://www.caelum.com.br/mobile");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

O setDoOutput(true) indica que queremos realizar uma requisição certo?

connection.setDoOutput(true);

Aqui começa minha dúvida. O que o trecho de código abaixo está fazendo exatamente?

PrintStream output = new PrintStream(connection.getOutputStream());
output.println(json);

A classe é a seguinte:

public class WebClient {
    public String post(String json){
        try {
            URL url = new URL("https://www.caelum.com.br/mobile");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("Content-type","application/json");
            connection.setRequestProperty("Accept","application/json");

            connection.setDoOutput(true);

            PrintStream output = new PrintStream(connection.getOutputStream());
            output.println(json);

            Scanner scanner = new Scanner((Readable) connection.getOutputStream());
            String resposta = scanner.next();
            return resposta;

        } catch (MalformedURLException e){
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        }

        return null;
    }
}
3 respostas

Olá Bruno,

O trecho que código que você destacou serve para construir o conteúdo da requisição que queremos enviar para o servidor.

Para fazer isso, pegamos o OutputStream que vem da nossa conexão com o getOutputStream(). Depois construímos um objeto do tipo PrintStream para facilitar a escrita pois assim podemos usar o println() para escrever o conteúdo da requisição.

Então é jogado para dentro de um objeto PrintStream para que possamos utilizar o método println().?!

PrintStream output = new PrintStream(connection.getOutputStream());
            output.println(json);

Agora, em que momento que é enviado a requisição ao servidor? No println()?

Olá Bruno,

É isso mesmo, somente pela facilidade de poder escrever usando o println(...).

Sobre a sua segunda pergunta, a requisição é enviada quando invocamos o método getInputStream(...) da connection. Isso acontece porque para ler a resposta da requisição a partir do InputStream, precisamos primeiro enviar a requisição e aguardar até que a resposta chegar para só então conseguir lê-la.