일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- marketplace
- Spring
- 윈도우
- NoClassDefFoundError
- 설정파일
- 이클립스
- SVN
- mybatis
- 생략
- 루팅
- Eclipse
- ResponseBody
- 스프링
- Version
- 마이바티스
- ㅗ르
- 마리아DB
- AOP
- 긴문자열
- 제어역전
- cutomobjectmapper
- 리눅스
- 의존성주입
- 버전
- jsonview
- 일정계획
- db admin
- dbeaver
- 캐릭터셋
- git
- Today
- Total
프밍일기
리스너를 이용한 세션 변경 감지 본문
자바EE에는 세션의 변경에 대응할 수 있도록 세션 이벤트 라는 개념이 있다. 해당 리스너를 추가하면 세션에 변경이 있을때 마다 변경 종류에 해당하는 이벤트 핸들러가 호출되어 적절한 처리를 할 수 있다. 이러한 리스너를 등록하는 방법에는 배포 기술자(web.xml)에 <listener>구성을 추가하는 방법과 @WebListener 어노테이션을 지정하는 방법이 있다.
■ 배포 기술자를 이용한 리스너 등록
# web.xml에 다음 내용 추가
<web-app>
......
<listener>
<listener-class>com.sample.servlet.SessionListener</listener-class>
</listener>
......
</web-app>
■ 어노테이션을 이용한 리스너 등록
# 리스너 클래스 처음에 @WebListener 추가
@WebListener
public class SessionListener implements HttpSessionListener, HttpSessionIdListener, HttpSessionAttributeListener {
......
}
■ 사용예제
# Listener Class
@WebListener public class SessionListener implements HttpSessionListener, HttpSessionIdListener, HttpSessionAttributeListener { @Override public void sessionCreated(HttpSessionEvent se) { // 세션 생성시 호출 System.out.println("[ session ] created / id : " + se.getSession().getId()); } @Override public void sessionDestroyed(HttpSessionEvent se) { // 세션 소멸시 호출 System.out.println("[ session ] destroyed / id : " + se.getSession().getId()); } @Override public void sessionIdChanged(HttpSessionEvent se, String oldSessionId) { // 세션ID 변경시 호출 System.out.println("[ session ] changed / oldId : " + oldSessionId + " / newId : " + se.getSession().getId()); } @Override public void attributeAdded(HttpSessionBindingEvent se) { // 프라퍼티 추가시 호출 System.out.println("[ session ] add / key : " + se.getName() + ", value : " + se.getValue()); } @Override public void attributeRemoved(HttpSessionBindingEvent se) { // 프라퍼티 삭제시 호출 System.out.println("[ session ] remove / key : " + se.getName()); } @Override public void attributeReplaced(HttpSessionBindingEvent se) { // 프라퍼티 값 변경시 호출 System.out.println("[ session ] replace / key : " + se.getName() + ", value : " + se.getValue() + " --> " + se.getSession().getAttribute(se.getName())); } }
# 세션을 사용하는 Servlet Class
@WebServlet( name = "helloServlet", urlPatterns = {"/greeting"}, loadOnStartup = 1 ) public class HelloServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String param1 = req.getParameter("param1").trim(); String name = req.getParameter("name").trim(); String value = req.getParameter("value").trim(); System.out.println("[ req.parameters ] command : " + param1 + " / key : " + name + " / value : " + value); HttpSession sess = req.getSession(); if ("inq".equals(param1)) { System.out.println("[ inquery ] " + name + " : " + sess.getAttribute(name)); } else if ("add".equals(param1)) { sess.setAttribute(name, value); } else if ("rem".equals(param1)) { sess.removeAttribute(name); } resp.getWriter().println("<script type='text/javascript'>history.back();</script>"); } }
# 테스트 HTML
<form id="form1" name="form1" method="post"> <input id="name" name="name" type="text" /> <input id="value" name="value" type="text" /> <input id="param1" name = "param1" type="hidden" /> <br /><br /> <input id="button1" name="button1" type="button" value="세션조회" onclick="javascript:sessionControl('inq');" /> <input id="button2" name="button2" type="button" value="세션추가" onclick="javascript:sessionControl('add');" /> <input id="button3" name="button3" type="button" value="세션삭제" onclick="javascript:sessionControl('rem');" /> </form> <script type="text/javascript"> function sessionControl(gbn) { form1.param1.value = gbn; form1.action = "http://localhost:8080/ServletSample/greeting"; form1.submit(); } </script>
# TEST Action
1. name / jack 으로 [세션추가]
2. name / eric 으로 [세션추가]
3. name 으로 [세션조회]
4. name 으로 [세션삭제]
5. name 으로 [세션조회]
# 결과
1. [ req.parameters ] command : add / key : name / value : jack
1. [ session ] created / id : 23A39776FE01C3BA0B914F5448AE2F5E
1. [ session ] add / key : name, value : jack
2. [ req.parameters ] command : add / key : name / value : eric
2. [ session ] replace / key : name, value : jack --> eric
3. [ req.parameters ] command : inq / key : name / value :
3. [ inquery ] name : eric
4. [ req.parameters ] command : rem / key : name / value :
4. [ session ] remove / key : name
5. [ req.parameters ] command : inq / key : name / value :
5. [ inquery ] name : null