实现文件下载
下载资源我们在日常中也很常用,它是怎么做到的呢?要能够给别人下载,服务器就应该有这个资源
- 现在我web站点下有一个图片了!
- 既然浏览器发送所有的请求都是去找Servlet的话,那么我就写一个Servlet,当别人访问我这个Servlet的时候,它们就可以下载我这个图片了!
- java的文件上传下载都是通过io流来完成的,既然要下载图片,首先要能够读取到它
//获取到资源的路径 String path = this.getServletContext().getRealPath("/download/1.png"); //读取资源 FileInputStream fileInputStream = new FileInputStream(path); //获取到文件名,路径在电脑上保存是\\形式的。 String fileName = path.substring(path.lastIndexOf("\\") + 1);
- 告诉浏览器,我要下载这个文件
//设置消息头,告诉浏览器,我要下载1.png这个图片 response.setHeader("Content-Disposition", "attachment; filename="+fileName);
- 将读取到的内容回送给浏览器
//把读取到的资源写给浏览器 int len = 0; byte[] bytes = new byte[1024]; ServletOutputStream servletOutputStream = response.getOutputStream(); while ((len = fileInputStream.read(bytes)) > 0) { servletOutputStream.write(bytes, 0, len); } //关闭资源 servletOutputStream.close(); fileInputStream.close();
- 当我访问时,浏览器就提示下载了。
- 也可以成功打开!
- 现在问题又有了,如果我文件的名字是中文呢?
- 我们再访问一下,发现名字乱码了(怎么都是乱码)
- 为了解决文件名乱码,我们要进行URL编码,代码如下:
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
- 再次访问时,文件名乱码问题就解决了!
实现自动刷新
以规定的时间让页面刷新,更新资源
- 让浏览器实现自动刷新,那肯定又是修改消息头了。
//每3秒自动刷新网页一次 response.setHeader("Refresh", "3");
- 为了更好的看效果,我们加入时间值进去
response.getWriter().write("time is :" + System.currentTimeMillis());
- 每三秒时间值就会发生变化
- 学完上面的,好像没有什么用,自己上网的时候谁看得见这样的东西。自动刷新,能够实现页面的跳转】
- 我们登陆完网站,很多时候都会看见【登陆成功,3秒后自动跳转….】,其实这个就是用Refresh来完成的。
response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("3秒后跳转页面....."); //三秒后跳转到index.jsp页面去,web应用的映射路径我设置成/,url没有写上应用名 response.setHeader("Refresh", "3;url='/index.jsp'");
- 看下效果
设置缓存
浏览器本身就存在着缓存机制
- 当我第一次访问index.jsp时,浏览器向服务器发了两次请求【一个是网页的,一个是图片的】
- 当我第二次访问index.jsp的时候,浏览器将图片缓存起来了!图片不是重新加载的,是从缓存里面取出来的。
- 像股票类型的网页是不能取缓存的数据的,数据都是要不断更新的。下面我就禁止缓存的功能
//浏览器有三消息头设置缓存,为了兼容性!将三个消息头都设置了 response.setDateHeader("Expires", -1); response.setHeader("Cache-Control","no-cache"); response.setHeader("Pragma", "no-cache"); //这里为了看效果 PrintWriter printWriter = response.getWriter(); printWriter.print("你好啊" + new Date().toString());
- 当然了,如果页面有些数据不长期更新,你就将它设置成缓存,这样可以提高服务器的性能