页面上提供一些超链接,对应的服务器程序中有相关资源,当超链接被单击时,可以下载服务器资源
版本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
版本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
注意:
如果资源创建在WebContent下重新创建一个文件夹xx,
那么版本1的3处 InputStream is = boss.getResourceAsStream("/"+filename);
将"/"改为"/xx/" 否则会报空指针异常NullPointerException