日期:2014-05-19  浏览次数:20670 次

点击率问题
int id=Integer.parseInt(request.getParameter("id"));
int count=Integer.parseInt(request.getParameter("count"));
count=count+1;
conn conn=new conn();
conn.update("update newsInfo set clickCount='"+count+"' where newsId='"+id+"'");
在action中我对点击率进行了处理,我测试的时候也是按照我的意思完成的,不过现在遇到了一个问题是发布到网站上后,点击过一段时间会发生变化,如果是呈递增的话,那也没有 问题,但是事实不是这样,比如说一条新闻,现在看的点击率是24,过一段时间后,会变成是3,感觉很纳闷,也没有找出原因

------解决方案--------------------
那是因为你是多线程的问题 不同的客户通过不同的线程访问
统计出来的及时各个的点击率
解决办法:
将你的统计方法
设成同步的
就是加一个关键字:synchronized 来修饰你的方法
------解决方案--------------------
多个用户就应该是有多个线程,问题出在这里
------解决方案--------------------
探讨
int count=Integer.parseInt(request.getParameter("count"));
count 可以根据Id从数据库中读出来再加1
不要从页面获取

------解决方案--------------------
这个问题其实是并发访问servlet导致的.比如两个用户A,B同时访问一个页面,画面上有个count字段,其中A访问的时候,画面上的count是2,他疲倦了就睡了一小会儿,而B在count=2的情况下,访问同一条新闻22次,数据库就变成了24,而A睡醒了,也点击了一次,而画面上传的是2到后台,所以就把DB更新成3了.
其实你没有必要把count放到界面上去呀,直接用个SESSION字段来控制就好了.