jsp: 使用application对象实现网站计数器
任务要求:
在一些站点中,经常会看到网站计数器的功能。要点:
网站的来访人数可能会很多,有可能超过20位整数,大整数类BigInteger
使用application范围的属性保存计数。
用户每次在第一次访问时才需要进行计数的操作,而重复刷新页面时则不应重复计数,使用isNew()判断用户是否是第一次访问。
Web开发属于多线程操作,所以在进行更改、保存时需要进行同步操作。
首先看一下普通的网站计数器
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%!int i = 0 ; synchronized void count(){i++;}
%>
<%count();
%>您是第<%=i %>个访问该页面的人</body>
</html>
对于上面的普通累加计数器,刷新页面是可以累积加1的,而且就算是关闭浏览器重新再打开浏览器进行运行的话也是继续进行原本的累加.
再看一下application对象普通的网站计数器
<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>计数器</title>
</head><body>
<% int number=0;if(application.getAttribute("number")==null){number=1;}else{number=Integer.parseInt((String)application.getAttribute("number"));number=number+1;}out.print("您是第"+number+"位访问者!");application.setAttribute("number",String.valueOf(number));
%></body>
</html>
对于上面的application对象普通累加计数器,刷新页面也是可以累积加1的,而且就算是关闭浏览器重新再打开浏览器进行运行的话也是继续进行原本的累加.
这次看一下符合任务要求的application对象的使用:
<%@page import="java.math.BigInteger"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%BigInteger counter = (BigInteger)application.getAttribute("count");//当没有count属性的时候,返回的是nullif(counter == null){counter = new BigInteger("0");}if(session.isNew()){//判断是否是新的用户(刷新的时候session不会变,所以不进行累加)synchronized (this){counter = counter.add(new BigInteger("1"));//大整数进行加1application.setAttribute("count", counter);//application修饰全局}}
%><font color="red" size=6>您是第<%=counter %>个访问该网站的用户</font></body>
</html>
这样就完成了网站计数器的任务,刷新页面不会进行累加,当关闭浏览器重新运行的时候就会再次累加
再看一个同样效果,复杂的实现:(初学者不推荐使用)
<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK"%>
<%@ page import="java.io.*"%> <%--由于要使用IO操作,必须导入java.io包--%>
<%@ page import="java.util.*"%> <%--Scanner在java.util包中定义--%>
<%@ page import="java.math.*"%> <%--BigInteger定义在java.math包中--%>
<!DOCTYPE html>
<html>
<head>
<!-- <meta charset="UTF-8"> -->
<title>Insert title here</title>
</head>
<body><%!BigInteger count=null; //定义成全局变量
%>
<%!public BigInteger load(File file){ //读取计数文件BigInteger count=null; //接受计数文件try{if(file.exists()){ //如果文件存在,则读取Scanner scan=null; //定义Scanner对象scan=new Scanner(new FileInputStream(file));//从文件中读取if(scan.hasNext()){ //存在内容count=new BigInteger(scan.next());//将内容放到BigInteger类中}scan.close(); //关闭输入流}else{ //文件不惨在则创建新的count=new BigInteger("0"); //第一次访问save(file,count); //调用save(),保存新的文件}}catch(Exception e){e.printStackTrace();}return count; //返回读取后的数据}public void save(File file,BigInteger count){ //保存计数文件try{PrintStream ps=null; //定义输出流对象ps=new PrintStream(new FileOutputStream(file));//打印流对象ps.println(count);//保存数据ps.close();//关闭输出流}catch(Exception e){e.printStackTrace();}}
%>
<%String fileName=this.getServletContext().getRealPath("/")+"count.txt"; //文件路径File file =new File(fileName);if(session.isNew()){ synchronized(this){ //必须进行同步操作count=load(file);count=count.add(new BigInteger("1"));//自增操作save(file,count); //保存修改后的数据}}
%><h2>您是第<%=count==null?0:count%>位访客!</h2>
</body>
</html>
jsp: 使用application对象实现网站计数器相关推荐
- 通过Application对象实现网站计数器
Application对象是JSP的一个内建对象.当服务器启动时,该对象会被自动创建创建,直到服务器关闭该对象才会消失,并且在此期间可以被多个用户共同使用. 本列主要使用Application对象的s ...
- 对于application对象的认识
本文转载于https://blog.csdn.net/rshp_520/article/details/22213399 application对象 1 什么是application对象 ? (1) ...
- JSP内置对象application对象实战——实现网页计数器
前面和大家说过application对象有点类似于java里面的全局变量,因此可以将当前访问网站的数量保存在application对象当中,在每次访问网页时,实现将保存在application对象中的 ...
- Application对象 简单的聊天室
使用Application对象可以使得多个用户在访问同一个asp.net应用程序时,能够共享信息,在多个用户同时访问asp.net时,都会产生一个Application对象.通常可以把共享的数据变量存 ...
- 网站访问计数器java_JSP实现网站计数器—javabean
jsp javabean实例,制作网站计数器. javabean代码 package com; public class Counter { private long counter; // 取出计数 ...
- JSP简单练习-网站计数器
<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="javax.se ...
- JSP内置对象:request、response、out、session、application等内置对象
Java程序的功能主要是由Java包下的各个类在运行期所产生的对象所提供,并且应用这些对象组织构建程序所需的功能. 所谓JSP内置对象,是指在JSP网页环境之下,用户不需要声明而直接可以在JSP网页中 ...
- JSP内置对象-application
1.什么是application: 服务器启动后就产生了这个application对象,当客户在所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭.但是与ses ...
- jsp内置对象【02】四种内置对象【02】session、application
我们继续来学习,上一篇文章中说到了request属性,那么既要想客户端和服务端都都能实现跳转的话,就用到了session. 第三种:session属性 我们接着修改一下上一篇文章中的代码来对比一下: ...
最新文章
- 强化学习笔记:PPO 【近端策略优化(Proximal Policy Optimization)】
- datatable导出Excel
- 一篇文章梳理完虚拟现实相关的核心技术 | 收藏
- SSH框架应用中常用Jar包用途介绍
- catalog move.php,catalog.php
- 在ASP.NET Web Application 中如何处理图片 【转】-有用
- 【2(2N+1)魔方阵 】
- 探究光线追踪技术及UE4的实现
- Android原生模拟器运行ARM APP
- 网上药店领导品牌_药康网
- 【STL】rb_tree (multi)set (multi)map
- Android在MTP模式下,只显示指定文件夹
- 叔本华系列之(一)论独立的思考
- 【毕业设计】python的搜索引擎系统设计与实现
- 大数据面试题Hbase篇
- 信号的时域及波形特征提取(平均值、方差、峭度、峰值系数、裕度因子等)
- 转--孟岩《理解矩阵》
- IMX6ULL嵌入式Linux驱动学习笔记(二)
- 使用Visual Studio新建一个控制器和视图,在控制器里获取数据库表的数据
- 单边正弦信号拉斯变换 matlab
热门文章
- leetcode 875. koko-eating-bananas 爱吃香蕉的珂珂 python3
- 分享一些安卓的技巧性方法
- Datawhale 零基础⼊⻔NLP-Task2 Word Vectors and Word Senses
- 信息熵对复杂网络中影响节点的识别(Enrenew algroithm)以及SIR模型
- ArduPilot-Mocap转换解析
- 打造舒适厨房传统灶好还是集成灶好?对比之后集成灶完胜
- 1G、2G、3G、4G、5G 移动通信发展简述 历史、与其关键技术
- 月薪30k大佬给你们讲讲工业3D相机标定
- mysql-5.7.10-winx64安装配置
- IOS 图片自动旋转