在网站开发中,有很多功能需要使用ServletContext,比如:

1.网站计数器

2.网站在线用户的显示

3.简单的聊天系统

总之,如果是涉及到不用用户共享数据,而这些数据量不大,同时又不希望写入数据库中,我们就可以考虑使用ServletContext来实现有效点击:

1.只要访问过该网页就算一次,刷新也算一次,有点假

2.不同的ip访问,算一次;如果同一个ip在一定时间(如一天),不管浏览该网页多少次都算一次

3.用户推出网站,再次访问页算一次

实现方案:

1.当某个用户访问该网页时,就在该数据库中增加一次(比如有一张统计表)

缺点:对数据库访问太频繁,服务器压力太大

优点:很好理解,也好实现

2.设置一个静态变量,当服务器启动时,可以通过文件或表初始化该变量;当服务器关闭时,再将变量的值写入到文件或是数据库中

缺点:实现复杂,要求对文件操作

优点:效率高,不会频繁的访问文件或数据库

3.使用ServletContext,它的实现与第二种相似

实现网站计数器

1.在Wel.java中操作ServletContext,每刷新一次算一次

2.在LoginCl.java中操作ServletContext,用户每成功登陆一次算一次

3.对2方法的优化改进(减少对文件的操作)各个用户每登陆一次,就要去操作一个文件,这样效率低下,可不可以减少对文件的操作次数:

在Servlet的生命周期中——

可以在init()方法中初始化servletContext中属性times对应的初始值

可以在destroy()方法中,一次性的将serveletcontext中属性times

对应的值写入文件中

代码实现:

在LoginCl.java中:

1.重写init()方法

public void init() throws ServletException
{
try{
/* 只会被调用一次 */
System.out.println( "init被调用" ); /*
* ========添加网页访问次数的功能(读取部分)===========
* 用户成功登陆一次就计算一次
*/
FileReader fr = new FileReader( "D://myCounter.txt" );
BufferedReader br = new BufferedReader( fr );
String numVal = br.readLine();
br.close(); /* 将times值放入到servletContext中 */
this.getServletContext().setAttribute( "visitTimes", numVal );
/* ========添加网页访问次数的功能(读取部分)=========== */
}catch ( Exception ex ) {
ex.printStackTrace();
}
}

2.在process()方法中添加计数功能

/*
* ========添加网页访问次数功能(计算部分)=========
* 将ServletContext中的visitTime所对应的值++
*/
String times = this.getServletContext().getAttribute( "visitTimes" ).toString();
/* 对times的值++再重新写回servletContext */
this.getServletContext().setAttribute( "visitTimes", (Integer.parseInt( times ) + 1) );
/* ========添加网页访问次数功能(计算部分)========= */

3.重写destroy()方法

public void destroy()
{
try{
System.out.println( "destroy被调用" );
/*
* ========添加网页访问次数的功能(写入部分)===========
* 再将新的次数写回文件
*/
FileWriter fw = new FileWriter( "D://myCounter.txt" );
BufferedWriter bw = new BufferedWriter( fw );
bw.write( this.getServletContext().getAttribute( "visitTimes" ).toString() );
bw.close(); /* 关闭文件流 */
/* ========添加网页访问次数的功能(写入部分)=========== */
}catch ( Exception ex ) {
ex.printStackTrace();
}
}

4.在页面显示(Wel.java)

/* 显示网页访问次数 */
pw.println( "该网页被访问了" + this.getServletContext().getAttribute( "visitTimes" ).toString() + "次<br>" );
/* 显示主机IP地址 */
pw.println( "您的IP地址=" + req.getRemoteAddr() + "<br>" );
/* 显示主机名 */
pw.println( "你的主机名=" + req.getRemoteHost() + "<br>" );
pw.println( "</center></body>" );

