728x90
Listener
Listener란 특정 이벤트가 발생하기를 기다리다가 이벤트가 발생함과 동시에 특정 메서드나 함수를 실행할 때 사용합니다. 이것을 이벤트 핸들링 이라고 합니다. 따라서 리스너를 이벤트 핸들러라고 부르기도 합니다.
Listener 종류
이벤트 소스 | 이벤트 리스너 | 발생 이벤트 객체 | 설명 |
Servlet Context |
ServletContextListener | ServletContextEvent | 웹 어플리케이션의 시작, 종료 이벤트에 대한 이벤트 리스너입니다. 핸들러 메서드에서는 ServletContext에 대한 참조를 얻을 수 있습니다. |
ServletContextAttributeListener | ServletContextAttributeEvent | ServletContext에 attribute를 추가하거나 제거, 수정됐을 때에 대한 이벤트 리스너입니다. 핸들러 메서드에서는 추가하거나 제거, 수정 된 attribute 정보를 얻을 수 있습니다. | |
Http Session |
HttpSessionListener | HttpSessionEvent | HTTP 세션의 시작, 종료 이벤트에 대한 이벤트 리스너입니다. 핸들러 메서드에서는 현재 세션 객체를 얻을 수 있습니다. |
HttpSessionAttributeListener | HttpSessionBindingEvent | HttpSession에 attribute를 추가하거나 제거, 수정됐을 때에 대한 이벤트 리스너입니다. 핸들러 메서드에서는 추가하거나 제거, 수정된 attribute 정보를 얻을 수 있습니다. | |
Servlet Request |
ServletRequestListener | ServletRequestEvent | 클라이언트로부터 요청으로 인한 ServletRequest 생성과 응답 이후 ServletRequest 제거시에 대한 이벤트 리스너입니다. 핸들러 메서드에서는 요청에 관련된 정보와 ServletContext에 대한 참조를 얻을 수 있습니다. |
ServletRequestAttributeListener | ServletRequestAttributeEvent | ServletRequest에 attribute를 추가하거나 제거, 수정됐을 때에 대한 이벤트 리스너입니다. 핸들러 메서드에서는 추가하거나 제거, 수정된 attribute 정보를 얻을 수 있습니다. |
실습
리스너 크롤링
package controller;
import java.util.ArrayList;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import model.BoardDAO;
import model.BoardVO;
import model.Crawling;
/**
* Application Lifecycle Listener implementation class TestListener
*
*/
@WebListener
public class TestListener implements ServletContextListener {
/**
* Default constructor.
*/
public TestListener() {
// TODO Auto-generated constructor stub
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
/**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
// 리스너가 처음 시작할 때 이 부분에서 크롤링 해주세요~
// 그리고 DB에 넣어주세요! :D
ArrayList<BoardVO> datas = Crawling.sample();
BoardDAO boardDAO = new BoardDAO();
for (BoardVO v : datas) {
boardDAO.insert(v);
}
System.out.println("contextInitialized 로그");
}
}
TestListener.java
package model;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Crawling {
public static ArrayList<BoardVO> sample() { // 원래 main()이었음
final String url = "http://www.cgv.co.kr/movies/?lt=1&ft=0";
Connection conn = Jsoup.connect(url);
Document doc = null;
try {
doc = conn.get();
} catch (IOException e) {
e.printStackTrace();
}
Elements elems = doc.select("strong.title");
Elements elems2 = doc.select("span.txt-info");
Iterator<Element> itr = elems.iterator();
Iterator<Element> itr2 = elems2.iterator();
//////////////////////////////
ArrayList<BoardVO> bdatas = new ArrayList<BoardVO>();
int PK=111;
//////////////////////////////
while(itr.hasNext()) {
String str = itr.next().toString();
String str2 = itr2.next().toString();
int index = str.indexOf(">");
str = str.substring(index+1);
index = str.indexOf("<");
str = str.substring(0, index);
int index2 = str2.indexOf("<strong>");
str2 = str2.substring(index2+9);
index2 = str2.indexOf("<span>");
str2 = str2.substring(0, index2);
//System.out.println(str);
//System.out.println(str2);
//System.out.println();
bdatas.add(new BoardVO(0, str, str2, "admin"));
}
return bdatas;
}
}
Crawling.java
GitHub
https://github.com/Qkrwnsgus0522/JSP
728x90