스프링

 

SessionListener와 DB를 활용하여 세션이 생성될때마다 방문기록을 DB에 넣어볼것이다.

Request Header 속성을 활용해서 정보를 가져올것이므로 Header관련 정보가 들어가도록 테이블을 만들자.

 

CREATE TABLE TB_VISITOR(
        VISIT_ID INT PRIMARY KEY,--기본키 , 시퀀스 달것임
        VISIT_IP VARCHAR(100) NOT NULL, --접속자 아이피
        VISIT_TIME DATETIME NOT NULL, --접속자 접속시간
        VISIT_REFER VARCHAR(300) NOT NULL, --접속자가 어느사이트를 타고 들어왔는지
        VISIT_AGENT VARCHAR(400) NOT NULL --접속자 브라우저 정보

 

DB 필드에 대응하는 VO를 만들고

2.VisitCountVO.java

public class VisitCountVO{
        private int visit_id;
        private int visit_ip;
        private int visit_time;
        private int visit_refer;
        private int visit_agent;
 
        //constructor/setter/getter 생략
    }
 

 

 

 

DAO를 만들고

3.VisitCountDAO.java

 

public class VisitCountDAO{
        public int insertVisitor(VisitCountVO vo) throws Exception{
            return insert("VisitCounterDAO_insertVisitor",vo);
        }
    }

 

 

MyBatis xml을 만들고

4.VisitCount_SQL.xml

 <insert id="VisitCountDAO" parameterType="kr.co.yg.vo.VisitCountVO">
            INSERT
            INTO TB_VISITOR
            (
                VISIT_ID,
                VISIT_IP,
                VISIT_TIME,
                <if test="visit_refer != null and visit_refer !=''">
                VISIT_REFER,
                </if>
                VISIT_AGENT
            )
            VALUES
            (
                VISITOR_SEQ.NEXTVAL,
                #{visit_ip},
                SYSDATETIME,
                <if test="visit_refer != null and visit_refer !=''">
                #{visit_refer},
                </if>
                #{visit_agent}
            )
        </insert>
    </mapper>

 

 

세션이 생성될때마다 실행되는 HttpSessionListner를 활용

5.VisitCounter.java

 

public class VisitCounter implements HttpSessionListener{
        @Override
        public void sessionCreated(HttpSessionEvent arg0){
            HttpSession session = arg0.getSession();
            WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext());
            //등록되어있는 빈을 사용할수 있도록 설정해준다
            HttpServletRequest req = ((SerevletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
            //request를 파라미터에 넣지 않고도 사용할수 있도록 설정
            VisitCountDAO visitCountDAO = (VisitCounterDAO)wac.getBean("visitCounterDAO");
            VisitCountVO vo = new VisitCountVO();
            vo.setVisit_ip(req.getRemoteAddr());
            vo.setVisit_agent(req.getHeader("User-Agent"));//브라우저 정보
            vo.setVisit_refer(req.getHeader("referer"));//접속 전 사이트 정보
            visitCountDAO.insertVisitor(vo);
        }
        @Override
        public void sessionDestroyed(HttpSessionEvent arg0){
            //TODO Auto-generated method stub
        }
    }

 

 

 

 

 

 

web.xml에 sessionListener 등록 및 빈설정파일 등록

6.web.xml

 

<PRE class=brush:xml>    <listener>
        <listener-class>kr.co.yg.VisitCounter</listener-class>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
 
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:yg/spring/context-*.xml
        </param-value>
    </context-param>
</PRE>

 

 

빈설정파일 context-listener.xml 에 DAO 빈 등록

7.context-listener.xml

<bean id="visitCountDAO" class="kr.co.yg.VisitCountDAO">

 

이런식으로 설정을 하면 사용자가 접속할때마다 세션이 생성되어 접속 정보가 테이블에 인서트된다(원래 접속하면 로그인 안해도 세션이 생김)

세션이 유지될동안은 카운트가 되지 않고 브라우저를 닫았다가 다시 열어서 접속하면 접속자가 추가된다(세션을 이용했기 때문에)

 

 

 

 

출처 : https://pkbad.tistory.com/36

[Spring+DB]방문자정보 저장, 방문자수 조회

 

 

 

 

HttpSessionListener 이용해 동시 로그인 사용자 및 세션 관리

 

https://hhseong.tistory.com/179

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

단물이 나는 샘은 가장 먼저 퍼내어 마르게 되고 키가 큰 나무는 가장 먼저 잘리게 된다. 모든 것이 쓸모가 있으면 자기의 장점으로 인해 몸을 망치게 된다. -묵자

댓글 ( 4)

댓글 남기기

작성