通过实例讲解Java_ Filter我们常见的应用方法

一、Filter常见的应用(2)——不缓存页面

  1、禁止浏览器缓存所有动态页面的过滤器:

  (1)有3个HTTP响应头字段都可以禁止浏览器缓存当前页面,它们在Servlet中的实例代码如下:response.setDateHeader("Expires",-1);

  response.setHeader("Cache-Control","no-cache");

  response.setHeader("Pragma","no-cache");

  (2)、并不是所有的浏览器都能完全支持上面的三个响应头,因此最好是同时使用上面的三个响应头。

  (3)Expires数据头:值为GMT时间值,为-1指浏览器不要缓存页面。

  2、Cache-Control响应头有两个常用值:

  (1)no-cache指浏览器不要缓存当前页面

  (2)max-age:xxx指浏览器缓存页面xxx秒。

  实例:

  [java]

  package com.hbsi.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 NoCatchFilter implements Filter {

  public void destroy() {

  // TODO Auto-generated method stub

  }

  public void doFilter(ServletRequest request, ServletResponse response,

  FilterChain chain) throws IOException, ServletException {

  HttpServletRequest req=(HttpServletRequest) request;

  HttpServletResponse resp=(HttpServletResponse) response;

  resp.setDateHeader("expires",-1);

  resp.setHeader("Cache-Control","no-cache");

  resp.setHeader("Pragma","no-cache");

  chain.doFilter(req, resp);

  }

  public void init(FilterConfig filterConfig) throws ServletException {

  // TODO Auto-generated method stub

  }

  }

二、Filter常见的应用(3)——控制浏览器缓存页面中的静态资源的过滤器

  1、场景:有些动态页面中引用了一些图片或css文件以修饰页面效果,香港服务器,这些图片和css文件经常是不变化的,所以为减轻服务器的压力,可以使用filter控制浏览器缓存这些文件,虚拟主机,以提升服务器的性能。

  实例:

  [java]

  package com.hbsi.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 ExpiresFilter implements Filter {

  private FilterConfig config;

  public void destroy() {

  // TODO Auto-generated method stub

  }

  public void doFilter(ServletRequest request, ServletResponse response,

  FilterChain chain) throws IOException, ServletException {

  HttpServletRequest req=(HttpServletRequest) request;

  HttpServletResponse resp=(HttpServletResponse) response;

  String uri=req.getRequestURI();

  if(uri.endsWith(".css")){

  long time=Integer.parseInt(config.getInitParameter("css"))*1000;

  resp.setDateHeader("expries", System.currentTimeMillis()+time);

  }else if(uri.endsWith(".jpg")){

  long time=Integer.parseInt(config.getInitParameter("jpg"))*1000;

  resp.setDateHeader("expries",System.currentTimeMillis()+time);

  }else if(uri.endsWith(".js")){

  long time=Integer.parseInt(config.getInitParameter("js"))*1000;

  resp.setDateHeader("expries",System.currentTimeMillis()+time);

  }

  chain.doFilter(req, resp);

  }

  public void init(FilterConfig filterConfig) throws ServletException {

  this.config=filterConfig;

  }

  }

  Web.xml中的过滤器配置:

  [html]

  <filter>

  <filter-name>ExpiresFilter</filter-name>

  <filter-class>com.hbsi.filter.ExpiresFilter</filter-class>

  <init-param>

  <param-name>css</param-name>

  <param-value>120</param-value>

  </init-param>

  <init-param>

  <param-name>jpg</param-name>

  <param-value>120</param-value>

  </init-param>

  <init-param>

  <param-name>js</param-name>

  <param-value>120</param-value>

  </init-param>

  </filter>

  <filter-mapping>

  <filter-name>ExpiresFilter</filter-name>

  <url-pattern>*.css</url-pattern>

  </filter-mapping>

  <filter-mapping>

  <filter-name>ExpiresFilter</filter-name>

  <url-pattern>*.jpg</url-pattern>

  </filter-mapping>

  <filter-mapping>

  <filter-name>ExpiresFilter</filter-name>

  <url-pattern>*.js</url-pattern>

  </filter-mapping>

  三、Filter常见的应用(4)——使用Filter实现URL级别的权限认证

不要哭,你要努力地往前看,你要相信阳光总在风雨后,你最终会看到彩虹的。

通过实例讲解Java_ Filter我们常见的应用方法

相关文章:

你感兴趣的文章:

标签云: