有关Filter(过滤器)实现禁用缓存和使用缓存操作的实现
2014-01-10 16:10
489 查看
1.缓存:
为了提高访问网页的速率,InternetExplorer浏览器会采用累积式加速的方法,将曾经访问的网页内容(包括图片以及cookie文件等)存放在电脑里。这个存放空间,就称它为IE缓存。以后每次访问网站时,IE会首先搜索这个目录,其中已经有访问过的内容,那IE就不必从网上下载,而直接从缓存中调出来,从而提高了访问网站的速率。
2.jsp采用模板元素设置禁用缓存的代码
[html] view
plaincopy
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
说明:
<meta http-equiv="pragma" content="no-cache">
禁止浏览器从本地缓存中调阅页面,网页不保存在缓存中,每次访问都刷新页面
<meta http-equiv="cache-control" content="no-cache">
同上说明
<meta http-equiv="expires" content="0">
网页在缓存中的过期时间为0,一旦网页过期,必须从服务器上重新订阅
一::::根据以上的了解,我们进行采用Filter过滤器 进行完成动态web资源访问的时候,禁用缓存的操作效果的实现
1.创建Filter过滤器的实现类
[java] view
plaincopy
package www.csdn.net.day55.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NoCacheFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setDateHeader("Expires", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
// 修改
chain.doFilter(request, response);// 执行目标方法
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
2.在web.xml文件进行配置操作
[html] view
plaincopy
<filter>
<filter-name>NoCacheFilter</filter-name>
<filter-class>www.csdn.net.day55.filter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>NoCacheFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
根据以上配置 就可以实现,当以.do结尾,访问web资源的时候,即可达到实现禁用缓存的效果.
怎么演示尼,下面我创建一个演示的servlet
[java] view
plaincopy
package www.csdn.net.day55.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("--------------------doGet------------------");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
serlvet的映射为文件web.xml中的陪配置
[html] view
plaincopy
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UserServlet</servlet-name>
<servlet-class>www.csdn.net.day55.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/userOper.do</url-pattern>
</servlet-mapping>
3.演示采用最新IE版本中自带的开发人员工具 (通过一下设置打开)
1.找到锯齿工具条
2.选择F12开发人员工具,弹出一下效果
3.在地址栏中输入访问的地址,例如:http://localhost:8080/day55/userOper.do,点击上图中的绿色三角形.变成如下效果
4.然后可以在地址栏中回车,观察效果,可以看到每次返回的结果都是200,这也说明了每次都是从服务器获取页面,并刷新的操作.
备注: 在每次请求后 servlet 都会在后台打印输出一次
二::::根据以上的了解,我们进行采用Filter过滤器 进行完成动态web资源访问的时候,采用缓存的操作的效果实现
1.创建Filter过滤器的实现类
[java] view
plaincopy
package www.csdn.net.day55.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CacheFilter implements Filter{
private FilterConfig filterConfig;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
//设置缓存
//把请求的 req,res 造型为HttpServletResponse,HttpServletRequest
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
String date = filterConfig.getInitParameter("date");
response.setDateHeader("Expires", System.currentTimeMillis()+Integer.valueOf(date)*1000);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
}
}
2.在web.xml文件进行配置操作
[html] view
plaincopy
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>www.csdn.net.day55.filter.CacheFilter</filter-class>
<init-param>
<param-name>date</param-name>
<!-- 10毫秒 -->
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
根据以上配置 就可以实现,当以.do结尾,访问web资源的时候,即可达到实现缓存的效果.
怎么演示尼(采用上面的那个写好的Servlet即可测试)
3.演示采用最新IE版本中自带的开发人员工具 (通过一下设置打开)1.找到锯齿工具条
2.选择F12开发人员工具,弹出一下效果
3.在地址栏中输入访问的地址,例如:http://localhost:8080/day55/userOper.do,点击上图中的绿色三角形.变成如下效果
4.然后可以在地址栏中回车,观察效果
效果说明:
当第一次访问的时候,返回结果是200,代表从服务获取,并刷新。
当第二次访问的时候如果在缓存的有效时间内 ,就直接使用,返回的结果可以看到是304
上图可以说明:第三次,第四次访问 ,都在缓存的有效时间内。
当第五次访问的时候,由于不在缓存的有效时间内,又重新从服务获取,并刷新
第六次,第七次访问 ,都在缓存的有效时间内,直接使用.
通过以上分析 ,希望你对缓存的使用有更深入的了解.
备注: 在每次请求后 ,会根据返回的结果是否是200,如果是200 servlet 都会在后台打印输出一次,否则就不打印
为了提高访问网页的速率,InternetExplorer浏览器会采用累积式加速的方法,将曾经访问的网页内容(包括图片以及cookie文件等)存放在电脑里。这个存放空间,就称它为IE缓存。以后每次访问网站时,IE会首先搜索这个目录,其中已经有访问过的内容,那IE就不必从网上下载,而直接从缓存中调出来,从而提高了访问网站的速率。
2.jsp采用模板元素设置禁用缓存的代码
[html] view
plaincopy
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
说明:
<meta http-equiv="pragma" content="no-cache">
禁止浏览器从本地缓存中调阅页面,网页不保存在缓存中,每次访问都刷新页面
<meta http-equiv="cache-control" content="no-cache">
同上说明
<meta http-equiv="expires" content="0">
网页在缓存中的过期时间为0,一旦网页过期,必须从服务器上重新订阅
一::::根据以上的了解,我们进行采用Filter过滤器 进行完成动态web资源访问的时候,禁用缓存的操作效果的实现
1.创建Filter过滤器的实现类
[java] view
plaincopy
package www.csdn.net.day55.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NoCacheFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setDateHeader("Expires", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
// 修改
chain.doFilter(request, response);// 执行目标方法
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
2.在web.xml文件进行配置操作
[html] view
plaincopy
<filter>
<filter-name>NoCacheFilter</filter-name>
<filter-class>www.csdn.net.day55.filter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>NoCacheFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
根据以上配置 就可以实现,当以.do结尾,访问web资源的时候,即可达到实现禁用缓存的效果.
怎么演示尼,下面我创建一个演示的servlet
[java] view
plaincopy
package www.csdn.net.day55.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("--------------------doGet------------------");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
serlvet的映射为文件web.xml中的陪配置
[html] view
plaincopy
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>UserServlet</servlet-name>
<servlet-class>www.csdn.net.day55.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserServlet</servlet-name>
<url-pattern>/userOper.do</url-pattern>
</servlet-mapping>
3.演示采用最新IE版本中自带的开发人员工具 (通过一下设置打开)
1.找到锯齿工具条
2.选择F12开发人员工具,弹出一下效果
3.在地址栏中输入访问的地址,例如:http://localhost:8080/day55/userOper.do,点击上图中的绿色三角形.变成如下效果
4.然后可以在地址栏中回车,观察效果,可以看到每次返回的结果都是200,这也说明了每次都是从服务器获取页面,并刷新的操作.
备注: 在每次请求后 servlet 都会在后台打印输出一次
二::::根据以上的了解,我们进行采用Filter过滤器 进行完成动态web资源访问的时候,采用缓存的操作的效果实现
1.创建Filter过滤器的实现类
[java] view
plaincopy
package www.csdn.net.day55.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CacheFilter implements Filter{
private FilterConfig filterConfig;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
//设置缓存
//把请求的 req,res 造型为HttpServletResponse,HttpServletRequest
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
String date = filterConfig.getInitParameter("date");
response.setDateHeader("Expires", System.currentTimeMillis()+Integer.valueOf(date)*1000);
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig=filterConfig;
}
}
2.在web.xml文件进行配置操作
[html] view
plaincopy
<filter>
<filter-name>CacheFilter</filter-name>
<filter-class>www.csdn.net.day55.filter.CacheFilter</filter-class>
<init-param>
<param-name>date</param-name>
<!-- 10毫秒 -->
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CacheFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
根据以上配置 就可以实现,当以.do结尾,访问web资源的时候,即可达到实现缓存的效果.
怎么演示尼(采用上面的那个写好的Servlet即可测试)
3.演示采用最新IE版本中自带的开发人员工具 (通过一下设置打开)1.找到锯齿工具条
2.选择F12开发人员工具,弹出一下效果
3.在地址栏中输入访问的地址,例如:http://localhost:8080/day55/userOper.do,点击上图中的绿色三角形.变成如下效果
4.然后可以在地址栏中回车,观察效果
效果说明:
当第一次访问的时候,返回结果是200,代表从服务获取,并刷新。
当第二次访问的时候如果在缓存的有效时间内 ,就直接使用,返回的结果可以看到是304
上图可以说明:第三次,第四次访问 ,都在缓存的有效时间内。
当第五次访问的时候,由于不在缓存的有效时间内,又重新从服务获取,并刷新
第六次,第七次访问 ,都在缓存的有效时间内,直接使用.
通过以上分析 ,希望你对缓存的使用有更深入的了解.
备注: 在每次请求后 ,会根据返回的结果是否是200,如果是200 servlet 都会在后台打印输出一次,否则就不打印
相关文章推荐
- 有关Filter(过滤器)实现禁用缓存和使用缓存操作的实现
- 有关采用Filter实现禁用缓存和使用缓存操作实现与分析
- 有关采用Filter实现禁用缓存和使用缓存操作实现与分析
- 有关采用Filter实现禁用缓存和使用缓存操作实现与分析
- 有关采用Filter实现禁用缓存和使用缓存操作实现与分析
- 使用Filter 过滤器实现禁用缓存
- 使用Filter 过滤器实现禁用缓存
- 设置不使用缓存的过滤器(ClearCacheFilter)
- 设置不使用缓存的过滤器(ClearCacheFilter)
- 使用过滤器Filter实现网页静态化
- 使用Filter实现编码过滤器
- Magento操作Cookie 并且使用观察者&事件来禁用单页面全页缓存(EE FPC)
- Auzre微软云Redis后台StackExchange.Redis使用KeySpaceNotification实现缓存过期前操作/处理一些事件
- 【系统架构】缓存Memcache 使用原子性操作add,实现并发锁
- 《Lua程序设计》9.2 管道(pipe)与过滤器(filter) 包含使用协同函数实现“生产者——消费者”问题的实例代码
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- 使用filter实现url级别内存缓存示例
- 2013-01-28 09:46 PHP阻止页面后退如何用PHP实现禁用浏览器的后退,使后退的页面失效或链接到别的地方?使用php禁止浏览器缓存?
- 缓存MEMCACHE 使用原子性操作add,实现并发锁
- 设置不使用缓存的过滤器(ClearCacheFilter)