页面上提供一些超链接,对应的服务器程序中有相关资源,当超链接被单击时,可以下载服务器资源
版本1:将资源内容响应到浏览器
1在WebContent下创建资源如:
葫芦娃.txt 葫芦娃第一集1 2 3 abc
美女.jpg
aaa.txt helloword 你好
2在WebContent下创建download.html
<a href="/day33_04/MyServlet?filename=葫芦娃.txt" >葫芦娃</a>
<a href="/day33_04/MyServlet?filename=美女.jpg" >美女</a>
<a href="/day33_04/MyServlet?filename=aaa.txt" >aaa</a>
注意:MyServlet是web.xml中url-prttern的名字
3创建Servlet类
继承HttpServlet
doget方法中
//1获取浏览器提交的文件名称
String filename = request.getParameter("filename");
//2文件名乱码
filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
//3通过文件名读取对应资源,使用ServletContext获取输入流,并响应到浏览器
ServletContext boss = getServletContext();
InputStream is = boss.getResourceAsStream("/"+filename);
//4通过输出流响应到浏览器
ServletOutputStream out = response.getOutputStream();
byte[] bytes = new byte[1024];
int len;
while((len=is.read(bytes))!=-1){
sos.write(bytes, 0, len);
}
//5释放资源
is.close();
步骤:
要将资源响应到浏览器 需要IO流 使用字节输入输出流
源文件:WebContent下的资源 可能有中文 需要转码
目的地:浏览器 response响应
首先获取源文件
网页超链接 链接到资源 获取资源文件名,有中文转码
读取源文件
需要boss的getResourceAsStream
写入目的地
需要响应 response响应 getOutputStream()
注意点:
运行时使用浏览器download.html
1在WebContent下创建资源如:
葫芦娃.txt 葫芦娃第一集1 2 3 abc
美女.jpg
aaa.txt helloword 你好
2在WebContent下创建download.html
<a href="/day33_04/MyServlet?filename=葫芦娃.txt" >葫芦娃</a>
<a href="/day33_04/MyServlet?filename=美女.jpg" >美女</a>
<a href="/day33_04/MyServlet?filename=aaa.txt" >aaa</a>
注意:MyServlet是web.xml中url-prttern的名字
3创建Servlet类
继承HttpServlet
doget方法中
//1获取浏览器提交的文件名称
String filename = request.getParameter("filename");
//2文件名乱码
filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
//3通过文件名读取对应资源,使用ServletContext获取输入流,并响应到浏览器
ServletContext boss = getServletContext();
InputStream is = boss.getResourceAsStream("/"+filename);
//4通过输出流响应到浏览器
ServletOutputStream out = response.getOutputStream();
byte[] bytes = new byte[1024];
int len;
while((len=is.read(bytes))!=-1){
sos.write(bytes, 0, len);
}
//5释放资源
is.close();
步骤:
要将资源响应到浏览器 需要IO流 使用字节输入输出流
源文件:WebContent下的资源 可能有中文 需要转码
目的地:浏览器 response响应
首先获取源文件
网页超链接 链接到资源 获取资源文件名,有中文转码
读取源文件
需要boss的getResourceAsStream
写入目的地
需要响应 response响应 getOutputStream()
注意点:
运行时使用浏览器download.html
版本2:实现下载,弹窗提示客户进行下载处理
//在响应之前,要告诉浏览器采取的处理方式----进行下载
response.setHeader("content-Disposition","attachment; filename"+filename);
版本3:实现下载,弹窗提示客户进行下载处理
filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
byte[] bytes2 = filename.getBytes("GBK");
String Downloadfilename = new String(bytes2, "ISO-8859-1");
步骤
资源要先响应到浏览器 然后从浏览器通过弹窗下载到客户端
资源-->Tomcat-->浏览器 浏览器-->Tomcat-->客户端
资源到浏览器ISO-8859-1-->UTF-8
浏览器到客户端 封装成GBK 然后再封装成ISO-8859-1
通过Tomcat将ISO-8859-1剥开成GBK
//在响应之前,要告诉浏览器采取的处理方式----进行下载
response.setHeader("content-Disposition","attachment; filename"+filename);
版本3:实现下载,弹窗提示客户进行下载处理
filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8");
byte[] bytes2 = filename.getBytes("GBK");
String Downloadfilename = new String(bytes2, "ISO-8859-1");
步骤
资源要先响应到浏览器 然后从浏览器通过弹窗下载到客户端
资源-->Tomcat-->浏览器 浏览器-->Tomcat-->客户端
资源到浏览器ISO-8859-1-->UTF-8
浏览器到客户端 封装成GBK 然后再封装成ISO-8859-1
通过Tomcat将ISO-8859-1剥开成GBK
注意:
如果资源创建在WebContent下重新创建一个文件夹xx,
那么版本1的3处 InputStream is = boss.getResourceAsStream("/"+filename);
将"/"改为"/xx/" 否则会报空指针异常NullPointerException