案例-完成文件下载
先创建一个文件夹叫download
然后在文件里创建几个例子文件
然后这个文件夹复制到你的Webcontion下去
然后在Webcontion上创建一个jsp,叫download
除了能在标签种能设置post请求以外的所有的标签都是get请求,就是不能设置post请求的标签都是get请求
所以a标签就是个get请求
因为是get请求所以这个filename就是所带的参数 让他服务器知道顾客点的是那个 所给出相应的资源
然后在src下创建一个包叫com.oracle.demo01在创建一个Servlet叫DownloadServlet
然后在jsp写
重启服务器显示出
a.png
a.txt
是乱码
a.wmv和a.rar都是直接下载
游览器能解析的就直接打开 不能解析的就提供下载
上述代码可以将图片从服务器端传输到浏览器,但浏览器直接解析图片显示在页面上, 而不是提供下载,我们需要设置两个响应头,告知浏览器文件的类型和文件的打开方 式。
1)告知浏览器文件的类型:response.setContentType(文件的MIME类型);
2)告示浏览器文件的打开方式是下载:
response.setHeader("Content-Disposition","attachment;filename=文件名称");
写完后重启服务器显示:
然后在做一个实例
右键你的图片改成中文名字
然后之前jsp的也改成小狗
改完后再重启服务器测试发现
这样的话下载是没有问题的,但是因为码表的问题中文乱码所以名字不显示,为了改正这种情况
但是,如果下载中文文件,页面在下载时会出现中文乱码或不能显示文件名的情况, 原因是不同的浏览器默认对下载文件的编码方式不同,ie是UTF-8编码方式,而火狐 浏览器是Base64编码方式。所里这里需要解决浏览器兼容性问题,解决浏览器兼容 性问题的首要任务是要辨别访问者是ie还是火狐(其他),通过Http请求体中的一 个属性可以辨别
解决乱码方法如下(不要记忆--了解):
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的值
代码如下
运行结果:
一次性验证码
解压到
把CheckImgServlet复制到src里的demo01下 在把包名改了
在把new_words复制到WEB-INF下
在设置你的web-xml
运行出现
在webcontion创建一个jsp
点一下刷新一张图片
response细节点:
- response获得的流不需要手动关闭,web容器(tomcat容器)会帮助我们关闭,
- getWriter和getOutputStream不能同时调用
- 重定向语句一般作为终结代码