jsp使用servlet实现文件下载
Posted liangyuqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp使用servlet实现文件下载相关的知识,希望对你有一定的参考价值。
1.在index.jsp写入如下代码
<a href="demo2">下载</a>
2.在src中创建ServletDemo2类
public class ServletDemo2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { File f = new File("D:/说明.txt"); if (f.exists()) { InputStream fis = new FileInputStream(f); String filename = URLEncoder.encode(f.getName(), "utf-8"); //解决中文文件名下载后乱码的问题 byte[] b = new byte[fis.available()]; fis.read(b); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment; filename=" + filename + ""); //添加报文头,只有在报文里添加了"Content-disposition", "attachment; filename="打开文件的时候就会以下载文件的形式弹出,
//如果不加这个报文头的话,就是将"/images/111.jpg"这个文件写入到浏览器,就是直接在浏览器中呈现出图片了
//获取响应报文输出流对象 ServletOutputStream out = response.getOutputStream(); //输出 out.write(b); out.flush();//一般主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。
//这时候如果你调用了 close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush(),先清空数据。
out.close(); } } }
3.在WEB-INF进行配置文件
<servlet> <servlet-name>servletDemo2</servlet-name> <servlet-class>com.neunb.servlet.ServletDemo2</servlet-class> <!--<load-on-startup>2</load-on-startup>--> </servlet> <servlet-mapping> <servlet-name>servletDemo2</servlet-name> <url-pattern>/demo2</url-pattern> </servlet-mapping>
4.下载文件运行结果
以上是关于jsp使用servlet实现文件下载的主要内容,如果未能解决你的问题,请参考以下文章