Просто напишите сначала сервлет, который отправляет пользователю файл, расположенный на сервере.
Затем, когда пользователь нажимает, например, на кнопку, вы вызываете сервлет с правильным параметром.
Вот выдержка из нашей реализации сервлета
response.reset();
response.setContentType("application/octet-stream");
response.setContentLength(contentLength);
response.setHeader("Content-disposition", "attachment;
filename=\"" + filename + "\"");
output = new
BufferedOutputStream(response.getOutputStream());
int data = input.read();
while (data != -1)
{
output.write(data);
data = input.read();
}
output.flush();