DIV class="h"
成都創(chuàng)新互聯(lián)公司成立與2013年,先為珠暉等服務(wù)建站,珠暉等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為珠暉企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
%-- 記錄網(wǎng)站訪問次數(shù) --%
%
Integer counter = (Integer)application.getAttribute("counter"); //先從application里面獲取計數(shù)器的key的值
if(counter==null){
//如果該值為null,說明第一次吵胡訪問
application.setAttribute("counter",1);
counter=(Integer)application.getAttribute("counter");
}else {
//如果該值不為空,取出來進(jìn)行累加
int i = counter.intValue();
i++;
application.setAttribute("counter",i);//累加后再放進(jìn)去
}
%
% User user =(User)session.getAttribute("users"); %
%="歡迎"+user.getName() % |您是第%=counter.intValue()%位訪客謹(jǐn)碰神
祥虧/DIV
謝謝~
首先給你講一下,我的理解,人數(shù)統(tǒng)計好說,因為,可已設(shè)置監(jiān)聽器,讓其在罩?jǐn)_服務(wù)器啟動的時候進(jìn)行監(jiān)聽,然后統(tǒng)計登錄人數(shù),但是統(tǒng)計在線人數(shù),就麻煩點(diǎn)了,因為大多數(shù)人都不愿意點(diǎn)擊注銷按鈕,直接關(guān)閉瀏覽器,這樣session的關(guān)閉就麻煩了點(diǎn),我先給出統(tǒng)計人數(shù)的代碼,我想統(tǒng)計在線人數(shù)可以定時調(diào)用程序來統(tǒng)計,但是不是實(shí)時的,物嫌旦所以最大的障礙就是怎么在關(guān)閉瀏覽器的時候,就關(guān)者兆閉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"));// 將人數(shù)保存到文本文件
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"));// 讀取已經(jīng)產(chǎn)生的人數(shù)信息,然后進(jìn)行累加
count = in.nextInt();
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
sc.setAttribute("AccessCount", count);
}
}
在web.xml文件里面進(jìn)行設(shè)置
listener
listener-class
文件的位置也就是包名.ApplicationListener
/listener-class
/listener
統(tǒng)計的時候是設(shè)置攔截器,需要在struts.xml中設(shè)置
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");// 判斷如果登錄成功,統(tǒng)計數(shù)字自增
sc.setAttribute("AccessCount", count+1);
id = session.getId();
}
String result = ai.invoke();
return result;
}
}
步驟一、建一個舉游表,表名任意,這里取名為:visitorcounter,表的結(jié)構(gòu)如下所示:
+-------+------------------+------+-----+------------+----------------+
| 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,類的內(nèi)容如下睜敬:
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_num1)
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:獲得訪問人數(shù)");
}
}
//加載總訪問量
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:獲得訪問人數(shù)");
}
}
//增加總的訪問量
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:增加訪問人數(shù)");
}
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:增加訪問人數(shù)");
}
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;
}
}
步驟三、經(jīng)過以上的步驟后,在頁面中加入以下的代碼,就可以實(shí)現(xiàn)網(wǎng)站訪問量的統(tǒng)計工作:
if(session.isNew())
{
VisitorCounter.incTodayCounter();
}
%
今日訪問量:%=VisitorCounter.getTodayNum() %br/
總的訪問量: %=VisitorCounter.getTotalNum() %
分享文章:java統(tǒng)計訪問量代碼 javaweb統(tǒng)計在線人數(shù)和訪問量
瀏覽路徑:http://jinyejixie.com/article2/ddpiooc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站策劃、搜索引擎優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)