Quando um pedido chega a um servidor web usando uma URL, o servidor web gera uma resposta para o cliente. Uma resposta pode ser de qualquer tipo. Poderia ser uma resposta textual ou html, uma resposta multimídia como vídeo ou áudio ou um arquivo de documento. Todos estes tipos de respostas são disponibilizados pela tecnologia Servlet em Java. As respostas textuais e html são normalmente processados pelo servidor web, ao passo que as respostas multimídia são disponibilizados para baixar ou abrir ou jogar diretamente usando o aplicativo cliente.

Servlet Response Multimedia:

Quando um usuário envia uma solicitação para puxar um arquivo de documento do servidor web, o usuário é convidado a abrir um arquivo ou para baixar um arquivo a partir do servidor. Servlet torna os arquivos de dados disponíveis para aplicação do cliente e resto da funcionalidade é feito através da aplicação cliente. Um aplicativo cliente pode solicitar que o usuário abra um documento ou faça o download do documento então ele pode baixar ou abrir diretamente o arquivo.

Um desenvolvedor tem que especificar um tipo de resposta do Servlet, sempre que um Servlet está sendo criado. Uma interface HttpServletResponse se encarrega de gerar resposta.

Listagem 1: Classe Servlet WordServlet - o download de um documento do word

Import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
  
@WebServlet("/WordServlet") 
public class WordServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
         
    public WordServlet() { 
        super(); 
    } 
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        doPost(request, response); 
    } 
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        response.setContentType("application/msword"); 
        PrintWriter out = response.getWriter(); 
        out.println("Este documento é gerado por servlet"); 
        out.close(); 
    } 
  
}

O trecho de código acima cria um arquivo de documento MS-Word que imprime uma declaração de texto simples "Este documento é gerado por servlet".

Listagem 2: Classe Servlet ExcelServlet - o download de um documento excel

Import java.io.IOException; 
import java.io.PrintWriter; 
  
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
  
@WebServlet("/ExcelServlet") 
public class ExcelServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
         
    public ExcelServlet() { 
        super(); 
    } 
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        doPost(request,response); 
    } 
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
        response.setContentType("application/vnd.ms-excel"); 
        PrintWriter out = response.getWriter(); 
        out.println("Nome\tCargo\tSalario"); 
        out.println("Raj\tAccountant\t20000"); 
        out.println("Vinay\tAccountant\t20000"); 
        out.println("Rajesh\tAccountant\t20000"); 
        out.println("\tTotal:\t=sum(c2:c3)"); 
        out.close(); 
    } 
  
}

O trecho de código acima cria um arquivo de documento do MS-Excel que calcula o salário de todos os funcionários e produz a soma de salário destes empregados.

Na listagem acima de 1 e 2, as sete primeiras linhas do código importa sete classes Java e interfaces que são necessários para executar os Servlet’s. @ WebServlet é a próxima linha de código que é a anotação Servlet para definir um padrão de url para este Servlet Web. Este padrão de url vai ajudar a chamar o Servlet usando a ação da url no form html. O padrão de url para esses servlets são: @ WebServlet ("WordServlet") e @ WebServlet ("ExcelServlet")

Na próxima linha da classe a WordServlet é criada e estende a classe HttpServlet que é definida no pacote javax.servlet.http.

A linha seguinte define uma variável serialVersionUID que é usado pela IDE Eclipse, se não for definida na classe, Eclipse irá emitir um warning. Na linha seguinte o construtor padrão é definido que faz uma chamada a super ().

A próximas linhas definem os métodos doGet () e doPost (). O método doGet () recebe dois parâmetros do tipo de interface, HTTPServletRequest e HttpServletResponse, os quais são definidos no pacote javax.servlet.http e este método chama o método doPost ().

O método doPost () também aceita dois parâmetros do tipo HTTPServletRequest e HttpServletResponse e define o tipo de resposta na primeira linha do método. Para definir o tipo de resposta de um Servlet, um método da interface HttpServletResponse setContentType () é usado.

O Servlet acima irá criar um arquivo de documento do MS-Word como uma resposta da seguinte forma:

response.setContentType(“application/msword”);

Em seguida, chama o método getWriter () da interface de HttpServletResponse que retorna uma referência da classe PrintWriter.

PrintWriter out = response.getWriter();

As próximas linhas chamam o método println () ou print () da classe PrintWriter para escrever na página web. A classe WordServlet chama o método print () para escrever:

out.println("Este documento é gerado por servlet");

