Download pela URL

Ola pessoal estou fazendo um sistema de gerenciamento de documento, e gostaria de saber como eu faco para quando o usuario clicar na minha url iniciar o download do arquivo.

estou usando o framework strust 2

Tá, mas quando você clica em uma URL, a requisição faz com que os arquivos relativos à ela sejam baixados (imagens, scripts, etc).
Desta forma, basta que você coloque o arquivo a ser baixado e crie um link apontando para ele.

mas no meu caso, o navegador esta tentar e abrir o arquivo.

crie um iframe style: ‘display:none;
aponte seu src: DownloadArquivo?file_name=’ + seuarquivo

onde DownloadArquivo é um servlet mapeado no web.xml

public class DownloadArquivo extends HttpServlet {

 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, FileNotFoundException, IOException {
        String param = request.getParameter("file_name");
        if (param != null) {
            if (!param.equals("")) {
                    String path = seuPath + param;
                    FileInputStream fis = new FileInputStream(path);
                    byte[] bytes = IOUtils.toByteArray(fis);
                    response.setContentType(tipo myme do arquivo pode gravar no banco ou coloque especifico);
                    response.setHeader("Content-Disposition", "attachment;filename=\"".concat(nomedoarquivo) + "\"");
                    response.setContentLength(bytes.length);
                    ServletOutputStream ouputStream = response.getOutputStream();
                    try {
                        ouputStream.write(bytes, 0, bytes.length);
                        ouputStream.flush();
                    } finally {
                        ouputStream.close();
                    }
                }
            }
        }
    }

}

não esqueça de mapear no web.xml

acredito que o drsmachado esta cerreto em sua afirmacao. acho que no meu caso nao funcionou por que nao estou pegando o caminho relativo do arquivo, pois o caminho esta c:/caminho/nomearquivo

como eu faco para pegar-lo ?

pois então se vc passar esse caminho c:/ pela url não dará certo! vc tem qeu passar uma referencia como id ou outra coisa para vc pegar lá no servidor ai sim lá vai poder acessar o c: para pegar o arquivo. use aquele servlet que te passei e chame pela url

uma melhor forma seria tudo pelo dwr


dwr.engine.openInDownload(Exec(ClasseDWR.downloadImage,[codigoFoto]));
public FileTransfer downloadFoto(Long codigoFoto) {
        return new FileTransfer("fotoexemplo.png", "image/png",bytes);
    }