반응형
SessionListener와 DB를 활용하여 세션이 생성될때마다 방문기록을 DB에 넣어볼것이다.
Request Header 속성을 활용해서 정보를 가져올것이므로 Header관련 정보가 들어가도록 테이블을 만들자.
1.DDL
1
2
3
4
5
6
7
|
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 --접속자 브라우저 정보
|
cs |
DB 필드에 대응하는 VO를 만들고
2.VisitCountVO.java
1
2
3
4
5
6
7
8
9
10
|
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 생략
}
|
cs |
DAO를 만들고
3.VisitCountDAO.java
1
2
3
4
5
6
|
public class VisitCountDAO{
public int insertVisitor(VisitCountVO vo) throws Exception{
return insert("VisitCounterDAO_insertVisitor",vo);
}
}
|
cs |
MyBatis xml을 만들고
반응형
4.VisitCount_SQL.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<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>
|
cs |
세션이 생성될때마다 실행되는 HttpSessionListner를 활용
5.VisitCounter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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
}
}
|
cs |
web.xml에 sessionListener 등록 및 빈설정파일 등록
6.web.xml
1
2
3
4
5
6
7
8
9
10
11
12
|
<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>
|
cs |
빈설정파일 context-listener.xml 에 DAO 빈 등록
7.context-listener.xml
1
2
|
<bean id="visitCountDAO" class="kr.co.yg.VisitCountDAO">
|
cs |
이런식으로 설정을 하면 사용자가 접속할때마다 세션이 생성되어 접속 정보가 테이블에 인서트된다(원래 접속하면 로그인 안해도 세션이 생김)
세션이 유지될동안은 카운트가 되지 않고 브라우저를 닫았다가 다시 열어서 접속하면 접속자가 추가된다(세션을 이용했기 때문에)
반응형
'Web Development > Spring' 카테고리의 다른 글
multipart filter 적용하기 (0) | 2018.10.17 |
---|---|
전자정부프레임워크 마이바티스 설정 (0) | 2017.12.29 |
[Spring]CKEditor로 이미지 첨부하기 (2) | 2017.12.21 |
[SPRING]APACHE POI를 활용한 EXCEL 다운로드 (1) | 2017.12.11 |
[Spring]http->https 이동간 세션 복사 (2) | 2017.10.31 |