您的位置
主页 > 网站技术 > 语言编程 > » 正文

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,从而实现当关闭服务的时候,把文件保存在磁盘中。下次从磁盘中读取。 




首页  - 关于站长圈  - 广告服务  - 联系我们  - 关于站长圈  - 网站地图  - 版权声明