블로그 이미지
기대주
초초초초보 개발자.. 프로그래머도 아니고..엔지니어도 아니고.. 은땡때문에살지요^^

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

'Language/Java'에 해당되는 글 20

  1. 2007.08.30 세션..필요하겠지..언젠가는1
2007. 8. 30. 15:12 Language/Java
자유인 님께서 남기신 글
화일 1 : SessionChecker.java (5.4 KB) Download : 90


토탈 및 오늘 접속자 수, 현재 접속자 IP및 접속자 수 구하기
먼저 저두 세션 바운딩 한 것 보구 구현하였습니다.
세션 바운딩 소스 출처는 ABOUT JSP임을 먼저 밝힙니다. ^^;

<jsp:useBean id="sc" class="beans.SessionChecker" scope="application" />
String ip = request.getRemoteAddr();
sc.setSession(session,ip);

이소스를 로그인 페이지에 삽입하시면 됩니다.
실제로 실행되는 부분은 java파일입니다.
그럼 admin 부분은 아래와 같습니다.
///////////////////////////////////////////////////////
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*, java.util.*" %>
<%@ page import="java.sql.Date" %>
<%
String strPicode = (String)session.getValue("ssnPiCode");
if(strPicode.equals("administrator")){%>
<% String num = null; %>
<% String today_count=null; %>
<% String today = null; %>
<% String today_num = null; %>
<% Vector v = new Vector();%>
<%
String member_num=null;
long t = System.currentTimeMillis();
Date date = new Date(t);
String chdate = date.toString();
chdate = chdate.replace('-','/');

try{
String dir = System.getProperty("user.dir")+"/ApacheGroup/ePims/admin/";
String filename = dir+"count.txt";
String filename2 = dir+"today_count.txt";
String filename3 = dir+"ip_count.txt";
FileReader fr = new FileReader(filename);
FileReader fr2 = new FileReader(filename2);
FileReader fr3 = new FileReader(filename3);
BufferedReader br = new BufferedReader(fr);
BufferedReader br2 = new BufferedReader(fr2);
BufferedReader br3 = new BufferedReader(fr3);

num = br.readLine();
today_count = br2.readLine();
String[] today_Cnvt = new String[3];
int idx = 0;
String str_spr = ",";
StringTokenizer strToken = new StringTokenizer(today_count, str_spr, true);
while(strToken.hasMoreTokens()) {
today = strToken.nextToken();
today_Cnvt[idx] = today;
idx++;
}
today_num = today_Cnvt[2];

String read_ip=null;
while((read_ip= br3.readLine())!=null){
read_ip = read_ip.trim();
v.addElement(read_ip);
}
br.close();
br2.close();
}catch(Exception e){System.out.println(e.getMessage());}


%>
<table width="200" cellpadding=0 cellspacing=0 border=0>
<tr>
<td>오늘 방문자 수</td>
<td><%=today_num%></td>
</tr>
<tr>
<Td>총 방문자 수</td>
<td><%= num%></td>
</tr>
<tr>
<td>현재 접속자 수</td>
<td><%=v.size()%></td>
</tr>
<tr>
<td colspan=2>현재 접속자 아이피</td>
</tr>
<%for(int i=0; i<v.size(); i++){%>
<tr>
<td colspan=2><%=(String)v.elementAt(i)%></td>
</tr>
<%}%>
</table>
<%}else{
response.sendRedirect("******");
}
%>
//////////////////////////////////////////////////////

이것의 장점은 디비를 사용하는것이 아니기 때문에
전혀 디비에 문제를 주지 않습니다.
단점은 구현한것만 이용할 수 있기 때문에 까오기님의 카운트 같이
여러 데이터를 볼 수 없다는 것이 단점 입니다.
나머지 필요한것은 님들이 더욱 첨부하셔서 다시 공유 해주시면 됩니다.
그럼 새해 복 많이 받으십시오.






자유인 참고한 바운딩 소스는 TIP게시판 60번글입니다
2003/01/02
홍영배 구현시 수정 사항을 알켜주시면 더욱 고마울텐데....
1.if(){} else{} 문을 수정하셔야 하고요...결과를 바로 보실려면 if(){}else{}문을 싸그리 지워주셔도 결과는 나옵니다..
2.String dir = System.getProperty("user.dir")+"/doc/hong/count/"; 부분을 자신의 경로에 맞게 수정해주시고...

위 두가지만 수정해주시면 결과를 보실 수 있습니다.
2003/01/02
자유인 홍영배님 감사합니다.. 첨 올리는 거라서 ^^;

소스 :

http://aboutjsp.com/zeroboard/data/aboutjsp_tip/SessionChecker.java


package beans;
import java.io.*;
import java.util.*;
import javax.servlet.http.*;
import java.sql.Date;

public class SessionChecker{
private String ip="";
public void setSession(HttpSession session, String ip){
// 리스너 객체를 생성해서 이것도 세션에 같이 담는다. 리스너 라는 이름으로...
this.ip = ip;
session.setAttribute("listener", new CustomBindingListener(ip));

}
}
// 여기서 구현했습니다..

