[Servlet] load on startup

sang·2024년 2월 15일

load-on-startup

서블릿의 브라우저 최초 요청에 대한 긴 실행 시간 단축
톰캣 컨테이너 실행 시 미리 서블릿 실행
우선순위 지정 시 서블릿 초기화

  • 초기화 우선순위 지정
    양의 정수
    숫자가 작을수록 먼저 실행

방법1. 애너테이션 이용

ServletContext 객체 사용
web.wml 파일보다 빠르게 읽고 출력 가능

pro08/src/sec06/ex02/LoadAppConfig.java

package sec06.ex02;
...

@WebServlet(name = "loadConfig", urlPatterns = { "/loadConfig" }, loadOnStartup = 1) // loadOnStartup 우선순위 설정
public class LoadAppConfig extends HttpServlet {
  private ServletContext context;

  @Override
  public void init(ServletConfig config) throws ServletException {
    System.out.println("LoadAppConfig의 init 메소드 호출");
    
    /* ServletContext 객체 & 데이터 가져오기 */
    context = config.getServletContext();
    String menu_member = context.getInitParameter("menu_member");
    String menu_order = context.getInitParameter("menu_order");
    String menu_goods = context.getInitParameter("menu_goods");
    
    /* 데이터 바인딩 */
    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 context = getServletContext(); 사용하지 않는 코드 주석처리
    
    /* 바인딩된 데이터 가져오기 */
    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.print("<html><body>");
    out.print("<table border=1 cellspacing=0><tr>메뉴 이름</tr>");
    out.print("<tr><td>" + menu_member + "</td></tr>");
    out.print("<tr><td>" + menu_order + "</td></tr>");
    out.print("<tr><td>" + menu_goods + "</td></tr>");
    out.print("</table></body></html>");
  }
} 

방법2. web.xml 설정

pro08/WebContent/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 
<servlet>
  <servlet-name>loadConfig</servlet-name> <!-- 서블릿 생성 시 name 값 -->
  <servlet-class>sec06.ex02.LoadAppConfig</servlet-class> <!-- 서블릿 클래스 이름 -->
  <load-on-startup>1</load-on-startup> <!-- 우선순위 설정 -->
</servlet>
<servlet-mapping>
  <servlet-name>loadConfig</servlet-name>
  <url-pattern>/loadConfig</url-pattern>
</servlet-mapping>
</web-app>


*자바 웹을 다루는 기술

profile
CS 메모장

0개의 댓글