在创建一个文件夹,名称download,先拷入要下载的一些文件
编写下载的页面,提供一些下载的超链接,点击超链接,弹出下载的窗口
编写下载的Servlet类,完成下载

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 先获取到文件的名称 String filename = request.getParameter("filename"); // 解决中文乱码 filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8"); // System.out.println("要下载的文件名称:"+filename); //设置两个头一个流 // 设置第一个头,值可以是MIME类型,可以获取该文件的MIME类型 String type = this.getServletContext().getMimeType(filename); response.setHeader("content-type",type); // 先获取到用户使用的浏览器的信息,根据浏览器的信息采用不同的编码,例如火狐,采用Base64编码,使用IE采用的URL编码 // 先判断浏览器的信息 String agent = request.getHeader("user-agent"); // Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0 // System.out.println(agent); String name = null; if(agent.contains("Firefox")){ // 使用是火狐,采用Base64编码 name = base64EncodeFileName(filename); }else{ // 使用的是IE或者谷歌,使用URL编码 name = URLEncoder.encode(filename, "UTF-8"); } System.out.println("编码后的内容:"+name); // 设置第二个头 response.setHeader("content-disposition", "attachment;filename="+name); // 一个流,先获取到要下载的文件的输入流,使用response对象的输出流输出到客户端上,完成文件下载了 // 先获取到要下载的文件的输入流,先获取到download文件夹 + filename 文件,获取文件的输入流了 String path = this.getServletContext().getRealPath("/download"); // System.out.println(path); // 获取文件的输入流 InputStream in = new FileInputStream(path+"/"+filename); // 获取输出流,不能new,使用response对象 OutputStream os = response.getOutputStream(); byte [] b = new byte[1024]; int len = 0; while((len = in.read(b)) != -1){ os.write(b, 0, len); } in.close(); os.close();}/** * 传入文件的名称,进行Base64编码 * @param fileName * @return */public String base64EncodeFileName(String fileName) { BASE64Encoder base64Encoder = new BASE64Encoder(); try { return "=?UTF-8?B?" + new String(base64Encoder.encode(fileName .getBytes("UTF-8"))) + "?="; } catch (UnsupportedEncodingException e) { e.printStackTrace(); throw new RuntimeException(e); }}