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>