一个网页计数器,用来实现统计网站访问人数功能,doFilter方法体是这样的public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException{
count++; //count在初始化方法中被赋值,表示请求之前的访问量
HttpServletRequest req = (HttpServletRequest)request;
ServletContext context = req.getsession().getServletContext();
context.setAttribute("count",count);
chain.doFilter(request,response);
}理论是客户端请求一次资源过滤一次,服务器将资源给客户端又过滤一次,为什么count不是加了2次呢?
throws IOException,ServletException{
count++; //count在初始化方法中被赋值,表示请求之前的访问量
HttpServletRequest req = (HttpServletRequest)request;
ServletContext context = req.getsession().getServletContext();
context.setAttribute("count",count);
chain.doFilter(request,response);
}理论是客户端请求一次资源过滤一次,服务器将资源给客户端又过滤一次,为什么count不是加了2次呢?
解决方案 »
- myeclipse svn
- 使用getHibernateTemplate().find(hql, object[])出现的怪异问题
- 急救 sqlserver2005连接失败..
- Exception sending context initialized event to listener instance of class
- 有没有谁有孙鑫老师的j2ee视频教程呀
- (高手快来帮帮忙啊)Java下载文件
- 通过axis方法调用webservice问题
- 用jsp怎么调用下面的webservice?
- 程序员之歌(小强作)
- windowxp上运行得好好的ejb程序,到2000出错了?
- 求助mybatis3达人!!!!!熟悉的请进
- 根据一个http网址获取里面的视频地址以及在本地显示
实践时,只有你在chain.doFilter(request,response);语句之后自己做一条count++;
才能将响应返回时的过滤机会利用上。
写在chain.doFilter(request,response);之前的代码 会在请求过程中执行
当请求完成以后 返回响应 不会再执行chain.doFilter(request,response);之前的代码
而是只执行chain.doFilter(request,response);之后的代码。
所以 在一次请求+访问的过程中,过滤器内的代码只会执行一次,区别在于
chain.doFilter(request,response);前后的代码 分别在请求 和 响应两个阶段执行
chain.doFilter(request,response);这句原理是与方法调用的原理一样的。
执行到chain.doFilter(request,response);时,调用下一个过滤器,若没有过滤器,则进入Servlet
Servlet执行完毕,返回到最后一个过滤器,然后依次返回到第一个过滤器。当第一个过滤器执行完毕,会返回到客户端。 这么说 你明白了吗?