티스토리 뷰

   남이 만들어놓은 것만 즐겨 쓰다가 막상 직접 만들으려니.. 재미도 있지만 머리도 아프다 ㅋㅋ



   여러가지 방법이 있지만, 나는 DB에 테이블을 만들어서 가져오는 방식을 썼다. (쿠키를 이용하거나 일반 변수를 이용하는 방법 등등... 방법은 많다)


   참고할 사람들은 참고하시라...



1. 테이블 생성


CREATE TABLE VISIT (V_DATE date);  -- date타입으로 컬럼 하나.


   클라이언트IP라든지 다른 정보들을 넣고 싶다면 컬럼을 더 추가해도 괜찮다.



2. DAO에서 쿼리문 작성or연결


INSERT INTO VISIT (V_DATE) VALUES (sysdate); -- 전체 방문자 수 증가 setVisitTotalCount()


select count(*) from visit; -- 전체 방문자 수 조회 getVisitTotalCount()


select count(*) from visit   -- 오늘의 방문자 수 조회 getVisitTodayCount()

where substr(to_char(v_date), 1, 9) = to_date(sysdate, 'yy/MM/dd');


   각 쿼리문마다 메서드를 작성 후..



3. SessionListener 작성

public class SessionListener implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent arg0) {

		// DAO 객체 생성
		VisitCountDAO dao = VisitCountDAO.getInstance();
		
		// 전체 방문자 수 +1
		dao.setVisitTotalCount();
		
		// 오늘 방문자 수
		int todayCount = dao.getVisitTodayCount();
		
		// 전체 방문자 수
		int totalCount = dao.getVisitTotalCount();
		
		HttpSession session = arg0.getSession();
		
		// 세션 속성에 담아준다.
		session.setAttribute("totalCount", totalCount); // 전체 방문자 수
		session.setAttribute("todayCount", todayCount); // 오늘 방문자 수
		
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {

	}

}


4. web.xml에 세션리스너 등록


<listener>

<listener-class>kr.co.test.web.listener.SessionListener</listener-class>

</listener>



5. View(jsp파일)에서 속성 사용


전체 방문자 수: ${sessionScope.totalCount}

오늘의 방문자 수: ${sessionScope.todayCount}




   <이 방법의 장/단점>

* 장점 → 쿠키나 변수를 이용하는 것처럼 일회성이 아니다(즉, DB에 데이터가 남는다), 세션 영역을 이용하기 때문에 새로고침을 아무리 해도 카운트가 올라가지 않는다(새로 브라우저를 실행시키면 +1)

* 단점 → DB를 이용해야 한다(음.. 단점이 될 수 있나?), sysdate를 이용하므로 국가 간 시차는 염두에 두지 않음. 컴퓨터 시간을 바꾸면 엉뚱한 데이터가 조회될 수 있음.



시간만 좀더 투자하면 단점을 보완할 수 있을 것 같은데... 일단은 뭐... 무탈없이 돌아가기만 하면  ㅡ.ㅡ;; (시간이...)



댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함