class CustomBindingListener implements HttpSessionBindingListener {
String num=null;
String ip = "";
String read_ip = null;//현재 접속자 아이피

public CustomBindingListener(String ip){
this.ip=ip;
}
public void valueBound(HttpSessionBindingEvent event) {
// 세션이 생겼을 때 할 내용

long t = System.currentTimeMillis();
Date date = new Date(t);
String chdate = date.toString();
chdate = chdate.replace('-','/');
String today_count=null;
String today = null;
String today_num = null;//오늘 방문자 카운트
String total_num = null;//총 카운트

Vector v = new Vector();//현재 접속자 아이피 체크
try{
String dir = System.getProperty("user.dir")+"/ApacheGroup/ePims/admin/";//카운트 파일들을 저장 하는 경로 설정(절대경로)
String filename = dir+"count.txt";
String filename2 = dir+"ip_count.txt";
String filename3 = dir+"today_count.txt";
File file = new File(filename);
File file2 = new File(filename2);
File file3 = new File(filename3);
if(!file.exists()){
file.createNewFile();
}
if(!file2.exists()){
file2.createNewFile();
}
if(!file3.exists()){
file3.createNewFile();
}
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
FileReader fr2 = new FileReader(filename2);
BufferedReader br2 = new BufferedReader(fr2);
FileReader fr3 = new FileReader(filename3);
BufferedReader br3 = new BufferedReader(fr3);

num = br.readLine();//총 카운트 값 읽어오기
while((read_ip= br2.readLine())!=null){
read_ip = read_ip.trim();
v.addElement(read_ip);
}//현재 접속자 아이피 가져오기
today_count = br3.readLine();//오늘 방문자 카운트 가져오기
br.close();
br2.close();
br3.close();
//총방문자 초기화
if(num==null){
FileWriter fw = new FileWriter(filename);
fw.write("0");
num="0";
fw.close();
}
//현재접속자 초기화
if(read_ip==null){
String start = "127.0.0.1";
FileWriter fw = new FileWriter(filename2);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(start,0,start.length());
bw.close();
fw.close();
}
//오늘 방문자 초기화
if(today_count==null){
FileWriter fw3 = new FileWriter(filename3);
fw3.write(chdate+",1");
today_num="0";
fw3.close();
}

//총 카운트 입력
int now = (Integer.parseInt(num))+1;
Integer new_num = new Integer(now);
num = new_num.toString();
FileWriter fw = new FileWriter(filename);
fw.write(num);
fw.close();

//현재 접속자 아이피 입력
FileWriter fw2 = new FileWriter(filename2);
BufferedWriter bw2 = new BufferedWriter(fw2);
boolean match=false;
for (int i=0; i<v.size(); i++)
{
String read = (String)v.elementAt(i);
if(read.equals(ip)){
v.setElementAt(ip,i);//아이피 같은지 비교 후 업데이트
match = true;
}

}
if(!match){
v.addElement(ip);
}
for(int j=0; j<v.size(); j++){
String wr = (String)v.elementAt(j);
if(j!=0)
bw2.newLine();
bw2.write(wr,0,wr.length());
}
bw2.close();
fw2.close();

//오늘 방문자 입력
if(today_count!=null){
String[] today_Cnvt = new String[3];
int idx = 0;
StringTokenizer strToken = new StringTokenizer(today_count, ",", true);
while(strToken.hasMoreTokens()) {
today = strToken.nextToken();
today_Cnvt[idx] = today;
idx++;
}

if(today_Cnvt[0].equals(chdate)){
int today_num2 = (Integer.parseInt(today_Cnvt[2]))+1;

Integer new_today = new Integer(today_num2);
today_num = new_today.toString();

FileWriter fw3 = new FileWriter(filename3);
fw3.write(chdate+","+today_num);
fw3.close();
}else{
today_num = "1";
FileWriter fw3 = new FileWriter(filename3);
fw3.write(chdate+","+today_num);
fw3.close();
}
}
}catch(Exception e){System.out.println(e.getMessage());}
}


public void valueUnbound(HttpSessionBindingEvent event) {
// 세션이 종료되었을 때
Vector v = new Vector();
try{
String dir = System.getProperty("user.dir")+"/ApacheGroup/ePims/admin/";
String filename = dir+"ip_count.txt";

FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);

while((read_ip= br.readLine())!=null){
read_ip = read_ip.trim();
v.addElement(read_ip);
}
br.close();

FileWriter fw = new FileWriter(filename);
BufferedWriter bw = new BufferedWriter(fw);
for (int i=0; i<v.size(); i++)
{
String read = (String)v.elementAt(i);
if(read.equals(ip)){
v.removeElementAt(i);
}
}

for(int j=0; j<v.size(); j++){
String wr = (String)v.elementAt(j);
if(j!=0)
bw.newLine();
bw.write(wr,0,wr.length());
}
bw.close();
fw.close();
}catch(Exception e){System.out.println(e.getMessage());}
}
}
posted by 기대주