禁止浏览器缓存页面
由于大多数网页内容都不会发生变化,因此,为了加快访问速度,很多浏览器都对访问过的页面进行缓存。但是,在某些特定的场合下,缓冲页面会影响网页的部分功能。例如,动态页面中的Javascript脚本文件如果得不到及时更新,就会影响网页效果。为了避免这种情况的发生,在HTTP响应消息中,需要设置以下头字段:
Expires:0
Cache-Control:no-cache
Pragma : no-cache
上面设置的三个响应头都是用来禁止浏览器缓存页面,由于不同的浏览器对它们的支持不同,一般在响应消息中将这三个头字段都进行设置。接下来,通过一个向客户端输出随机数和产生Form表单的案例,学习如何使用response对象禁止浏览器缓冲页面,如例1所示。
例1 CacheServlet.java
1 package cn.itcast.chapter05.response;
2 import java.io.*;
3 import javax.servlet.*;
4 import javax.servlet.http.*;
5 public class CacheServlet extends HttpServlet {
6 public void doGet(HttpServletRequest request,
HttpServletResponse response)
7 throws ServletException, IOException {
8 response.setContentType("text/html;charset=utf-8");
9 response.setDateHeader("Expires",0);
10 response.setHeader("Cache-Control","no-cache");
11 response.setHeader("Pragma","no-cache");
12 PrintWriter out = response.getWriter();
13 out.println("本次响应的随机数为:" + Math.random());
14 out.println("<form action='NotServlet'" + "method='POST'>" +
15 "第一个参数:<input type='text' name='p1'><br>" +
16 "第二个参数:<textarea name='p2'></textarea><br>" +
17 "<input type='submit' value='提交'> " +
18 "</form>");
19 }
20 public void doPost(HttpServletRequest request,
HttpServletResponse response)
21 throws ServletException, IOException {
22 doGet(request, response);
23 }
24 }
在web.xml中配置完CacheServle映射后,启动Tomcat服务器,在浏览器的地址栏中输入URL地址http://localhost:8080/chapter05/CacheServlet
访问CacheServlet,浏览器显示的结果如图1所示。
图1 运行结果
在图1中,当表单数据填写完成后,点击“提交”按钮,此时,服务器返回一个404错误的页面,该页面暂时无需理会。点击浏览器的回退按钮,返回到刚才填写的表单页面,发现浏览器之前填写的表单内容都不在了,而且重新生成了一个随机数。由此说明,HttpServletRespons对象实现了禁止浏览器缓存页面的功能。