现在要在用户管理系统增加网站计数器的功能
我们可以用ServletContext来实现,如果是涉及到不用用户共享数据,而这些数据量不大,同时又不希望写入数据库中,我都可以考虑使用ServletContext来实现
有效点击:
用户成功登陆一次就算为一次有效访问
实现方案:
- 在init()方法中读取数据库或文件中的值,并将读取的值赋给servletContext中属性times当做它的初始值
- 在LoginCl.java中操作ServletContext,用户每成功登陆一次算一次有效点击
- 在wel.java中读取ServletContext并显示
- 在destroy()方法中,将serveletcontext中属性times的 值写回到数据库或者文件
代码实现:
在LoginCl中:
1、重写init()方法
//重写init方法 public void init(){ System.out.println("init被调用"); try{ //========添加网页访问次数的功能(读取部分)=========== //用户成功登陆一次就计算一次 FileReader fr = new FileReader("D://myCounter.txt"); BufferedReader br = new BufferedReader(fr); String numVal = br.readLine(); br.close(); fr.close(); //将从文件中读取的值放入到servletContext中 this.getServletContext().setAttribute("visitTimes",numVal); } catch(Exception ex){ ex.printStackTrace(); } }
//========添加网页访问次数功能(计算部分)========= //将ServletContext中的visitTime所对应的值++ String times=this.getServletContext().getAttribute("visitTimes").toString(); //对times的值加1再重新写回servletContext this.getServletContext().setAttribute("visitTimes",(Integer.parseInt(times)+1));
public void destroy(){ System.out.println("destroy被调用"); try{ //========添加网页访问次数的功能(写入部分)=========== //将更新的数据写回文件中 FileWriter fw = new FileWriter("D://myCounter.txt"); BufferedWriter bw = new BufferedWriter(fw); //从servletContext中读取的值写入文件中 bw.write(this.getServletContext().getAttribute("visitTimes").toString()); bw.close(); fw.close(); } catch(Exception ex){ ex.printStackTrace(); } }
//显示网页访问次数 pw.println("该网页被访问了"+this.getServletContext().getAttribute("visitTimes").toString()+"次<br>"); //显示主机IP地址 pw.println("您的IP地址="+req.getRemoteAddr()+"<br>"); //显示主机名 pw.println("你的主机名="+req.getRemoteHost()+"<br>");