❶ 高手請進!!java統計網站的訪問量和在線人數的問題,有知道的直接發一個簡單的例子我,多謝啦!
首先給你講一下,我的理解,人數統計好說,因為,可已設置監聽器,讓其在伺服器啟動的時候進行監聽,然後統計登錄人數,但是統計在線人數,就麻煩點了,因為大多數人都不願意點擊注銷按鈕,直接關閉瀏覽器,這樣session的關閉就麻煩了點,我先給出統計人數的代碼,我想統計在線人數可以定時調用程序來統計,但是不是實時的,所以最大的障礙就是怎麼在關閉瀏覽器的時候,就關閉session
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ApplicationListener implements ServletContextListener{
public void contextDestroyed(ServletContextEvent arg0) {
ServletContext sc = arg0.getServletContext();
Integer count = (Integer) sc.getAttribute("AccessCount");
try {
PrintWriter out = new PrintWriter(new FileWriter("c:/Users/god/count.txt"));// 將人數保存到文本文件
System.out.println("count:"+count);
out.print(count);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void contextInitialized(ServletContextEvent arg0) {
Integer count = 0;
ServletContext sc = arg0.getServletContext();
try {
Scanner in = new Scanner(new FileReader("c:/Users/god/count.txt"));// 讀取已經產生的人數信息,然後進行累加
count = in.nextInt();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
sc.setAttribute("AccessCount", count);
}
}
在web.xml文件裡面進行設置
<listener>
<listener-class>
文件的位置也就是包名.ApplicationListener
</listener-class>
</listener>
統計的時候是設置攔截器,需要在struts.xml中設置
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
@SuppressWarnings("serial")
public class AccessInterceptor implements Interceptor{
private String id;
public void destroy() {
}
public void init() {
}
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation ai) throws Exception {
ServletContext sc = ServletActionContext.getServletContext();
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
if(!session.getId().equals(id)){
Integer count = (Integer) sc.getAttribute("AccessCount");// 判斷如果登錄成功,統計數字自增
sc.setAttribute("AccessCount", count+1);
id = session.getId();
}
String result = ai.invoke();
return result;
}
}
❷ java統計瀏覽器訪問量
利用session創建計數用於記錄當前在線人數!離開時間只能依據session被殺死時的模糊時間,如果要獲得更准確的時間可以把session的存活期弄斷點,將用戶訪問記錄存儲到cookie里,我們只能依據用戶多久沒操作 session被幹掉來判斷用戶可能離開了,因為期間用戶不可能都對伺服器發出退出請求,盡管我們都設有退出的操作模塊!如果只是用於訪問量的話就不需要考慮session被殺死吧!只管記錄有多少遊客登入進來就行了!
❸ 現在做一個java web的項目,要實現一個功能,就是實現訪問量統計,每一次瀏覽網頁訪問量+1,最重要的是
給你個思路:比如要統計某一篇文章的訪問次數。
你應該能獲取這篇文章所在的資料庫的記錄;然後把記錄的ID保存在當前的session中。判斷當前session中是否有這個ID了,如果沒有的話,把這條記錄的訪問記錄加1(前提是這條記錄有欄位去記錄對應的訪問次數),如果有的話,啥都不操作。
保存在session中的話,如果在session有效期內,用戶無論怎麼刷新頁面訪問次數不會重復疊加,這樣做有一個不好的地方就是如果session失效了,那麼即使是同一台電腦再次訪問這篇文章的話,記錄還是會加1的。
因此有人提出保存在cookie中,只要用戶不清理cookie,並且cookie設置永久不失效那麼即使是同一台電腦在不同時間訪問這個文章,那麼之前已經統計過的話,這個是不會重復統計的。
兩個方法都有優缺點,一般來說訪問次數都是一個大概取值,所以上述兩者其實都有人用的。
❹ java怎麼實統計在線人數,和訪問量
簡單的說個我的思路供你借鑒:
在線人數,我理解為當前應用的session數目,不過sevlert好像不提供獲取全部session的方法,可以通過加一個sessionlistener來記錄(創建就+1,銷毀就-1)
訪問量相對簡單,你定義一個全局的計數器就好了,來一個(這個有很多種方法,比如:有一個新的session被創建)人你就+1
❺ java web 網站訪問量統計 設計求解答
如果後續需要用到這部分數據,肯定是要做持久化的。 統計處理可以精細化到具體頁面(這個要看錶結構如何設計了) 頁面處理建議在action中直接入庫及訪問數據展示~ 或js頁面初始化時ajax入庫
❻ java怎麼統計網站訪問量
<DIV class="h">
<%-- 記錄網站訪問次數 --%>
<%
Integer counter = (Integer)application.getAttribute("counter"); //先從application裡面獲取計數器的key的值
if(counter==null){
//如果該值為null,說明第一次訪問
application.setAttribute("counter",1);
counter=(Integer)application.getAttribute("counter");
}else {
//如果該值不為空,取出來進行累加
int i = counter.intValue();
i++;
application.setAttribute("counter",i);//累加後再放進去
}
%>
<% User user =(User)session.getAttribute("users"); %>
<%="歡迎"+user.getName() %> |您是第<%=counter.intValue()%>位訪客
</DIV>
❼ Java 帖子的瀏覽量,總訪問人數怎麼統計
一般來說,如果是網頁,完全沒有必要自己去統計網站人數(自己統計可以放在application域中,定時同步到資料庫),一般我們的解決方案是使用插件,各種各樣的插件,比如cnzz的站長統計插件(總訪問人數,ip,pv,up等),至於帖子的瀏覽量,就算同一個session只加一次比較好
❽ java如何統計網站訪問量
步驟一、建一個表,表名任意,這里取名為:visitorcounter,表的結構如下所示:
+-------+------------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+------------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| vdate | date | NO | | 2000-01-01 | |
| vnum | int(11) | NO | | 0 | |
+-------+------------------+------+-----+------------+----------------+
步驟二、建立一個java類,名字也為:visitorcounter,類的內容如下:
package com.hdzx.pub;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Date;
public class VisitorCounter {
private final static String TABLE_NAME = "visitorcounter";
private static String today = null;
private static long today_num = 0;
private static long total_num = 0;
//載入訪問量
public static void loadNum(){
if(total_num<1)
loadTotalNum();
if(today_num<1)
loadToadyNum();
}
//載入今日訪問量
private static void loadToadyNum() {
// TODO Auto-generated method stub
DBConnect db = null;
ResultSet rs = null;
if(today==null)
today = getTodayDate();
String sql = "select vnum from "+TABLE_NAME+" where vdate='"+today+"'";
try {
db = new DBConnect();
rs = db.executeQuery(sql);
if(rs.next()){
today_num = rs.getLong("vnum");
}
else
{
sql = "insert into "+TABLE_NAME+"(vdate,vnum) values('"+today+"',0)";
db.executeUpdate(sql);
today_num = 0;
}
} catch (Exception e) {
// TODO: handle exception
today_num = 0;
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:獲得訪問人數");
}
}
//載入總訪問量
private static void loadTotalNum() {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
DBConnect db = null;
ResultSet rs = null;
if(today==null)
today = getTodayDate();
String sql = "select vnum from "+TABLE_NAME+" where id=1";
try {
db = new DBConnect();
rs = db.executeQuery(sql);
if(rs.next()){
total_num = rs.getLong("vnum");
}
else
{
total_num = 0;
}
} catch (Exception e) {
// TODO: handle exception
total_num = 0;
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:獲得訪問人數");
}
}
//增加總的訪問量
private static int incTotalCounter(){
int k = 0;
DBConnect db = null;
loadNum();
total_num = total_num+1;
String sql = "update "+TABLE_NAME+" set vnum="+total_num+" where id=1";
try {
db = new DBConnect();
k = db.executeUpdate(sql);
} catch (Exception e) {
// TODO: handle exception
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:增加訪問人數");
}
return k;
}
//增加今日的訪問量
public static int incTodayCounter(){
int k = 0;
DBConnect db = null;
String sql = null;
loadNum();
today_num += 1;
sql = "update "+TABLE_NAME+" set vnum="+today_num+" where vdate='"+today+"'";
try {
db = new DBConnect();
k = db.executeUpdate(sql);
if(k > 0)
incTotalCounter();
} catch (Exception e) {
// TODO: handle exception
System.out.println("com.hdzx.pub~VisitorCounter.incTotalCounter:增加訪問人數");
}
return k;
}
//獲得今天的日期
private static String getTodayDate(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(new Date());
}
///獲得今日訪問量
public static long getTodayNum(){
loadNum();
return today_num;
}
//獲得總的訪問量
public static long getTotalNum(){
loadNum();
return total_num;
}
}
步驟三、經過以上的步驟後,在頁面中加入以下的代碼,就可以實現網站訪問量的統計工作:
if(session.isNew())
{
VisitorCounter.incTodayCounter();
}
%>
今日訪問量:<%=VisitorCounter.getTodayNum() %><br/>
總的訪問量: <%=VisitorCounter.getTotalNum() %>
❾ 網站訪問量統計java代碼
public class Counter {
private int count;
// 每訪問一次,計數器自加一
public int getCount() {
return ++count;
}
public void setCount(int count) {
this.count = count;
}
}
<%-- 定義一個 session 范圍內的計數器 記錄個人訪問信息 --%>
<jsp:useBean id="personCount" class="com.helloweenvsfei.jspweb.bean.Counter" scope="session" />
<%-- 定義一個 application 范圍內的計數器 記錄所有人的訪問信息 --%>
<jsp:useBean id="totalCount" class="com.helloweenvsfei.jspweb.bean.Counter" scope="application" />
<div align="center">
<form action="method.jsp" method="get">
<fieldset style='width: 300'>
<legend>計數器</legend>
<table align="center" width="400">
<tr>
<td width=150 align="right" style="font-weight:bold; ">您的訪問次數:</td>
<td>
<%-- 獲取個人的 訪問次數 --%>
<jsp:getProperty name="personCount" property="count" /> 次
</td>
</tr>
<tr>
<td width=150 align="right" style="font-weight:bold; ">總共的訪問次數:</td>
<td>
<%-- 獲取所有人的 訪問次數 --%>
<jsp:getProperty name="totalCount" property="count" /> 次
</td>
</tr>
</table>
</fieldset>
</form>
</div>
希望你能幫到你