A classe ExcelServlet chama o método println () para escrever uma folha de excel, onde / t é usado para separar os dados na próxima coluna. Sum (c3: c3) irá adicionar dados de três linhas de terceira coluna na folha de excel. No final do Servlet, um método close () da classe PrintWriter é chamado para fechar o fluxo de gravação.

Listagem 3: arquivo index.jsp para executar Ms-Word e MS-Excel Servlet

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Download Data</title> 
</head> 
<body> 
View data in following format:<br> 
<a href = "WordServlet">MS-Word</a><br> 
<a href = "ExcelServlet">MS-Excel</a> 
</body> 
</html>

O trecho de código acima cria uma página web html que cria uma interface com o usuário para visitar Ms-Word e folhas de Ms-Excel. Duas tag’s de âncora foram usadas para que o usuário possa visitar os servlets acima definidos (WordServlet & ExcelServlet), respectivamente.

Mostra uma interface para visitar Ms-Word e MS-Excel Servlet

Figura 1: Mostra uma interface para visitar Ms-Word e MS-Excel Servlet

A figura acima mostra a interface html que dá as url’s para visitar os Servlet’s Ms-Word e Ms-Excel. Uma vez que clicar em MS-Word, ele carrega WordServlet e solicita que o usuário faça o download ou abrir documento do MS-Word. Este documento irá conter a string "Este documento é gerado por servlet" que foi passado para o servlet usando writer stream.

A próximo url, MS-Excel, que carrega ExcelServlet e solicita que o usuário faça o download ou abrir documento do MS-Excel usando o aplicativo apropriado. Este documento irá criar três colums "Nome", "Cargo" e "Salario". Este documento salvar três registros e a quarta fileira produz o salário total para distribuir esses três funcionários.

Visite ExcelServlet que o prompt do usuário irá baixar ou abrir a folha de excel.

Figura 2: Visite ExcelServlet que o prompt do usuário irá baixar ou abrir a folha de excel.

A figura acima mostra a ação da url que chama o Servlet ExcelServlet e downloads de um arquivo do Excel, enquanto um aplicativo cliente recebe a resposta do servidor, ele perguntará ao usuário escolher uma ação a ser executada no arquivo excel download.

Mostra o conteúdo da folha de excel baixado usando ExcelServlet.

Figura 3: Mostra o conteúdo da folha de excel baixado usando ExcelServlet.

A figura acima mostra uma captura de tela da folha de excel que foi produzido pelo ExcelServlet.

Visite WordServlet  que o prompt do usuário irá baixar ou abrir o documento do MS-Word

Figura 4: Visite WordServlet que o prompt do usuário irá baixar ou abrir o documento do MS-Word

A figura acima mostra uma pequena janela solicitando que o usuário escolha uma ação para abrir ou salvar um arquivo do MS-Word, enquanto um pedido de url é enviado para inicializar WordServlet no servidor web.

Mostra o conteúdo do arquivo baixado documento do MS-Word usando o WordServlet

Figura 5: Mostra o conteúdo do arquivo baixado documento do MS-Word usando o WordServlet

Esta é a captura de tela do arquivo do MS-Word baixado de um servidor web.

Arquivos JAR necessários:

Os arquivos JAR necessários

Figura 6: Os arquivos JAR necessários

Estrutura de diretórios necessária para executar a aplicação web Java

Figura 7: Estrutura de diretórios necessária para executar a aplicação web Java

Ferramentas necessárias:

Para criar e executar este aplicativo web, precisamos dos seguintes aplicativos abaixo:

  • JDK (Java Development Kit) deve ser instalado no sistema para desenvolvimento de aplicativos java.
  • Eclipse IDE (Integrated Development Environment) pode ser usado para este desenvolvimento de aplicações web.
  • Web Server ou o Application Server: Para executar aplicações web em Java, que são obrigados a ter um servidor de aplicação (Web Logic 12C) ou um servidor web (Apache Tomcat).
  • Foi usado um servidor de aplicação (Web Logic 12C) que usa 7001 como número da porta padrão para executar aplicações web em Java.
Servidor configurado na IDE Eclipse para Application Server e Web Server

Figura 8: Servidor configurado na IDE Eclipse para Application Server e Web Server

Conclusão

Neste artigo foi visto:

  • Alguns tipos de respostas que podem ser produzidos utilizando um Servlet.
  • Como processar uma resposta multimídia usando um Servlet para baixar um arquivo de documentos.

Artigo traduzido e originalmente publicado em: http://mrbool.com/how-to-download-document-files-from-webserver-using-servlet/28369