ServletContext实现网站计数器的更多相关文章

  1. ServletContext与网站计数器

    什么是ServletContext? ServletContext是服务器的一个公用的空间,是不同的浏览器共享的一个数据. 由图可以看出ServletContext和Cookie与session之间的 ...

  2. ServletContext结合Servlet接口中的init()方法和destroy()方法的运用----网站计数器

    我们一般知道Servlet接口中的init()方法在tomcat启动时调用,destroy()方法在tomcat关闭时调用.那么这两个方法到底在实际开发中有什么作用呢?这就是这个随笔主要讲的内容. 思 ...

  3. application 网站计数器

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. Histats安装Counter网站计数器 - Blog透视镜

    Histats提供十分多样性的Counter网站计数器,可以依照你个人的喜好与需求,选择适合的Counter网站计数器,也可以针对同一网站,安装多个Counter网站计数器,作法其实比注册账号时更简单 ...

  5. Histats申请Counter网站计数器 - Blog透视镜

    为了计算网页被浏览的次数,访客人数等统计数据,作为未来分析之用,可以向Histats申请免费的Counter网站计数器,它的功能相当齐全,同时也会保留一段时间的资料,当作统计比较的资料,更可以进一步付 ...

  6. servlet-servletContext网站计数器

    1.在项目中新建文件夹新建文件nums.txt 2.在web.xml文件配置 <servlet>     <description>This is the descriptio ...

  7. zabbix添加IIS网站计数器(并发连接数)详解

    环境:windows server 2012 前提:IIS上要添加好配置   1,在被监控主机,powershell输入perfmon.msc   2,点击添加按钮     3,在下拉菜单中点击小箭头 ...

  8. Servlet之ServletContext以及文件操作

    ServletContext ------------------------------------ ServletContext是什么? 与cookie,session比较. 可以把它想象成一个共 ...

  9. 【jsp网站计数功能】 application session

    在jsp页面中实现网站计数器的方法有很多,其中比较普遍的做法是利用application 和session对象.application对象可被所有用户共享:session是单用户共享,用户从访问系统开 ...

随机推荐

  1. Maven项目工程目录

    maven工程目录规范: src/main/java   存放项目的.java文件 src/main/resources   存放项目的资源文件,如spring.hibernate配置文件 src/t ...

  2. Oracle-SQL 建表

    建立员工分类表: 员工分类表结构.内容分别如下图:   一.使用PL/SQL Dev 这类可视化工具直接创建表 1.建立表结构 新建-table-名称(egrade)    然后 列:创建表结构 2. ...

  3. Redis哨兵机制原理

    1.概述 Redis Sentinel是一个分布式系统,为Redis提供高可用性解决方案.可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip p ...

  4. 161-PHP 文本替换函数str_replace(二)

    <?php $str='Hello world!'; //定义源字符串 $search='o'; //定义将被替换的字符 $replace='O'; //定义替换的字符串 $res=str_re ...

  5. SciKit-Learn 加载数据集

    章节 SciKit-Learn 加载数据集 SciKit-Learn 数据集基本信息 SciKit-Learn 使用matplotlib可视化数据 SciKit-Learn 可视化数据:主成分分析(P ...

  6. linux X64函数参数传递过程研究

    基础知识 函数传参存在两种方式,一种是通过栈,一种是通过寄存器.对于x64体系结构,如果函数参数不大于6个时,使用寄存器传参,对于函数参数大于6个的函数,前六个参数使用寄存器传递,后面的使用栈传递.参 ...

  7. Linux学习《第三章重定向,管道符和环境变量》

  8. EUI库 - 9 - 数据集合 - 列表

      List 和DataGroup的区别 1 选中一项 会触发 eui.ItemEvent.ITEM_TAP 事件, 2 有选中项的概念,可以设置 List 里的默认选中项    selectedIn ...

  9. EUI库 - 快速入口之项目配置

      egretProperties.json exmlRoot  指定exml文件存放根目录,该路径必须为相对路径,目录内只能有exml文件 themes    主题文件数组,配置所有主题文件路径,该 ...

  10. Loadrunner安装与破解

    一.安装loadrunner 1. 点击setup.exe 2. 点击安装完整程序 3. 点击确定,安装必需程序 4. 安装vc2005的时候报了如下错,导致无法继续安装,没有报错可跳过第五步 5. ...