JavaWeb_网站计数器
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
-
实现效果
每次登陆成功之后,浏览次数+1,退出重新登陆后,延续退出时的浏览次数
-
思路
用到的工具:数据库(写工具类调用数据库,退出系统时,存数据;登录系统时,写数据)、servletContext(this.getServletContext()方法)、destroy方法(重写servlet方法)、init方法(重写servlet方法)
-
代码
a、读写数据库的工具类(准备)
public class VisitedUtil { //读取访问次数 public static int readVisited(){ int res=0; Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; try { conn=ConnUtil.getConnection(); String sql="select * from tb_visited"; ps=conn.prepareStatement(sql); rs = ps.executeQuery(); if (rs.next()){ res=rs.getInt("visited"); } } catch (SQLException e) { e.printStackTrace(); } finally { ConnUtil.close(rs,ps,conn); } return res; } //写入访问次数 public static void writeVisited(int res){ Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; try { conn=ConnUtil.getConnection(); String sql="update tb_visited set visited=?"; ps=conn.prepareStatement(sql); ps.setInt(1,res); ps.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { ConnUtil.close(null,ps,conn); } } }
b、在某个继承Servlet的类中重写destroy和init方法(准备工作)
@Override public void destroy() { //从全局变量中,将最后的累加次数通过调用下面的方法,持久化到数据库中 ServletContext application = getServletContext(); int totalTimes = Integer.parseInt(application.getAttribute("totalTimes").toString()); VisitedUtil.writeVisited(totalTimes); } //初始化的方法,由第一个访问的用户来创建,只被调用一次 //从数据库的visited表中读取访问次数,保存在内存,ServletContext域中 @Override public void init() throws ServletException { int lasttimes = VisitedUtil.readVisited(); //次数存放到一个全局变量中,这样每个线程客户端都可以访问这个全局变量,才能有机会改写这个次数 //域对象 //1.HttpServletRequest,数据传递范围一次请求有效,只要是请求转发 //2. HttpSession,数据作用范围,一次会话有效 //3. ServletContext:数据作用范围:整个应用范围都可以共享域里面的数据 ServletContext application = getServletContext(); application.setAttribute("totalTimes", lasttimes); }
c、网站计数器代码核心代码
(注:要写在登陆成功之后,否则一刷新浏览次数+1,不符合逻辑)
ServletContext application = getServletContext(); //注意这里先转成字符串,再转成整型,有set才有get,否则get意义 int totalTimes = Integer.parseInt(application.getAttribute("totalTimes").toString()); //登陆成功自加 totalTimes++; //存到apllication域 application.setAttribute("totalTimes",totalTimes)
d、jsp前端代码
<h1>访问次数<%=application.getAttribute("totoalTimes")%><h1>