在网站开发中,有很多功能需要使用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. docker 后台运行和进入后台运行的容器

    先创建并进入一个新的被命名为newos的新容器    docker run -it --name newos docker.io/centos #创建并指定端口号映射 docker run -d -p ...

  2. python计算:pi/4=1-1/3+1/5-1/7+…

    当有一项的绝对值小于10e-6停止计算 def cul() : ans = 0;add = 1 sign = 1 while(1/add>10**(-6)) : ans = ans + sign ...

  3. JAVA中的指针

    不同于CPP,JAVA中不需要程序员对指针进行操作.不过,这不代表JAVA没有指针,事实上,JAVA的指针操作都被底层代码封装了.笔者在初学Java时,虽然就了解了形参,实参,StringBuffer ...

  4. Bulma CSS - 模块化

    Bulma CSS框架教程 Bulma CSS – 简介 Bulma CSS – 开始 Bulma CSS – CSS类 Bulma CSS – 模块化 Bulma CSS – 响应式 Bulma框架 ...

  5. vue 循环和v-if 不能混合使用

    <div class="item page-item" v-for="(item,i) in pageNum" @click="setCurre ...

  6. Day 20:网络编程(1)

    什么是计算机网络? 指的是分布在不同地域的计算机,通过外部设备连接起来,实现资源共享与数据传输的计算机系统. 通信三要素: IP: IP地址 Internet上的每台主机(Host)都有一个唯一的IP ...

  7. 执行 composer update 命令的时候报 Your requirements could not be resolved to an installable set of packages. 错误

    Your requirements could not be resolved to an installable set of packages. 以上原因:不匹配composer.json要求的版 ...

  8. h5-360_introduce页面案例

    整个网页的html 首先,忽略我的网页比较丑,主要是ps功底不太好, 其次这个网页是利用了全屏插件:jquery.fullPage.js.需要事先导入相应的js文件 js文件下载地址:http://w ...

  9. tortoiseGit 的简单使用说明

    拉取仓库到本地 参考 下面几张图片,把仓库拉取到本地. 本地修改并推送 进入文件夹后,按照 下面几张图片切换到本地的开发分支 当修改完成之后,按照 下面几张图片 的方法把修改推送到远程仓库的开发分支. ...

  10. 吴裕雄--天生自然Django框架开发笔记:Django 模板

    使用 django.http.HttpResponse() 来输出 "Hello World!".该方式将数据与视图混合在一起,不符合 Django 的 MVC 思想. Djang ...