案例-完成文件下载

先创建一个文件夹叫download

然后在文件里创建几个例子文件

response输出文件到浏览器 response 文件_重启

 

 

 然后这个文件夹复制到你的Webcontion下去

response输出文件到浏览器 response 文件_get请求_02

 

 

 然后在Webcontion上创建一个jsp,叫download

response输出文件到浏览器 response 文件_重启_03

 

 

 除了能在标签种能设置post请求以外的所有的标签都是get请求,就是不能设置post请求的标签都是get请求

所以a标签就是个get请求

因为是get请求所以这个filename就是所带的参数 让他服务器知道顾客点的是那个 所给出相应的资源

 

response输出文件到浏览器 response 文件_get请求_04

 

 

 然后在src下创建一个包叫com.oracle.demo01在创建一个Servlet叫DownloadServlet

response输出文件到浏览器 response 文件_服务器_05

 

 

 然后在jsp写

response输出文件到浏览器 response 文件_get请求_06

 

 

 重启服务器显示出

a.png

response输出文件到浏览器 response 文件_get请求_07

 

 

a.txt

response输出文件到浏览器 response 文件_服务器_08

 

 是乱码

a.wmv和a.rar都是直接下载

response输出文件到浏览器 response 文件_response输出文件到浏览器_09

response输出文件到浏览器 response 文件_重启_10

 

 游览器能解析的就直接打开 不能解析的就提供下载

 

 

上述代码可以将图片从服务器端传输到浏览器,但浏览器直接解析图片显示在页面上, 而不是提供下载,我们需要设置两个响应头,告知浏览器文件的类型和文件的打开方 式。

1)告知浏览器文件的类型:response.setContentType(文件的MIME类型);

2)告示浏览器文件的打开方式是下载:

response.setHeader("Content-Disposition","attachment;filename=文件名称");

response输出文件到浏览器 response 文件_服务器_11

 

 写完后重启服务器显示:

response输出文件到浏览器 response 文件_重启_12

response输出文件到浏览器 response 文件_服务器_13

response输出文件到浏览器 response 文件_response输出文件到浏览器_14

response输出文件到浏览器 response 文件_重启_15

 

 然后在做一个实例

 右键你的图片改成中文名字

response输出文件到浏览器 response 文件_get请求_16

 

 然后之前jsp的也改成小狗

response输出文件到浏览器 response 文件_服务器_17

 

 改完后再重启服务器测试发现

response输出文件到浏览器 response 文件_get请求_18

 

 这样的话下载是没有问题的,但是因为码表的问题中文乱码所以名字不显示,为了改正这种情况

 

但是,如果下载中文文件,页面在下载时会出现中文乱码或不能显示文件名的情况, 原因是不同的浏览器默认对下载文件的编码方式不同,ie是UTF-8编码方式,而火狐 浏览器是Base64编码方式。所里这里需要解决浏览器兼容性问题,解决浏览器兼容 性问题的首要任务是要辨别访问者是ie还是火狐(其他),通过Http请求体中的一 个属性可以辨别

 

response输出文件到浏览器 response 文件_服务器_19

 

 

解决乱码方法如下(不要记忆--了解):

String filenameEncoder=””;

if (agent.contains("MSIE")) {

// IE浏览器

filenameEncoder= URLEncoder.encode(filename, "utf-8");

filenameEncoder= filenameEncoder.replace("+", " ");

} else if (agent.contains("Firefox")) {

// 火狐浏览器

BASE64Encoder base64Encoder = new BASE64Encoder();

filenameEncoder= "=?utf-8?B?"

+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";

} else {

// 其它浏览器

filenameEncoder= URLEncoder.encode(filename, "utf-8");

}

 

其中agent就是请求头User-Agent的值

代码如下

response输出文件到浏览器 response 文件_response输出文件到浏览器_20

 

 运行结果:

response输出文件到浏览器 response 文件_重启_21

 

 一次性验证码

response输出文件到浏览器 response 文件_get请求_22

 

 解压到

response输出文件到浏览器 response 文件_服务器_23

 

 把CheckImgServlet复制到src里的demo01下 在把包名改了

response输出文件到浏览器 response 文件_服务器_24

 

 

response输出文件到浏览器 response 文件_response输出文件到浏览器_25

 

 在把new_words复制到WEB-INF下

response输出文件到浏览器 response 文件_get请求_26

 

 在设置你的web-xml

response输出文件到浏览器 response 文件_重启_27

 

 运行出现

response输出文件到浏览器 response 文件_response输出文件到浏览器_28

在webcontion创建一个jsp

response输出文件到浏览器 response 文件_get请求_29

 

 

response输出文件到浏览器 response 文件_服务器_30

 

 点一下刷新一张图片

 

response细节点:

  1. response获得的流不需要手动关闭,web容器(tomcat容器)会帮助我们关闭,
  2. getWriter和getOutputStream不能同时调用
  3. 重定向语句一般作为终结代码