zoukankan      html  css  js  c++  java
  • 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.下载文件运行结果

  • 相关阅读:
    对数可以用来简化乘法计算
    理解了一点github的用法了
    由摄氏温度和华氏温度转换想到的。
    CMD原来是支持通配符的啊
    怎么在CMD中创建文件
    如何学习数学
    SCILAB
    STS或eclipse安装SVN插件
    Html解析类的新选择CsQuery
    Tomcat编码问题
  • 原文地址:https://www.cnblogs.com/coderL/p/7522548.html
Copyright © 2011-2022 走看看