📄 JSP

[JSP] Day44 - Listener

harveydent 2023. 7. 7. 08:45
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

 

GitHub - Qkrwnsgus0522/JSP

Contribute to Qkrwnsgus0522/JSP development by creating an account on GitHub.

github.com

 

728x90