request:只对用户的一次请求有效。
session:对一次会话有效,会话的生命周期不结束,会话就不结束,属于某一个浏览器,浏览器关闭则Session消失,或者手动进行invalidate销毁Session。
servletContext:对当前应用有效。(应用:网站计数器,访问量)
pageContext:
它们的特点都是在维护一个Map集合
重写init,destory方法:
init方法的特点是当第一个用户访问服务器时首先先调用init方法,利用它的这个特点,我们先通过数据库调用上一次服务器重启,宕机时存入的访问量的数值。
@Override
public void init() throws ServletException {
//调用service
VisitedService visitedService = new VisitedService();
//获取访问量
int visited = visitedService.findVisited();
//获取servletContext 对象
ServletContext servletContext = this.getServletContext();
//将获取的visited访问量封装到servletContext对象中
servletContext.setAttribute("visited", visited);
}
这时在登陆成功的代码板块中我们对访问量进行调整,如果服务器第一次被访问,那么访问量为1,如果不是第一次访问visited++;
/*
* 网站计数器,直接调用getServletContext();方法即可得到ServletContext对象
*/
ServletContext servletContext = this.getServletContext();
if(servletContext.getAttribute("visited") == null){
servletContext.setAttribute("visited", 1);
}else{
int visited = (int)servletContext.getAttribute("visited");
visited++;
servletContext.setAttribute("visited", visited);
}
Destory()方法的特点是:当服务器重启,死机时,调用Destory()方法,所以我们需要将访问量存储到数据库中,调用destory()方法:
@Override
public void destroy() {
//获取servletContext 对象
ServletContext servletContext = this.getServletContext();
int visited = (int)servletContext.getAttribute("visited");
//调用service
VisitedService visitedService = new VisitedService();
//存储访问量
visitedService.updateVisited(visited);
}
网友评论