File Download sem framework web MVC

O que aprendi em quase 10 anos de experiência com desenvolvimento de software foi que conceitos são mais importantes do que ferramentas e tecnologias. Conceitos perduram por muitos anos, ferramentas não.

O que estou querendo dizer é que entender bem MVC é mais importante e útil do que saber como usar o último framework MVC da moda; saber OO é mais importante do que saber a sintaxe de uma linguagem de programação. Independentemente da linguagem ou plataforma.

Quando trabalhamos com aplicações Web é comum ter a ajuda do framework MVC para disponibilizar um arquivo para o cliente (navegador). No caso do VRaptor, normalmente basta um código como este abaixo:

public File foto(Perfil perfil) {
    return new File("/caminho/foto-" + perfil.getId() + ".jpg");
}

O código é simples e resolve bem o problema, pois este é o objetivo de uma framework, certo? Mas o que acontece por debaixo dos panos? O que é enviado para o navegador? A imagem acima será exibida diretamente no browser ou o usuário poderá baixá-la? Qual o nome do arquivo será exibido para o usuário ao fazer download?

Muitas perguntas, muitas vezes desnecessárias… desnecessárias até o 1o problema surgir e você ter que identificar se o problema está no framework, servidor ou proxy da sua rede. Enfim, para ajudá-lo a entender parte do processo de download de arquivos numa aplicação Web nós blogamos exatamente sobre o assunto:

>> Como disponibilizar arquivos para download em Java

No post você vai aprender como fazer o download de um arquivo diretamente de uma Servlet, pois é exatamente isso que um framework MVC faz. Você vai aprender alguns cabeçalhos HTTP importantes e claro, como forçar aquela janelinha “Salvar como…”.

E aí, já desceu alguma vez do salto para programar mais baixo nível sem ajuda do seu framework favorito?