Download com Servlet Problema [Resolvido]

Galera, tenho o interesse de estar permitindo um download através do Serverlet, segue os dois códigos
Estou usando Netbeans.

Tela principal

out.println("<form action=\"ServletDownloadDemo\" method=\"post\" >  ");
     out.println("   <input type=\"submit\" value=\"Exportar\" /> ");   
    out.println("</form>  ");

tela ServletDownloadDemo


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ServletDownloadDemo extends HttpServlet{
 
  private static final int BYTES_DOWNLOAD = 1024;
  private boolean autentificado;

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException, ClassNotFoundException{
	response.setContentType("text/plain");
	response.setHeader("Content-Disposition",
                     "attachment;filename=texting.txt");
	ServletContext ctx = getServletContext();
	InputStream is = ctx.getResourceAsStream("testing.txt");
 
	int read=0;
	byte[] bytes = new byte[BYTES_DOWNLOAD];
	OutputStream os = response.getOutputStream();
 
	while((read = is.read(bytes))!= -1){
		os.write(bytes, 0, read);
	}
	os.flush();
	os.close();	
   }
}

quando eu clico para receber o arquivo ele de me devolve:

HTTP Status 404 - /NovoTeste/ServletDownloadDemo

type Status report

message /NovoTeste/ServletDownloadDemo

description The requested resource (/NovoTeste/ServletDownloadDemo) is not available.
Apache Tomcat/7.0.27

Podem me ajudar a compreender o que está errado?

Eu realmente não estou conseguindo, alguem pode me dar uma luz?

Ai parceiro tenta esse código…
Teh mais abraços!


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            File arquivo = new File("C:\\Users\\Douglas Manteiga\\Documents\\aula08.pdf");
            response.setHeader("Content-Disposition", "attachment; filename = " + arquivo.getName());
            response.setContentType("octet-stream");
            int BUFF_SIZE = 1024;
            byte[] buffer = new byte[BUFF_SIZE];
            response.setContentLength((int) arquivo.length());
            FileInputStream fis = new FileInputStream(arquivo);
            OutputStream os = response.getOutputStream();
            int byteCount = 0;

            do {
                byteCount = fis.read(buffer);
                if (byteCount == -1) {
                    break;
                }
                os.write(buffer, 0, byteCount);
                os.flush();
            } while (true);
        } finally {
        }
    }

Olá douglasmanteiga.

Cara segui o seu código, mas meus parametros request, response vem nulos.

Na verdade segui outros tutoriais, mas acontece a mesma coisa. Sera que poderia me ajudar?


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            File arquivo = new File("C:\\Users\\Douglas Manteiga\\Documents\\aula08.pdf");
            response.setHeader("Content-Disposition", "attachment; filename = " + arquivo.getName());
            response.setContentType("octet-stream");
            int BUFF_SIZE = 1024;
            byte[] buffer = new byte[BUFF_SIZE];
            response.setContentLength((int) arquivo.length());
            FileInputStream fis = new FileInputStream(arquivo);
            OutputStream os = response.getOutputStream();
            int byteCount = 0;

            do {
                byteCount = fis.read(buffer);
                if (byteCount == -1) {
                    break;
                }
                os.write(buffer, 0, byteCount);
                os.flush();
            } while (true);
        } finally {
        }
    }

[quote=CorreaThiago]Olá douglasmanteiga.

Cara segui o seu código, mas meus parametros request, response vem nulos.

Na verdade segui outros tutoriais, mas acontece a mesma coisa. Sera que poderia me ajudar?

[code]

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        File arquivo = new File("C:\\Users\\Douglas Manteiga\\Documents\\aula08.pdf");
        response.setHeader("Content-Disposition", "attachment; filename = " + arquivo.getName());
        response.setContentType("octet-stream");
        int BUFF_SIZE = 1024;
        byte[] buffer = new byte[BUFF_SIZE];
        response.setContentLength((int) arquivo.length());
        FileInputStream fis = new FileInputStream(arquivo);
        OutputStream os = response.getOutputStream();
        int byteCount = 0;

        do {
            byteCount = fis.read(buffer);
            if (byteCount == -1) {
                break;
            }
            os.write(buffer, 0, byteCount);
            os.flush();
        } while (true);
    } finally {
    }
}

[/code][/quote]

Então cara testei o código aqui funcionou…
Vc está passando o caminho certo do arquivo para o método File arquivo = new File(“C:\SEU CAMINHO”);
Caso sim, exclui a Servlet crie uma nova e joga o código no método processRequest da forma que está em cima…
Obs: Ao criar a nova não mecha nos método doGet e doPost!
Abrço!

[quote=douglasmanteiga][quote=CorreaThiago]Olá douglasmanteiga.

Cara segui o seu código, mas meus parametros request, response vem nulos.

Na verdade segui outros tutoriais, mas acontece a mesma coisa. Sera que poderia me ajudar?

[code]

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {
        File arquivo = new File("C:\\Users\\Douglas Manteiga\\Documents\\aula08.pdf");
        response.setHeader("Content-Disposition", "attachment; filename = " + arquivo.getName());
        response.setContentType("octet-stream");
        int BUFF_SIZE = 1024;
        byte[] buffer = new byte[BUFF_SIZE];
        response.setContentLength((int) arquivo.length());
        FileInputStream fis = new FileInputStream(arquivo);
        OutputStream os = response.getOutputStream();
        int byteCount = 0;

        do {
            byteCount = fis.read(buffer);
            if (byteCount == -1) {
                break;
            }
            os.write(buffer, 0, byteCount);
            os.flush();
        } while (true);
    } finally {
    }
}

[/code][/quote]

Então cara testei o código aqui funcionou…
Vc está passando o caminho certo do arquivo para o método File arquivo = new File(“C:\SEU CAMINHO”);
Caso sim, exclui a Servlet crie uma nova e joga o código no método processRequest da forma que está em cima…
Obs: Ao criar a nova não mecha nos método doGet e doPost!
Abrço![/quote]

[/quote]
Olá douglasmanteiga.

Fiz o que você me falou, mas nada ainda. Fiz assim.

Estou utilizando o framework Vraptor e tomcat7
Não sei o que fazer mais, já estou utilizando os jar’s necessários, porem nada acontece.

[/quote]

protected void doGet4(HttpServletRequest request, HttpServletResponse response ) throws IOException{
		  
		 try {  
		  File file = new File("C:\\Users\\Samuel Alves\\Pictures\\upload\\download\\roots.jpg");
		  
		  response.setHeader("Content-Disposition", "attachment; filename="+ file.getName()); 
		  
		  response.setContentType("octet-stream"); 
		  
		  int BUFF_SIZE = 1024;  
	      byte[] buffer = new byte[BUFF_SIZE];  
		  
	      response.setContentLength((int) file.length());
	      
	      FileInputStream fis = new FileInputStream(file);  
	      
	      OutputStream os = response.getOutputStream(); 
	      
	      int byteCount = 0;
	      
	      do {  
	            byteCount = fis.read(buffer);  
	            if (byteCount == -1) {  
	                break;  
	            }  
	            os.write(buffer, 0, byteCount);  
	            os.flush();  
	        } while (true);  
	    } finally {  
	  
	 }

<form action="<c:url value="/download/downloadArquivo"/>" enctype="multipart/form-data" method="POST">
			<fieldset> 
				 	<legend>Download</legend>  
				 	<input type="file" id="arquivo" name="arq"/><br/>
				 	<button type="submit">Download</button> 
				 <br/>
			</fieldset>
		</form>