본문 바로가기
JSP/이론

listener

by SEOKIHOUSE 2023. 7. 3.

종류

  • ServletContext - 서버 시작시 생성 || 서버 종료 시 삭제
  • HttpSession - 클라이언트 접속 시 생성 || 클라이언트 접속종료 시 삭제
  • HttpServletRequest - 클라이언트 서비스 요청 시 생성 || 클라이언트 서비스 응답 시 삭제


  • contextInitialized 여기서 set.attribute가 실행되면 attributeAdded가 실행된다
  • ServletContextEvent 객체인 sce에서 getServletContext 메서드를 호출하여 현재 웹 애플리케이션의 ServletContext 객체를 가져옵니다. 이렇게 얻은 ServletContext 객체를 sctx 변수에 저장합니다.


  • web.xml에서 가져온 것


  • 그렇다면 jsp에서 보내보자
  • ServletConfig는 서블릿의 설정 정보를 담고 있는 객체로, getServletContext 메서드는 해당 서블릿의 ServletContext 객체를 반환합니다. ServletContext는 웹 애플리케이션의 환경 정보를 담고 있는 객체입니다.



<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="AddServlet">ServletContext 속성 추가</a><br>
	<a href="ReplaceServlet">ServletContext 속성 변경</a><br>
	<a href="RemoveServlet">ServletContext 속성 삭제</a><br>
</body>
</html>
package servlets;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AddServlet")
public class AddServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	ServletContext sctx;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		sctx =config.getServletContext();
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		sctx.setAttribute("city", "홍콩");
		response.sendRedirect("01_result.jsp");
		
	}

}
package servlets;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ReplaceServlet")
public class ReplaceServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	ServletContext sctx;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		sctx =config.getServletContext();
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		sctx.setAttribute("city", "서울");
		response.sendRedirect("01_result.jsp");
	}

}
package servlets;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/RemoveServlet")
public class RemoveServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	ServletContext sctx;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		sctx =config.getServletContext();
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		sctx.removeAttribute("city");
		response.sendRedirect("01_result.jsp");
	}

}
package listeners;

import java.util.Enumeration;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class ServletContextTestListener implements ServletContextListener, ServletContextAttributeListener {
	ServletContext sctx;
	
	public ServletContextTestListener() {
		System.out.println("Listener생성...");
	}
	
    public void contextInitialized(ServletContextEvent sce)  {
    	System.out.println("Listener초기화 ...");
    	sctx = sce.getServletContext();
    	System.out.println(sctx.getInitParameter("user")); //green -web.xml
    	sctx.setAttribute("user", "짱구");
    	//어플리케이션 속성으로 들어가있는 녀석들
//    	Enumeration<String> names = sctx.getAttributeNames();
//    	while(names.hasMoreElements()) {
//    		System.out.println(names.nextElement());
//    	}
    }
    
    public void attributeAdded(ServletContextAttributeEvent scae)  { 
    	System.out.println("Listener : ServletContext 속성 추가..");
    	String name = scae.getName();
    	System.out.println("추가된 속성명 :" +name);
    }

    public void attributeReplaced(ServletContextAttributeEvent scae)  { 
    	System.out.println("Listener : ServletContext 속성 변경..");
    	String name = scae.getName();
    	System.out.println("변경된 속성명 :" +name);
    }
    
    public void attributeRemoved(ServletContextAttributeEvent scae)  { 
    	System.out.println("Listener : ServletContext 속성 삭제..");
    	String name = scae.getName();
    	System.out.println("삭제된 속성명 :" +name);
    }
    
    public void contextDestroyed(ServletContextEvent sce)  { 
    	System.out.println("Listener 종료..");
    }


    
	
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	pageContext.setAttribute("city", "NewYork");
%>
	<h1>결과페이지</h1>
	<hr>
	<h3>도시: ${applicationScope.city}</h3>
</body>
</html>

'JSP > 이론' 카테고리의 다른 글

JUnit(단위테스트 도구)//assertEquals  (0) 2023.07.04
form으로 데이터 빈공백으로 보내면 null체크여부  (0) 2023.07.03
filter  (0) 2023.07.03
페이징  (0) 2023.07.02
data-* 속성// button이랑 input등 속성값변경  (0) 2023.06.29