1、直接把服务器上的资源文件地址写到a标签中,点击会自动下载文件

<a href="http://www.Yuriki.com/download/demo.doc">下载demo文件</a>


2、请求到后端,后端组织数据再返回

前端链接的设置

<a href="down?filename=demo1.docx">经过后端下载文件</a>


servlet的doGet方法

    //获取文件名 
String filename = request.getParameter("filename");

//指定文件下载的目录F:/word/img/download
File file=new File("F:/work/img/download/"+filename);
//根据文件名去服务器目录中查找
if(!file.exists()){//文件不存在
throw new IOException("资源不存在");
}else{
//设置文件类型开始下载
String mimeType = getServletContext().getMimeType(filename);//媒体类型
response.setContentType(mimeType);//响应时通过媒体类型响应

//设置Content-Disposition,MIME协议的扩展,提供默认文件名,在浏览器上弹出文件下载对话框
//默认在浏览器设置的下载位置
//attachment为以附件方式下载:意味着消息体应该被下载到本地;filename设置的就是默认文件名
response.setHeader("Content-Disposition","attachment;filename="+filename);

//使用流类进行写入操作
InputStream in=new FileInputStream(file);
//调用响应时的输入流
OutputStream out=response.getOutputStream();

/*int b;
while((b=in.read())!=-1){//这样大文件的下载效率会很慢
out.write(b);
out.flush();
}*/
byte[] b=new byte[1024];
int len=0;
while ((len=in.read(b))!=-1){
out.write(b,0,len);
out.flush();
}
in.close();
out.close();
}