1 package com.yxfyg.servlet; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.OutputStream; 7 8 import javax.servlet.ServletContext; 9 import javax.servlet.ServletException; 10 import javax.servlet.ServletOutputStream; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 import org.apache.tomcat.jni.File; 16 17 public class Download extends HttpServlet{ 18 19 @Override 20 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 21 22 String filename = req.getParameter("filename"); 23 OutputStream os = resp.getOutputStream(); 24 // attachment;filename=附件名(注意附件名要带后缀名,不然下载了打不开) 25 resp.setHeader("Content-Disposition", "attachment;filename="+filename); 26 ServletContext sc = getServletContext(); 27 String path = sc.getRealPath("download/"); 28 InputStream is = new FileInputStream(path + filename); 29 // 注意不要使用相对路径,并不能找到 30 // InputStream is = new FileInputStream("/download/" + filename); 31 // InputStream is = new FileInputStream("download/" + filename); 32 int b = 0; 33 while((b = is.read()) != -1) { 34 os.write(b); 35 } 36 os.flush(); 37 is.close(); 38 os.close(); 39 } 40 41 @Override 42 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 43 doGet(req, resp); 44 } 45 46 }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Download</title> </head> <body> <div> <p>利用Tomcat自带的DefaultServlet提供下载</p> <a href="download/aa.jpg">aa.jpg</a><br /> <a href="download/bb.txt">bb.txt</a><br /> <a href="download/cc.rar">cc.rar</a><br /> </div> <div> <p>利用自定义的Servlet提供下载</p> <a href="Download?filename=aa.jpg">aa.jpg</a><br /> <a href="Download?filename=bb.txt">bb.txt</a><br /> <a href="Download?filename=cc.rar">cc.rar</a><br /> </div> </body> </html>
通过默认的Servlet和自定义的Servlet实现下载功能
原文:https://www.cnblogs.com/yxfyg/p/12806993.html