백문이불여일타

Jsp&Servlet:: load-on-startup 기능이란? || web.xml 설정법 본문

Jsp

Jsp&Servlet:: load-on-startup 기능이란? || web.xml 설정법

퇴근각 2019. 8. 23. 16:52

load-on-startup 이란?


서블릿은 브라우저에서 최초 요청시 init() 메서드를 실행한 후 메모리에 로드되어 기능을 수행합니다. 

따라서 최초요청에 대해서 실행시간이 길어질수 있는 단점이 있다.

이런 단점을 보완하기 위해 생긴 기능이 load-on-startup 기능이다. 

 

load-on-startup의 특징

  • 톰캣 컨테이너가 실행되면서 미리 서블릿을 실행.
  • 지정한 숫자가 0 보다 크면 톰켓컨테이너가 실행되면서 서블릿이 초기화 된다.
  • 지정한 숫자는 우선순위를 의미하며, 작은숫자부터 먼저 초기화 된다. 

load-on-startup 기능 구현방법

  • 애너테이션 설정
  •  web.xml 설정 

애너테이션을 이용해 설정하는방법 


2019/08/22 - [Jsp] - Jsp&Servlet:: ServletConfig란? | 애너테이션 설정방법

 

Jsp&Servlet:: ServletConfig란? | 애너테이션 설정방법

ServletConfig란? 서블릿 확장API인 ServletConfig는 각 Servlet 객체에 대해 생성됩니다. (▼아래 내용참조하시어 그림을 확인해보시기 바랍니다.) 2019/08/20 - [Jsp] - jsp&servlet:: ServletContext란 jsp&ser..

java117.tistory.com

1. 애너테이션 설정 

단, 애너테이션을 설정할때는 아래와 체크된 3가지 부분만 체크한다.

 

2. LoadAppConfig 클래스에 애너테이션 으로 설정한 매개변수에 loadOnStartup 속성을 추가한 후 우선순위를 1로 설정한다.

package sec06.ex02;

import java.io.IOException;
import java.io.PrintWriter;

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(name = "loadAppConfig", urlPatterns = { "/loadConfig" }, loadOnStartup = 1)
public class LoadAppConfig extends HttpServlet {

	private ServletContext context; 
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("LoadAppConfig의 init메서드 호출됨");
		//init메서드에서 ServletContext 객체를 얻는다.
		context = config.getServletContext(); 
		/*getInitParameter()메서드로 web.xml의 메뉴 정보를 읽는다 */
		String menu_member = context.getInitParameter("menu_member");
		String menu_order = context.getInitParameter("menu_order");
		String menu_goods = context.getInitParameter("menu_goods");
		/*메뉴정보를 ServletContext객체에 바인딩한다 */
		context.setAttribute("menu_member", menu_member);
		context.setAttribute("menu_order", menu_order);
		context.setAttribute("menu_goods", menu_goods);
	}

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		/*브라우저에서 요청시 ServletContext객체의 바인딩된 메뉴 항목을 가져온다 */
		String menu_member = (String) context.getAttribute("menu_member");
		String menu_order = (String) context.getAttribute("menu_order");
		String menu_goods = (String) context.getAttribute("menu_goods");
		out.println("<html><boby>");
		out.println("<table border =1 cellspacing =0><tr>메뉴이름</tr>");
		out.println("<tr><td>"+menu_member+"</td></tr>");
		out.println("<tr><td>"+menu_order+"</td></tr>");
		out.println("<tr><td>"+menu_goods+"</td></tr>");
		out.println("</tr></table></boby></html>");
	}
}

3. 결과

톰캣 실행 시 init()메서드를 호출하면 getInitParameter()메서드를 이용해 web.xml의 메뉴정보를 읽어 들인 후 다시 ServletContext객체에 setAttribute()메서드로 바인딩합니다.

브라우저에서 요청하면 web.xml 이 아니라 ServletContext 객체에서 메뉴 항목을 가져온 후 출력하기때문에 

브라우저에서 나타나는 출력속도가 매우 빠르다! 

 

web.xml에 설정하는 방법


원래는 애너테이션이 생기기전부터 web.xml에다가 설정했다고 한다.

위와같이 작성하고 톰캣을 실행해도 애너테이션으로 실행했을때와 결과는 같다.

Comments