使用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配置如下:
<filter>
<filter-name>PageVisitFilter</filter-name>
<filter-class>cn.web.filter.PageVisitFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PageVisitFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
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]}");