萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> jsp編程 >> jsp網頁計數器實現示例

jsp網頁計數器實現示例

 網頁計數器想必大家都有見到過吧,記錄每一個訪問者,下面有個不錯的示例,感興趣的朋友可以參考下

 代碼如下: //過濾器類  public class EcondingFilter implements Filter {  private String charset = null;  private ServletContext context = null;  private String path = "";  /**  * 在銷毀前將數據存入本地文件中  */  public void destroy() {  //獲取servleContext中的屬性的那個值  String nums = (String) context.getAttribute("nums");  //創建寫入流  FileWriter fw = null;  BufferedWriter bw = null;  try {  fw = new FileWriter(path);  bw = new BufferedWriter(fw);  bw.write(nums);  } catch (Exception e) {  e.printStackTrace();  } finally {    try {  if (bw != null) {  bw.close();  }  if (fw != null) {  fw.close();  }  } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();  }    }  System.out.println("filter銷毀");  }    代碼如下: public void doFilter(ServletRequest request, ServletResponse response,  FilterChain chain) throws IOException, ServletException {  // TODO Auto-generated method stub  System.out.println("doFilter前");  String path = ((HttpServletRequest)request).getServletPath();//獲取每次訪問的action的相對路徑  <img alt="" src="http://img.blog.csdn.net/20130728233435953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2tyZ3diag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ==/dissolve/70/gravity/Center"><img alt="" src="http://img.blog.csdn.net/20130728233445625?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2tyZ3diag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ==/dissolve/70/gravity/Center"> //判斷路徑,如果是登陸的那個action,就讓保存的context裡面的那個屬性加1  if(path.endsWith("/login.action")){  context.setAttribute("nums",Integer.parseInt(context.getAttribute("nums").toString())+1+"");  }  request.setCharacterEncoding(charset);  response.setCharacterEncoding(charset);  chain.doFilter(request, response);  System.out.println("doFilter後");    }     代碼如下: public void init(FilterConfig filterConfig) throws ServletException {  // TODO Auto-generated method stub  System.out.println("filter初始化");  //獲取編碼格式  charset = filterConfig.getInitParameter("encoding");  //獲取servletContext  context = filterConfig.getServletContext();  System.out.println(charset);    path = context.getRealPath("");  File file = new File("D:text.txt");  if (!file.exists()) {//判斷文件是否存在  // 如果文件不存在,就創建一個文件,保存在D盤中  file = new File("d:text.txt");  FileWriter fw = null;  BufferedWriter bw = null;  try {  fw = new FileWriter(file);  bw = new BufferedWriter(fw);  bw.write(0 + "");// 寫入初始化數據0  } catch (Exception e) {  e.printStackTrace();  } finally {  try {  if (bw != null) {  bw.close();  }  if (fw != null) {  fw.close();  }  } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();    }  }  }  //當每次tomcat啟動服務時,進行讀取創建的那個文件  path = "d:text.txt";  // 從本地讀取訪問的人數的文件  FileReader fr = null;  BufferedReader bf = null;  String nums = "";  try {  fr = new FileReader(path);  bf = new BufferedReader(fr);  nums = bf.readLine();  System.out.println(nums);  } catch (Exception e) {  e.printStackTrace();  } finally {    try {  if (bf != null) {  bf.close();  }  if (fr != null) {  fr.close();  }  } catch (IOException e) {  // TODO Auto-generated catch block  e.printStackTrace();  }  }  //將獲得到的數據保存在servletContext中  context.setAttribute("nums", nums);  }    }    用過濾器方便的一點,不需要我們每次手動去調用,當web服務啟動時候,自動會引用。首先說下,我寫到init方法的依據是,每次web服務啟動會調用一次init方法,當關閉服務的時候會調用一次destory方法,將計數的那個數據文件,這個方法寫到init方法和destory方法,這樣可以減少每次的不斷的讀取服務器和讀取寫入文件的次數,當我們每登陸一次,就讓servletContext中的那個attr加1,從而實現當關閉服務的時候,把文件保存在磁盤中。下次從磁盤中讀取。   
copyright © 萬盛學電腦網 all rights reserved