- 浏览: 416424 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
jxausea:
java.io.IOException: Keystore w ...
一个opoenfire与smack的例子 -
517913840:
请问 为什么我用roster.getPresence取用户的在 ...
一个opoenfire与smack的例子 -
cymmint:
请了,大哥
轻松利用JQuery实现ajax跨域访问 -
lishujuncat:
多谢,学下了
一个opoenfire与smack的例子 -
InSoNia:
不错
最简单的ajax例子
通过session限制用户频繁(限制了一定时间里最多能刷多少次--刷新频率)刷新某个页面:
下面的利用Cookie来限制刷新频率,这个是利用了Cookie的最大生命周期来判断刷新次数,不是什么好的办法
import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * 调用方式:在页面中直接调用下面代码 StopRefresh stopRefresh = new StopRefresh(); stopRefresh.limitTime =4;//可以不设置,默认10秒 stopRefresh.refreshCount=2;//可以不设置,默认5次 stopRefresh.redirectPage="/index.jsp";////可以不设置,/index.jsp stopRefresh.blackPage="/index.jsp";////可以不设置,/index.jsp stopRefresh.blackList = "192.168.61.110,2009-08-03 10:00:00,20;";//后面一定要有分号 if(stopRefresh.stopRefreshPage(request,response)){ return; } * @author Administrator * */ public class StopRefresh { //刷新的时间段,单位:秒 public int limitTime = 10; //刷新的时间段的最大刷新次数 public int refreshCount=5; //超过刷新次数后跳转的页面 public String redirectPage = "/include/functionremind.htm"; //192.168.61.110,yyyy-MM-dd HH:mm:ss,10;192.168.61.111,yyyy-MM-dd HH:mm:ss,100(IP,具体开始时间,禁用时间) public String blackList = ""; public String blackPage = "/include/functionremind.htm"; public static final SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** * 阻止频繁刷新同一页面 */ @SuppressWarnings("unchecked") public boolean stopRefreshPage(HttpServletRequest request,HttpServletResponse response) throws IOException{ //判断是否超出次数或黑名单 boolean isOverTime = false; //PrintWriter out = response.getWriter(); String htmlContent="<script type=\"text/javascript\">window.location.href='"+redirectPage+"'</script>"; String curPath = request.getServletPath();//当前路径 int latestRefreshNum = 0;//最后一次保存的刷新 TreeMap<Date,Integer> stopRefreshMap = null; HttpSession session = request.getSession(); if(null != session.getAttribute("stopRefreshMap"+curPath)){ stopRefreshMap = (TreeMap<Date,Integer>)session.getAttribute("stopRefreshMap"+curPath); if(stopRefreshMap.size()!=0){ Date latestDate = stopRefreshMap.lastKey();//上一次刷新的次数 latestRefreshNum = stopRefreshMap.get(latestDate)+1;//次数加1 Date newDate = new Date(); //out.println(newDate); stopRefreshMap.put(newDate, latestRefreshNum); //最新刷新时间的前10秒的时间 Date tempDate = new Date(newDate.getTime() - limitTime*1000L); //删除不需要的对象(超过limitTime秒前的对象) Iterator<Date> iterator = stopRefreshMap.keySet().iterator(); while(iterator.hasNext()){ Date date = iterator.next(); if((tempDate.compareTo(date))>0){ iterator.remove();//这行代码是关键,不然在对一个map进行迭代遍历并删除一些符合条件的键值对的时候,容易出现java.util.ConcurrentModificationException 这个异常。 stopRefreshMap.remove(date); } } session.setAttribute("stopRefreshMap"+curPath, stopRefreshMap); int countNum = stopRefreshMap.get(stopRefreshMap.lastKey()) - stopRefreshMap.get(stopRefreshMap.firstKey()); //out.println(countNum); //判断refreshCount秒内刷新的次数是否超出了指定的次数 if(countNum >= refreshCount){ isOverTime = true; } boolean isBlackList = false; try{ if(blackList.trim().length()>0){ String blackIP = request.getRemoteAddr(); int position = blackList.indexOf(blackIP); if(position != -1){//是否在黑名单中 Date date = dateFormat.parse(blackList.substring(position+blackIP.length()+1, position+blackIP.length()+21)); Date newDate2 = new Date(); if(newDate2.getTime()<(date.getTime()+Long.parseLong(blackList.substring(position+blackIP.length()+21, blackList.indexOf(";",position)))*60*1000)){ isOverTime = true; isBlackList = true; } } } }catch (Exception e) { e.printStackTrace(); } if(isOverTime){ PrintWriter out = response.getWriter(); if(isBlackList){ out.println("<script type=\"text/javascript\">window.location.href='"+blackPage+"'</script>"); }else{ out.println(htmlContent); } out.flush(); out.close(); } } }else{ stopRefreshMap = new TreeMap<Date, Integer>(); stopRefreshMap.put(new Date(), 1); session.setAttribute("stopRefreshMap"+curPath, stopRefreshMap); } return isOverTime; } public static void main(String args[]) { boolean isBlackList = false; String blackList = "192.168.158.90,2009-08-04 16:06:00,120;"; try { if (blackList.trim().length() > 0) { String blackIP = "192.168.158.90"; int position = blackList.indexOf(blackIP); System.out.println(position); if (position != -1) { Date date = dateFormat.parse(blackList.substring(position+blackIP.length()+1, position+blackIP.length()+21)); Date newDate2 = new Date(); if(newDate2.getTime()<(date.getTime()+Long.parseLong(blackList.substring(position+blackIP.length()+21, blackList.indexOf(";",position)))*60*1000)){ System.out.println("blackIP:" + blackIP); } } } } catch (Exception e) { e.printStackTrace(); } } }
下面的利用Cookie来限制刷新频率,这个是利用了Cookie的最大生命周期来判断刷新次数,不是什么好的办法
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 调用方式:在页面中直接调用下面代码 StopRefresh stopRefresh = new StopRefresh(); stopRefresh.limitTime =4;//可以不设置,默认10秒 stopRefresh.refreshCount=2;//可以不设置,默认5次 stopRefresh.redirectPage="/index.jsp";////可以不设置,/index.jsp stopRefresh.cookieStopRefresh(request,response); * @author Administrator * */ public class StopRefresh { //刷新的时间段,单位:秒 public int limitTime = 10; //刷新的时间段的最大刷新次数 public int refreshCount=5; //超过刷新次数后跳转的页面 public String redirectPage = "/index.jsp"; /** * 利用Cookie阻止频繁刷新同一页面 */ public void cookieStopRefresh(HttpServletRequest request,HttpServletResponse response) throws IOException{ PrintWriter out = response.getWriter(); //页面内容 String htmlContent="<script type=\"text/javascript\">window.location.href='"+redirectPage+"'</script>"; String cookiePath = request.getServletPath(); Cookie myCookie = null; Cookie[] cookies = request.getCookies(); //如果cookies为null则创建一个 if(null == cookies){ myCookie = new Cookie(cookiePath, "1"); response.addCookie(myCookie); }else{ //取出需要的cookie for(int i=0;i<cookies.length;i++){ if(cookies[i].getName().equalsIgnoreCase(cookiePath)){ myCookie = cookies[i]; } } //如果myCookie为null则创建,同时设置cookie的最大生命时长 if(null == myCookie){ myCookie = new Cookie(cookiePath, "1"); myCookie.setMaxAge(limitTime); response.addCookie(myCookie); }else{ //每刷新一次都设置一次cookie的最大生命时长 myCookie.setMaxAge(limitTime); //如果cookieTime内刷新次数大于最大能刷新次数则跳转页面(防止不断刷新),反之刷新次数对应的加1 if(Integer.parseInt(myCookie.getValue())>=refreshCount){ out.println(htmlContent); }else{ int count = 1; String cookieValue = myCookie.getValue(); if("".equals(cookieValue)){ myCookie.setValue(count+""); response.addCookie(myCookie); }else{ count = Integer.parseInt(myCookie.getValue())+1; myCookie.setValue(count+""); response.addCookie(myCookie); } //out.println(myCookie.getValue()); } //out.println(myCookie.getName()); } } out.flush(); out.close(); } }
发表评论
-
在linux上安装Memcached Server
2010-06-07 09:09 1774本文转自http://hi.baidu.com ... -
java冒泡法
2009-12-23 19:51 2152冒泡算法思想是每次从数组开始端开始比较相邻两元素,把第i大数冒 ... -
一个ssh最简单整合的例子,很多地方都没有作
2009-09-23 16:47 2082具体看附件, 用struts1.3,action也交给spri ... -
Effective Java 策略枚举
2009-08-19 09:57 1984//策略枚举 public enum PayrollDay ... -
用java-io查找包含关键字的文件或用某些字符替代掉指定的字符,大小写转换
2009-01-09 15:12 4565import java.io.BufferedReader; ... -
常用正则表达式
2008-08-21 15:52 25411。^\d+$ //匹配非负整数(正整数 + 0) 2。^[ ... -
java读取多数据集合片段
2008-05-07 14:19 0// 生成xml物理文件 public boolean g ... -
将Java源程序制作成exe文件
2008-02-27 08:36 17一、获取你的源程序的class文件 (e.g. D:\sour ... -
简易图书馆系统
2008-02-26 18:20 16全部文件都在附件中 /** * @author huangl ... -
用Java制作网络文件下载系统
2008-01-16 08:58 51由于Linux操作系统的兴起和Java语言的日渐成熟,使用Ja ... -
EL表达式在j2ee5使用不了的解决方法和EL表示根路径以及相对路径和绝对路径问题
2008-01-15 11:01 4686添加<%@page isELIgnored=" ... -
java日期类的简单(个人)使用1:
2008-01-12 17:07 1528经常调用某方法,某方法隔一段时间重新调用一次静态初始化 pac ... -
今天帮人解决的一个Map的问题,不过有得优化,暂时贴在这里先
2007-12-27 16:31 1185/* * 问题: * HashMap<Stri ... -
java.lang.Comparable应用1:比较和排序
2007-12-27 14:39 2306我个人觉得看例子说话 ... -
Map 的一点分析:在java.util.Map加入了一样的key,则这个key值的value会覆盖掉原来的value
2007-12-27 14:35 9885在java.util.Map加入了一样的key,则这个key值 ... -
一个日期时间的工具类
2007-11-28 11:32 2103package com.huanglq.util; im ... -
一个Map的工具类
2007-11-28 11:28 2132package com.huanglq.util; im ... -
有关关键字的写入文件和读取
2007-11-01 11:03 1677/*** 这里用到了一个工具类StringUtil.java, ... -
在不断调用某方法的同时,间隔一段时间,在指定时间刷新静态初始化块中的方法
2007-11-01 11:00 1923//间隔一段时间就在调用时刷新静态初始化块中的方法 impor ... -
在 Java 应用程序中计划重复执行的任务[转贴]
2007-10-31 10:03 1868介绍 Java 语言中 Timer 类的一种简洁用法 dev ...
相关推荐
java控制页面刷新频率,代码、注释、实例
# PyQt6限制按钮点击次数 按钮点击三次后禁用 1. 创建 QPushButton 按钮,并绑定自定义函数作为按钮点击事件; 2. 新建整数型变量用于存储按钮点击次数; 3. 在按钮点击函数中定义每次点击变量加一,并判断等于3时将...
各版块更新数据单独存放,防止频繁读写增加崩溃可能 .投票支持 3D 饼图 和条形图 .独特上一贴和下一贴,顺序按直观方式,而且附有主题说明 .方便的 群发邮件 功能,可以使用 $username,$password,$email...
各版块更新数据单独存放,防止频繁读写增加崩溃可能 .投票支持 3D 饼图 和条形图 .独特上一贴和下一贴,顺序按直观方式,而且附有主题说明 .方便的 群发邮件 功能,可以使用 $username,$password,$...
恐惧症 Chrome扩展程序可以模糊掉您不想在Internet上看到的文字和图像。 例如,在网上冲浪时,关于gop-i,bar-beol-beol的文字和图像可能会引起您的烦恼,而这些文本和图像会在没有... 在动态元素添加频繁发生的网站
3.页面显示记数和IP防刷新记数两种记数模式,支持Script方式和Img方式调用计数器代码。 4.可以记录来访客的来源IP地址和来源页面信息,在线人数。 5.每月、每天和每小时的访问数据统计,回头率统计,每个网页浏览统计...
-- 各版块更新数据单独存放,防止频繁读写增加崩溃可能 -- 投票支持3D饼图和条形图 -- 独特上一贴和下一贴跳转,顺序按直观方式,而且附有主题说明 -- 方便的群发邮件功能,可以使用$username,$...
数据存储:数据信息自动生成XML文件进行存储、万条信息数据,数据库不会超过10M,让系统不频繁访问数据库,大大减轻数据库服务器的压力; 自定义属性:所有自定义属性支持各个页面调用; 后台功能:1、...
Web应用如此广泛,其中客户端与服务端交互时所消耗的资源及响应时间,频繁的刷新页面使得人机交互体验极为不好,而对每个页面使用客户端处理技术无疑又加大项目开发周期,脚本调试及修改维护的工作量将占用大量的...
: 提取代理时附加的HTTP协议头 默认=空(默认协议头)提取间隔 : 两次提取最小间隔(毫秒) 为了防止提取API接口限制提取频繁冻结 默认=1000(1秒)----------------验证地址 : 用于验证代理是否有效的url 比如IP...
8.纠正最新消息更多列表没加入最新消息文章属性限制 9.后台评论管理中,文章链接地址改用伪静态路径 10.去掉后台参数设置中,[后台头部界面]和[用户管理菜单]项 11.解决后台编辑器之前空2格低于一个汉字的问题 12....
7.网站增加cookie验证管理,可以设置使用session还是cookie进行验证(主要针对用户总是频繁退出的问题); 8.修复相关搜索功能、广告管理功能、及其它功能的修复,更新产品报价查询页面功能 ; 9.新增整合论坛:动网V8.0...
# innodb主线程刷新缓存池中的数据,使脏数据比例小于90% innodb_lock_wait_timeout = 120 # InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用...
oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。...
Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...
触摸屏用户可以不再受滚动条限制,在屏幕上任意地方都可以进行拖动 选择键盘映射为其它时无法再次更改的BUG 用户输入的颜色值无法保存的BUG 修正英文单词分词时会多添加一个空行的BUG 繁体语言措词上的修正 阅读设置...
19,新版CMS以栏目为中心,不同的栏目可以使用不同的内容模型,也可以读取BBS/Blog信息,栏目纵深允许无限延伸,从此不再受只能创建二级子栏目的限制。 20,新增强大的采集功能。所需要采集的字段可自定义,所有的内容...
语言环境ASP+SQL存储过程,支持达百万会员,结合Ajax无刷新设计,提高用户的使用体验。布局方式Div+CSS设计提高访问速度!各栏目可生成静态html。 2、后台提供会员资料采集,可采集世纪佳缘、嫁我网会员等,如需要...
LSA刷新过程 8.SPF计算和路由翻动 只要拓扑有变化,OSPF就运行SPF算法再次计算最短路径优先树。,可能引起链路的不稳定。 原因:。 区域内的接口翻动 。 区域内的邻居接口翻动 。 重复的路由器ID ...