在网站开发中,有很多功能需要使用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. Fedora 19安装以后的优化

    Fedora 19安装以后的优化 转载自 http://www.zhukun.net/archives/6614 最近安装了Fedora 19 32bit,以下是一些优化配置,使之更适合国人使用. 1 ...

  2. Python基础笔记:高级特性:切片、迭代、列表生成式、生成器、迭代器

    题记: 在python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好. 1行代码能实现的功能,绝不写5行代码. 请始终牢记:代码越少,开发效率越高. 切片 >>&g ...

  3. 九十九、SAP中ALV事件之十二,给ALV的标题栏添加图片

    一.在OAER中找一个喜欢的图片,对象标识为“TRVPICTURE04” 二.来到我们的代码区,输入代码 三.效果如下 很完美

  4. Hive 数据类型 + Hive sql

    Hive 数据类型 + Hive sql 基本类型 整型 int tinyint (byte) smallint(short) bigint(long) 浮点型 float double 布尔 boo ...

  5. Inception Score

    转载 https://www.jiqizhixin.com/articles/2019-01-10-18    全面解析Inception Score原理及其局限性 https://blog.csdn ...

  6. vue学习(三)组件传值

    组件 官网(https://cn.vuejs.org/v2/guide/components.html) 组件分为局部组件和全局组件 局部组件:是内容中国的一部分 只是在当前组件加载的时候 全部组件: ...

  7. Ubuntu18安装LAMP环境详细步骤

    Ubuntu18安装Lamp环境 1.su root  切换root账号(root账户权限高不用总输入sudo) 更新源 阿里源网址:https://opsx.alibaba.com/mirror 更 ...

  8. UVA - 11346 Probability(概率)(连续概率)

    题意:在[-a, a]*[-b, b]区域内随机取一个点P,求以(0, 0)和P为对角线的长方形面积大于S的概率(a,b>0, S>=0). 分析: 1.若长方形面积>S,则选取的P ...

  9. mac安装vue没有使用权限不足

    ➜  ~ vue init webpack frontend ⠋ downloading template /usr/local/lib/node_modules/vue-cli/node_modul ...

  10. Kaggle: House Prices: Advanced Regression Techniques

    Kaggle: House Prices: Advanced Regression Techniques notebook来自https://www.kaggle.com/neviadomski/ho ...