까오기 카운터 2.21 (MySql)
===========================================================================
KKAOK count ver2.21
제작자 : kkaok ( jack1972@naver.com )
홈페이지 : http://www.kkaok.pe.kr
날짜 : 2002년 10월 16일
1차 수정 : 장재명 ( evilpooh@comeng.andong.ac.kr )
날짜 : 2002년 10월 30일
2차 수정 : kenu ( kenu@okjsp.pe.kr )
홈페이지 : http://www.okjsp.pe.kr
날짜 : 2002년 12월 15일
===========================================================================
1. 소스는 수정 배포 될수 있으며 수정 배포시 원 제작자를 명시하여야 한다.
2. 상업성 사이트에서의 사용은 금지한다.
3. 소스자체를 상업적(소스의 판매,대여등)으로 이용할 수 없다.
4. 이 프로그램의 사용으로 인한 어떠한 피해에도 제작자는 책임을 지지 않는다.
5. 이전 버전과의 다른점 - 에러처리만 조금 다릅니다.^^
수정판
0. 장재명(evilpooh@comeng.andong.ac.kr)님께서 수정하신 mysql 버전의 수정판입니다.
1. 컨텍스트를 자유롭게 바꿔서 설치할 수 있습니다.
2. Connection pool 을 변경했습니다. DBConnectionManager 에서 JDCPool 로 변경
모든 DBConnectionManager 관련 코드 제거
jdc-pool.jar 를 통해 pool 기능수행
PopDb.java 소스하나만 jdbc 정보 수정
pool 호출은 별다른 import 없이
conn = DriverManager.getConnection("jdbc:jdc:jdcpool");
로 wrapping 된 jdbc url 호출로 획득
conn.close(); 로
connection 반환
jdc-pool.jar 자체에서 일정시간 사용하지 않은 커넥션 객체 제거.
3. build.xml 을 통해서 소스컴파일과 배치를 편하게 했습니다.
4. frameset 을 사용해서 페이지 호출시 referer 파라메터로 값을 전달받을 수 있도록
했습니다.
5. web.xml 수정
컨텍스트 시작할 때 PopDb.class 호출로 db 풀 생성
Tomcat 4.1.12 버전에서 서블릿 직접 호출 막힘 풀어줌
카운터 통계 서블릿 호출 매핑
■ 테스트 URL
http://www.kkaok.pe.kr/
수정판
http://www.okjsp.pe.kr/
■ 개발 환경
Windows 2000 , Tomcat3.2.3, oracle 8.1.6, jdk 1.3.1
수정판
Windows XP pro , Tomcat4.1.12, mysql 3.23.49-nt, jdk 1.4.1
■ 테스트 환경
Windows 2000 , Tomcat3.2.3, oracle 8.1.6, jdk 1.3.1
수정판
Windows XP pro , Tomcat4.1.12, mysql 3.23.49-nt, jdk 1.4.1
■ 설치방법
수정판 1
1. ant 를 설치하고 path 에 설치한 ant의 /bin 디렉토리를 추가합니다.
2. 압축을 풀고 src/kr/pe/kkaok/common/PopDb.java 의 jdbc 정보를 수정합니다.
3. web-inf/classes/kr/pe/kkaok/common/config.java 이 화일의 내용을 자신의 환경에 맞게 고치세요
테스트 후 수정하셔도 상관없습니다.
4. build.xml 의 deploy.home 과 classpath 정보를 자신의 환경에 맞게 고치세요
5. build.xml 이 있는 디렉토리에서 ant deploy 를 실행하면 설치 끝입니다.
각 파일의 위치
http://okjsp.pe.kr/bbs?act=VIEW&seq=25943&bbs=bbs3&keyfield=content&keyword=&pg=0
원본
1. oracle을 실행하시고 kcount.sql에 있는 내용을 실행 시키세요
2. web-inf/classes/kr/pe/kkaok/pool/db.properties 이 화일의 내용을 자신의 환경에 맞게 고치세요
3. web-inf/classes/kr/pe/kkaok/common/config.java 이 화일의 내용을 자신의 환경에 맞게 고치세요
테스트 후 수정하셔도 상관없습니다.
4. 각 class 화일들을 컴파일하시고 테스트 하시면 됩니다.
5. test page : http://www.kkaok.pe.kr
TABLE SPEC(kcount) Column Name Column Type Null 제약key Description
idx number not null pk,index table의 고유값 이값의 최대값과 카운터 합계는 일치.
cdate NUMBER(8) not null index 접속날짜, 2002년 5월 15일이라면 20020515
ctime NUMBER(4) not null 접속시간, 3시 5분이라면 305
dayofweek NUMBER(1) not null index 접속요일,인덱스명 kcount_dayofweek_indx
ip varchar2(20) not null 접속ip
referer varchar2(200) referer 정보입력
browser varchar2(20) not null browser 정보입력
os varchar2(20) not null os 정보입력
sql
--------------------------------------------------------------------------
CREATE TABLE kcount (
idx int not null,
cdate int,
ctime int,
dayofweek int,
ip varchar(20),
referer varchar(200),
browser varchar(20),
os varchar(20),
constraint kcount_pk_idx Primary Key (idx)
);
create index kcount_cdate_indx on kcount(cdate,idx);
create index kcount_dayofweek_indx on kcount(dayofweek);
카운터올리기
--------------------------------------------------------------------------
<%@ page contentType="text/html; charset=EUC-KR" %>
<%@ page import="java.util.*" %>
<%@ page import="kr.pe.kkaok.common.ErrException" %>
<jsp:useBean id="ct" scope="request" class="kr.pe.kkaok.count.Count" />
<%
try{
ct.todayCount(request,response);
}catch(ErrException er){
out.println(er.errMessage());
}
%>
--------------------------------------------------------------------------
위의 소스를 user가 지나다니는 통로에 붙여 놓으세여
저의 경우 index.jsp에서 세개의 프레임을 나눠쓰고 있는데 그중 첫페이지인 index.jsp의 경우
모든 사람이 이곳을 경유하기 때문에 이곳에 붙여 놨습니다.
카운터보기 count.jsp
--------------------------------------------------------------------------
<%@ page contentType="text/html; charset=EUC-KR"%>
<%@ page import="java.util.*" %>
<%@ page import="kr.pe.kkaok.common.ErrException" %>
<%@ include file="/inc/refresh.jsp" %>
<jsp:useBean id="ct" scope="request" class="kr.pe.kkaok.count.Count" />
<%
try{
ct.todayCount(request,response);
}catch(ErrException er){
out.println(er.errMessage());
}
%>
<jsp:useBean id="nct" scope="request" class="kr.pe.kkaok.count.NowCount" />
<%
int today = 0;
int total = 0;
int nowNum = 0;
try{
ct.getStatistics();
today = ct.getToday();
total = ct.getTotalSum();
nowNum = nct.getNowNum();
}catch(ErrException er){
out.println(er.errMessage());
}
%>
<style>
<!--
.counter_title { font-size:12; font-family:Trebuchet MS,Palatino Linotype,Impact;color:#4B4B4B;}
A { color:#262626; font-weight:bold; text-decoration:none; font-family:arial;}
A:hover {color:red; font-weight:bold;text-decoration:underlin; font-family:arial;}
-->
</style>
<link rel=stylesheet href=http://okjsp.pe.kr/css/okjsp.css type=text/css>
<body class="body" topmargin="2" leftmargin="2" marginheight="2" marginwidth="2">
<span style="font:9pt">
<span class=counter_title><b>KKAOK</b> counter</span><br>
오늘 : <%=today%><br>
전체 : <%=total%><br>
현재 : <%=nowNum%><br>
<a href="javascript:OpenWinCount('<%=request.getContextPath() %>/KkaokiCount',520,520)">▒ 통계보기 ▒</a><br>
</span>
</body>
<script language="javaScript">
<!--
function OpenWinCount(URL,width,height) {
var str,width,height;
str="'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,";
str=str+"width="+width;
str=str+",height="+height+"',top=150,left=250";
window.open(URL,'remote',str);
}
//-->
</script>