前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >filter控制缓存WebCache

filter控制缓存WebCache

作者头像
the5fire
发布2019-02-28 10:48:09
3970
发布2019-02-28 10:48:09
举报

上篇文章简述了一下使用Filter对url进行控制,这篇文章说一下缓存的控制。当然了以此类推的可以得到filter还可以对其他的内容进行控制,比如以前写的《通过java filter设置字符集编码》。这次东西的实现所依靠的就是filter的特性,那么它有什么特性呢?

“同servlet非常类似,Filter就是JAVA组件,请求发送到servlet前,可以使用过滤器Filter截获和处理请求,同时servlet结束以后,响应发回以前同样可以使用过滤器Filter处理响应。WEB容器可以用web.xml部署文件声明何时调用过滤器Filter。”(摘自网络)

那么这里就简单的实现一个通过Filter来控制缓存: 首先建立一个WebCacheFilter.java来实现Filter:

.. code:: java

代码语言:javascript
复制
package com.util;

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;
import javax.servlet.http.HttpSession;

public class WebCacheFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse res = (HttpServletResponse)response;
        //设定缓冲时间为5000秒
        res.setHeader("Cache-control", "max-age=5000");

        /*页面缓存设定 
        * <br>确保浏览器不缓存页面数据 
        res.setHeader("Cache-Control","no-cache"); 
        res.setHeader("Cache-Control","no-store"); 
        res.setDateHeader("Expires", 0); 
        res.setHeader("Pragma","no-cache"); 
        */

        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

}

然后配置web.xml文件,这里设定控制所有的gif文件和jpg文件。也就是从服务器端每隔5000秒才会发一次这种类型的文件过来(如果客户端进行请求的话):

.. code:: xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <filter>
        <filter-name>SessionFilter</filter-name>
        <filter-class>com.util.SessionFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>SessionFilter</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>WebCacheFilter</filter-name>
        <filter-class>com.util.WebCacheFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>WebCacheFilter</filter-name>
        <url-pattern>*.gif</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>WebCacheFilter</filter-name>
        <url-pattern>*.jpg</url-pattern>
    </filter-mapping>
</web-app>

具体效果这里就不演示了,关于缓冲控制有很多成型的组件,比如说OSCache,JCache,更多参考这里:http://www.open-open.com/13.htm

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2011-01-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档