美文网首页
servlet 2.2 例子:下载文件文件及ServletRes

servlet 2.2 例子:下载文件文件及ServletRes

作者: 长脖子树 | 来源:发表于2017-05-30 20:24 被阅读0次

文件下载的实质:就是发送二进制类型的响应体

代码:

@WebServlet("/download.do")
public class DoDownload extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public DoDownload() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        //指定文件格式
        response.setContentType("application/pdf");
        
        ServletContext context = getServletContext();
        String downName = request.getParameter("file");
        //为了提示保存,防止浏览器直接打开文件,设置响应头;downName为建议保存的文件名
        response.setHeader("Content-Disposition", "attachment;filename="+downName);
        
        //读取文件
        InputStream iStream = context.getResourceAsStream(downName);
        
        int read = 0;
        byte[] bytes = new byte[1024];
        
        OutputStream outputStream = response.getOutputStream();
        while((read= iStream.read(bytes))!=-1){
            outputStream.write(bytes,0,read);
        }
        outputStream.flush();
        outputStream.close();
        
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

}

html文件中

<a href ="download.do?file=2015.pdf">点击下载</a>

2015.pdf是我要上传的文件
这个文件一般放在webcontent文件夹下

Content-Disposition 的作用
当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。
注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。

详见:参考资料

ServletResponse输出流

ServletResponse输出流为开发人员提供了两种输出流

ServletOutputStream : 输出字节
PrintWriter : 输出字符(PrintWriter 实际包装了ServletOutputStream并提供了较高级别的方法)

我们可以通过下面的方法获取输出流

response.getOutputStream() 获得ServletOutputStream 对象
response.getWriter() 获得PrintWriter 对象

OutputStream 方法总结

(1)输出数据
void write(int b)往流中写一个字节b
void write(byte b[])往流中写一个字节数组b
void write(byte b[],int off,int len)把字节数组b中从下标off开始,长度为len的字节写入流中
(2)
flush()刷空输出流,并输出所有被缓存的字节
由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。
(3)关闭流
close()流操作完毕后必须关闭。

相关文章

  • servlet 2.2 例子:下载文件文件及ServletRes

    文件下载的实质:就是发送二进制类型的响应体 代码: html文件中 2015.pdf是我要上传的文件这个文件一般放...

  • 3.文件下载

    1.普通文件下载 2.使用servlet程序下载(推荐)

  • servlet 2.3 例子:上传文件

    一、@MultipartConfig 使用@MultipartConfig 注解的servlet 可以调用requ...

  • Servlet 实现文件下载

    Servlet 实现文件下载 在生活或者工作中,总是避免不了下载文件,下载的东西有各种类型,譬如图片,视频,文本,...

  • SpringMVC之文件上传和下载

    SpringMVC实现文件的上传和下载相对于JavaWeb阶段我们使用过servlet实现文件上传和下载操作;而S...

  • 文件上传与下载

    Servlet实现文件上传与下载 所需包:commons-fileupload-1.2.1.jarcommons-...

  • 关于servlet下载单文件

    从事IT行业,已经很长一段时间了。很多东西还处于初级阶段。比如,简单的servlet下载,自己还是无法理解。以前,...

  • Servlet文件上传与下载

    需要导入的jar包有:commons-fileupload、commons-io、commons-logging,...

  • 文件下载用servlet实现

    一般来说文件下载需要的步骤为: (1)获得客户端请求的文件的名称 (2)获得服务器端的真实的物理路径 (3)创建目...

  • apache安装与配置

    安装步骤 双击下载的文件进行安装,出现Apache HTTP Server 2.2 - Installation ...

网友评论

      本文标题:servlet 2.2 例子:下载文件文件及ServletRes

      本文链接:https://www.haomeiwen.com/subject/ohrlfxtx.html