336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
진행에 앞서 pom.xml과 web.xml을 수정해야한다.
pom.xml은 아래의 의존성을 추가해주자.
<!-- 서블릿 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
web.xml은 아래처럼 코딩해주자.
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>ch11.ListenerTestServlet</listener-class>
</listener>
</web-app>
1️⃣ 리스너 클래스 생성
예제 생성
src/main/java에서 ListenerExam 으로 클래스를 생성해주자.
2️⃣ ServletContext 이벤트 구현
위에서 만든 ListenerExam을 아래와 같이 코딩해주자.
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class ListenerExam implements ServletContextListener, ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener {
//리스너 생성자
public ListenerExam() {
}
//ServletContext 시작
public void contextInitialized(ServletContextEvent sce) {
sce.getServletContext().log("ServletContext 시작!!");
}
//ServletContext 종료
public void contextDestroyed(ServletContextEvent sce) {
sce.getServletContext().log("ServletContext 종료!!");
}
//속성 메소드: 추가, 변경, 삭제
public void attributeAdded(ServletContextAttributeEvent scae) {
scae.getServletContext().log("ServletContext 속성 추가 : "+scae.getValue());
}
public void attributeReplaced(ServletContextAttributeEvent scae) {
scae.getServletContext().log("ServletContext 속성 변경 : "+scae.getValue());
}
public void attributeRemoved(ServletContextAttributeEvent scae) {
scae.getServletContext().log("ServletContext 속성 삭제 : "+scae.getValue());
}
}
- @WebListenr : 현재 클래스가 리스너임을 알리고 컨테이너에 등록함.
리스너 자체는 실행과정이 없고, 톰캣이 실행될때 자동실행된다. 따라서 서버를 실행하고 로그를 보면된다.
ListenerTestServlet
ch11에 ListenerTestServlet 서블릿 클래스를 생성해주자.
init() 메소드에서 ServletContext객체를 가져오는 부분을 추가후
doGet()에서 ServletContext에 속성을 추가하도록 할것이다.
package ch11;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/ListenerTestServlet")
public class ListenerTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
ServletContext sc;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
sc = getServletContext();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
sc.setAttribute("name", "홍길동");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
이제 서버를 실행후 http://localhost:8082/ListenerTestServlet 에 접속해보자.
이렇게 빈화면만 표시되는데 인텔리제이로 돌아가 로그를 확인해보자.
3️⃣ 세션 이벤트 구현
세션과 관련된 이벤트 리스너를 구현할 것이다.
세션은 클라이언트가 서버에 접속할때 생성된다.
접속한 클라이언트 수만큼 생성되고, 일정시간이 지나거나 브라우저를 닫으면 다시생성된다.
ListenerExam 클래스에 아래의 코드를 추가해주자.
public void sessionCreated(HttpSessionEvent se) {
se.getSession().getServletContext().log("Session 생성됨 : "+se.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent se) {
se.getSession().getServletContext().log("Session 종료됨 : "+se.getSession().getId());
}
public void attributeAdded(HttpSessionBindingEvent se) {
se.getSession().getServletContext().log("Session 속성 추가 : "+se.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent se) {
se.getSession().getServletContext().log("Session 속성 삭제 : "+se.getValue());
}
public void attributeReplaced(HttpSessionBindingEvent se) {
se.getSession().getServletContext().log("Session 속성 변경 : "+se.getValue());
}
이제 ListenserTestServlet의 doGet() 부분에 세션 속성 추가 부분을 수정해주자.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
sc.setAttribute("name", "홍길동");
HttpSession s = request.getSession();
s.setAttribute("ssName", s.getId()+": 세션 속성 저장!!");
}
이제 톰캣서버를 돌려 테스트해보자.
여기서 브라우저를 완전히 종료하거나 다른 브라우저로 접속하면 새로운 세션이 생성되고 속성이저장이 된다.
[메인으로 돌아가기]
'Java Spring > 책공부 1 (JSP와 스프링)' 카테고리의 다른 글
25. JAX-RS로 REST API 서버 구현 (0) | 2022.07.18 |
---|---|
24. 한글 처리 필터 구현 (0) | 2022.07.15 |
22. 필터 (0) | 2022.07.15 |
21. 리스너 (0) | 2022.07.15 |
20. 뷰 구현 (0) | 2022.07.15 |