使用Filter来统一控制页面的访问次数,Filter类控制如下所示:
package cn.web.filter; import java.io.IOException; import java.util.HashMap; import java.util.Map; 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; import javax.servlet.http.HttpServletResponse; public class PageVisitFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; //得到当前访问的资源 String uri = request.getRequestURI(); //得到保存页面访问次数的map容器 ServletContext context = request.getSession().getServletContext(); Map pagecount = (Map) context.getAttribute("pagecount"); if(pagecount==null){ pagecount = new HashMap(); context.setAttribute("pagecount", pagecount); } //从容器中得到当前资源的访问次数 Integer count = (Integer)pagecount.get(uri); if(count==null){ count = 1; pagecount.put(uri, count); }else{ count++; pagecount.put(uri, count); } chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
Web.xml配置如下:
jsp页面获取访问次数:
${applicationScope.pagecount[pageContext.request.requestURI] }html页面获取访问次数(html动态的调用jsp,jsp获取数据返回给html):
<!-- html页面,调用jsp获取页面访问次数 --> <body> 当前页面访问次数: <script type="text/javascript" src="/test/MyJsp.jsp?page=/test/MyHtml.html"></script> </body> <!-- jsp页面,获取当前访问的次数 --> document.write("${applicationScope.pagecount[param.page]}");