Chinaunix首页 | 论坛 | 博客
  • 博客访问: 250823
  • 博文数量: 34
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 961
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-11 17:19
个人简介

没有最好的语言,只有最适合的语言。

文章分类

全部博文(34)

文章存档

2016年(2)

2013年(32)

我的朋友

分类: Web开发

2013-07-11 19:10:55

   该过滤器对象放置在java.servlet包中,其名称为Filter。这只是一种接口 。除了这个接口外,与过滤器相关的对象还有FilterConfig对象与FilterChain对象,这两个对象也同样是接口对象,分别为过滤器的配置 对象与过滤器的传递工具。

     其中的FilterConfig接口,主要用于获取过滤器中的配置信息。有(1)getFilterName(); 用于获取过滤器的名称(2)getServletContext();获取Servlet上下文(3)getInitParameter(String name);获取过滤器的指定的初始化参数值(4)getInitParameterNames();获取过滤器的所有初始化参数

    其中我对ServletContext有点没明白,后来查了一下,发现ServletContext有点类似application ,而application对象用于保存所有应用程序中的公有数据。它在服务器启动时自动创建,在服务器停止时销毁,但application没有被销毁 时,所有用户都可以共享该application对象。有点类似全局变量。里面有对ServletContext进行了仔细的说明。

  下面的程序是一个网站来访数量的统计,当访问该网站的时候,先经过过滤器,过滤器对其进行一次自增。

(1)创建的名称为CountFilter的类,继承Filter,是一个过滤器对象,通过这个统计访问人数,代码如下:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

 


public class CountFilter implements Filter {
 //来访数量
 private int count;
 public void destroy() {
  
 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  count++; //访问数量自增
  //将ServletRequest转换成HttpServletRequest
  HttpServletRequest req = (HttpServletRequest)request;
  //获取ServletContext
  ServletContext context = req.getSession().getServletContext();
  //将来访数量值放入到ServletContext中
  context.setAttribute("count", count);
  //向下传递过滤器
  chain.doFilter(request, response);
 }

 public void init(FilterConfig filterConfig) throws ServletException {
  String param = filterConfig.getInitParameter("count");
  count = Integer.valueOf(param);
 }

 

}

(2)配置创建的过滤器对象,这个配置在web.xml文件下进行操作。代码如下:


 xmlns=""
 xmlns:xsi=""
 xsi:schemaLocation="
 ">
   
 
    index.jsp      
 


 
 CountFilter
 CountFilter
 
  count
  519 //预先设置了已访问人数
 


 
 CountFilter
 /index.jsp
 


(3)程序首页index.jsp如下:


  


   欢迎光临,

   你是本站的第【<%=application.getAttribute("count") %>】位访客
  


 

通过这次学习,我慢慢明白了过滤器的工作机制,对其有了更深入的了解

阅读(1844) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~