servlet技术之下载文件演示(DownloadServlet.class)

文件是指把服务器端文件发送到客户端,Servlet能够向客户端发送任意格式的文件数据,例程的DownloadServlet类先获得请求参数filename,该参数代表客户端请求下载的文件名,DownloadServlet先通过ServletContext的getResourceAsStream()方法得到一个用于读取相应文件的输入流,再调用一个用于输出响应正文的输出流。DownloadServlet然后通过输入流读取文件数据,在通过输出流把文件中的数据输出到客户端。

Web.xml

<servlet>
    <servlet-name>Down</servlet-name>
    <servlet-class>com.demo.servlet.DownloadServlet</servlet-class>
</servlet>
 <servlet-mapping>
     <servlet-name>Down</servlet-name>
     <url-pattern>/download</url-pattern>
 </servlet-mapping>

DownloadServlet.class

package com.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * Created by 谭雪娇 on 2017/4/7.
 */
public class DownloadServlet extends HttpServlet {
    public void doGet(HttpServletRequest request , HttpServletResponse response)throws ServletException ,IOException{
        OutputStream out;//输出响应正文的输出流
        InputStream in;//输出响应正文的输入流
        String filename=request.getParameter("filename");
        if(filename==null){
            out=response.getOutputStream();
            out.write("please input filename".getBytes());
            out.close();
            return ;
        }
        //获得读取本地文件的输入流
        in=getServletContext().getResourceAsStream(filename);
        int length=in.available();
        //设置MIME类型的响应正文
        response.setContentType("application/force-download");
        response.setHeader("content-length",String.valueOf(length));
        response.setHeader("content-Disposition","attachment;filename=\" "+filename+" \" ");
        /*把本地文件中的数据发送给客户*/
        out=response.getOutputStream();
        int byteRead=0;
        byte[] buffer=new byte[512];
        if((byteRead=in.read(buffer))!=-1){
            out.write(buffer,0,byteRead);
        }
        in.close();
        out.close();
    }
}

DownloadServlet把响应正文的类型设置为”application/force-download”,当浏览器读取这种MIME类型的响应正文时会以下载的方式来处理响应正文,

在web.xml中为DownloadServlet映射的URL为”/download”,在浏览器输入http://localhost:8080/download/filename=fromserver.rar,浏览器端会输出如图所示结果

servlet技术之下载文件演示(DownloadServlet.class)的更多相关文章

  1. Servlet 上传下载文件

    上传文件 1)在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮 2)表单需要上传文件时,需指定表单 enctype 的值 ...

  2. Struts2学习笔记--使用Response下载文件和Struts2的StreamResult文件下载

    使用Response下载文件,servlet中的文件下载是通过流来实现的   我在webRoot文件夹下新建了一个文件夹from,里边放了一张图片,这里就以下载这张图片为例:download.jsp很 ...

  3. Jmeter和Charles下载文件

    有时候我们jmeter做自动化测试是会遇到文件上传和文件下载的接口,这里我将接结合Charles来Jmeter 文件下载进行讲解 一.用Charles抓包分析文件下载接口 1.1.业务中文件下载链接如 ...

  4. Servlet 下载文件

    这几天有点懒散,还好没有忘记看书,上周去了国家图书馆翻阅了一些和Java相关的书籍,其实这些书都是自己以前看过或者听过,按理来说,不应该看自己已经看过的书籍,应该找一些最新的书籍去看,但是每次走到书架 ...

  5. 从服务器下载文件 DownloadServlet()

    .html代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  6. Servlet下载文件和http响应

    下载文件等: 1.得到公共的内容ServletContext sc = this.getServletContext(); 2.在链接名字后面加个? 一个参数?参数1=值 两个参数?参数1=值& ...

  7. [SAP ABAP开发技术总结]以二进制、字符模式下载文件

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

    参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...

  9. Servlet下载文件迅雷不支持问题真相之一

    问题描述 最近在做一个下载文件的Servlet,直接使用浏览器的下载功能,完美支持,结果测试人员使用迅雷下载,就不行了,下载也能成功完成,只是迅雷下载的文件大小是悲催的0KB 真相搜罗 网上有很多帖子 ...

随机推荐

  1. 06 使用bbed提交delete的数据--01

    使用bbed模拟delete提交操作 --session 1 TEST@ orcl )); Table created. TEST@ orcl ,'AAAAA'); row created. TEST ...

  2. 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用

    在跟随教程学习到显示web页面的html源码时报错:Only the original thread that created a view hierarchy can touch its views ...

  3. 并发问题java

    两个重要的概念:同步和异步 同步,按照流程顺序一步一步的执行,等待获取单步的返回结果并执行下一步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 同步在一定程度上可以看做是单线程, ...

  4. ARM汇编2

    一. 数据处理汇编指令 1.1. 数据传输指令 1.1.1.  mov(Move) 指令 示例:mov  r0, r0, LSL#3           ; r0 = r0* 8 mov  pc, r ...

  5. java _static 关键字

    • 在类中,用static声明的成员变量为静态成员变量 ,或者叫做: 类属性,类变量. • 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化, • 对于该类的所有对象来说,s ...

  6. hdu 3333 离线线段树 + 思维/树状数组 /在线主席树

    #include<iostream> #include<cstdio> #include<string> #include<cmath> #includ ...

  7. 纯css实现网上商城左侧垂直商品分类菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 13-jQuery事件绑定和常用鼠标事件

    # 关于事件 ## 事件绑定 1.**基本绑定** > $(element).click(function(){})>> $(element).dblclick(function() ...

  9. 帝国CMS自定义页面的添加与目录式链接的处理

    需求: 1.将某一本地前端自定义页面模板,导入到帝国系统,应用到网站 2.将导入的页面在站点中打开为目录式链接 www.abc.com/softlink/ 环境: 1.windows服务器 2.帝国C ...

  10. 编辑器和IDE的区别以及WebStorm和PhpStorm的区别

    编辑器和IDE的区别: 编辑器就是纯粹编辑文本的编辑器,识别级别在文字级,只显示你想写入和打开的文本内容,不管你写什么内容,只提供接收与显示功能,Windows自带的写字板就是最简单的编辑器.举个生活 ...