Fazer deploy com o JBoss rodando. Alguém sabe?

4 respostas
F

Boa tarde pessoal.

Bom, alguém sabe como eu posso fazer um deploy na minha aplicação com o JBoss rodando? Pq meu problema é o seguinte:
   To precisando criar um arquivo dinâmico em que o usuário possa baixá-lo para a sua máquina local. Pra isso to pensando em criar esse arquivo no server/default/deploy do meu JBoss. e aí minha aplicação o reconheceria qdo eu fizesse referência.
   Alguém sabe como fazer esse deploy? Vcs têm outra idéia pra eu fazer isso? 


                                                                     Um abraço a todos!

4 Respostas

J

Não entendi bem o que você quer, que arquivo é esse? Como você vai criar? Você precisa realmente salvar esse arquivo, será que não pode simplesmente fazer um Servlet que crie o arquivo e já mande direto para o usuario?

F

Jair, o que eu quero é o seguinte. Qualquer usuário que usa a aplicação pode usar de um recurso de criação de arquivo. Ele clica, eu crio o arquivo e disponibilizo (ou mando automaticamente) pra ele fazer o download. Ou seja, tudo com o servidor rodando. Sendo q meu problema é q eu não consigo fazer a minha aplicação enxergar o arquivo. Qdo jogo no /server/default/deploy do Jboss ele não consegue fazer o deploy rodando.
Como poderia fazer com o servelt q vc falou? Vc tem alguma sugestão pra eu resolver isso?
O arquivo q eu crio é um arquivo texto comum. Ao invés de o usuário visualizar esse texto na tela ele tem a opção de visualizar o texto no arquivo q ele faz o download (q eu não to conseguindo fazer).

Um abraço.
J

Precisa de muita complicação pra isso não, é só você gerar direto pra download, seria algo assim:

public class ServletArquivo extends HttpServlet{
   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      String path = getServletContext().getRealPath("/temp");
		
      File arq = gerarArquivo(path);
		
      response.setContentType("text/plain");
      response.addHeader("Content-Disposition", "attachment;filename="+arq.getName());
		
      FileInputStream in = new FileInputStream(arq);
		
      PrintWriter out = response.getWriter();
		
      int b;
		
      while((b = in.read())>-1){
         out.write(b);
      }
		
      out.flush();
      out.close();
   }
}

Nesse caso seria criada uma pasta temp dentro do diretorio da aplicação, o metodo gerarArquivo() recebe o caminho da pasta, e cria um arquivo qualquer lá, pode ser com qualquer nome, até mesmo um nome aleatorio, e retorna uma referencia para o arquivo criado em um java.io.File, aí o Servlet envia isso para o cliente... o nome do arquivo que o cliente recebe, é o nome especificado por filename= no addHeader(), no caso eu coloquei o mesmo nome do arquivo em disco, mas você pode colocar qualquer coisa...

Se você nem quiser salvar o arquivo no disco, é só ir escrevendo os bytes no out.write() e pronto, o cliente recebe o arquivo...

F

Jair, valeu cara. Testei aqui e deu certinho. Usei o response da minha Action no Struts e deu tranquilo. Olha só como ficou:

String fileName = getFileName();				
response.setContentType("application/octet-stream");
				response.setHeader("Content-Disposition","attachment; filename=\"EXEMPLO.TXT\"");
				
				FileInputStream in = new FileInputStream(fileName);
				PrintWriter out = response.getWriter();
				int bytesToBeWrited;
				while((bytesToBeWrited = in.read())>-1){
			         out.write(bytesToBeWrited);
			    }
				out.flush();
				out.close();
				
				return null;

Ao invés de retornar o mapping.findForward, retornei NULL e ele ficou preso na página mandando o arquivo para o usuário fazer o download. Ficou show d bola.

Muito obrigado. 

                           Um abraço
Criado 21 de setembro de 2006
Ultima resposta 21 de set. de 2006
Respostas 4
Participantes 2