서블릿 <start-on-startup> 값은 무엇을 의미합니까


174

나는 여기에 약간 혼란스러워지고있다. 우리의 응용 프로그램에서 우리는 몇 가지 서블릿을 정의했습니다. 다음은 web.xml서블릿 중 하나 에서 발췌 한 것입니다 .

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>com.foo.framework.axis2.http.FrameworkServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet> 

내 이해에 따라 값을 <load-on-startup>자동으로로드 하려면 값 이 양의 정수 여야합니다. 나는 구글을 찾았지만 내가 본 응답은 혼란에 추가되었습니다.

답변:


186

Resin 3.0 은이 동작을 문서화합니다 :

시작시로드는 (선택적) 정수 값을 지정할 수 있습니다. 값이 0 이상인 경우 서블릿이로드되는 순서를 나타내며 숫자가 높은 서블릿은 숫자가 작은 서블릿 뒤에로드됩니다.

JSP 3.1 스펙 (JSR 340) 페이지 14-160에서이 말한다 :

요소 load-on-startup는이 서블릿이 웹 애플리케이션 시작시로드 (인스턴스화되고 init ()가 호출 됨)되어야 함을 나타냅니다. 이 요소의 요소 내용은 서블릿이로드되는 순서를 나타내는 정수 여야합니다. 값이 음의 정수이거나 요소가 없으면 컨테이너는 선택할 때마다 서블릿을 자유롭게로드 할 수 있습니다. 값이 양의 정수 또는 0 인 경우, 애플리케이션이 배치 될 때 컨테이너가 서블릿을로드하고 초기화해야합니다. 컨테이너는 더 높은 정수로 표시된 서블릿보다 낮은 정수로 표시된 서블릿이로드되도록 보장해야합니다. 컨테이너는 서블릿의 로딩 순서를 동일한 load-on-startup값으로 선택할 수 있습니다 .

JSR뿐만 아니라 웹 컨테이너의 문서도 확인하고 싶을 것입니다. 차이가있을 수 있습니다


클레 투스는 그의 대답에서 틀렸다. 게시물을 수정하는 것을 고려해야합니다.
Alboz

3
시작시로드가 지정되지 않은 경우 어떻게됩니까?
Nirmal

1
@Nirmal 두 번째 단락은 요소가 존재하지 않으면 그것이 마치 음수 인 것과 같은 동작을 갖도록 지정합니다. 즉, 컨테이너는 선택할 때마다 서블릿을 자유롭게로드 할 수 있습니다.
Finnegan

129

Short Answer : value> = 0은 웹앱이 배포되거나 서버가 시작될 때 서블릿이로드됨을 의미합니다. value <0 : 컨테이너가 느껴질 때마다 서블릿이로드됩니다.

긴 답변 (사양에서) :

시작시로드 요소는이 서블릿이 웹 응용 프로그램 시작시로드 (인스턴스화되고 init ()가 호출되어야 함)를 나타냅니다. 이 요소의 선택적 내용은 서블릿이로드되는 순서를 나타내는 정수 여야합니다. 값이 음의 정수이거나 요소가 없으면 컨테이너는 선택할 때마다 서블릿을 자유롭게로드 할 수 있습니다. 값이 양의 128 정수 또는 0이면, 컨테이너는 애플리케이션이 배치 될 때 서블릿을로드하고 초기화해야합니다. 컨테이너는 더 높은 정수로 표시된 서블릿보다 낮은 정수로 표시된 서블릿이로드되도록 보장해야합니다. 컨테이너는 시작시로드 값이 동일한 서블릿로드 순서를 선택할 수 있습니다.


1
응용 프로그램이 시작될 때 DispatcherServlet에 0을 표시하여로드하는 이유는 무엇입니까?
Lucky

11

요청이 액세스를 시도 할 때까지 서블릿이 시작되지 않음을 나타냅니다.

시작시로드가 0보다 크거나 같은 경우 컨테이너가 시작되면 시작시로드시로드 값의 오름차순으로 해당 서블릿을 시작합니다 (예 : 0, 1, 2, 5, 10 등). .


7
0도 로딩을 유발합니다. "[...] 값이 양의 정수 또는 0 인 경우 응용 프로그램이 배포 될 때 컨테이너가 서블릿을로드하고 초기화해야합니다. [...]"
marabol

1
@cletus 나는 그것을 수정하는 것이 좋습니다 생각 0보다 큰이상을 제로에 동일 수락 한 당 바와 같이 많은 사용자가 답변을 읽을 수 있기 때문에. 미리 감사드립니다
Tarik

9

서블릿 수명주기

서블릿의 라이프 사이클은 서블릿이 배포 된 컨테이너에 의해 제어됩니다. 요청이 서블릿에 매핑되면 컨테이너는 다음 단계를 수행합니다.

  1. 서블릿의 인스턴스가 존재하지 않으면 웹 컨테이너는 :

    ㅏ. 서블릿 클래스를로드

    비. 서블릿 클래스의 인스턴스를 만듭니다.

    씨. init 메소드를 호출하여 서블릿 인스턴스를 초기화합니다 (초기화는 서블릿 작성 및 초기화 에서 다룹니다 ).

  2. 컨테이너는 서비스 메소드를 호출하여 요청 및 응답 오브젝트를 전달합니다. 서비스 방법은 서비스 방법 작성 에서 설명 합니다.

값이 0이면 load-on-startup요청이 해당 서블릿에 도달 할 때 포인트 1이 실행됨을 의미합니다. 다른 값은 컨테이너 시작시 지점 1이 실행됨을 의미합니다.


완벽한 답변!
gaurav

1

다른 답변 과이 시작시로드 기사 0에 허용 된대로 다른 서블릿이 없으면 배포 중로드 및로드에 우선합니다. load-on statup을 가장 잘 사용하는 것은 첫 번째 요청이 연결 풀을 생성하거나 네트워크 호출을하거나 대량의 리소스를 보유하는 서블릿과 같이되기 전에 초기화하는 데 더 오랜 시간이 걸리는 서블릿을로드하는 것입니다. 이렇게하면 처음 몇 개의 요청에 대한 응답 시간이 크게 줄어 듭니다.


1
  1. 두 서블릿에 대해 값이 동일하면 web.xml 파일 내에 선언 된 순서대로로드됩니다.
  2. 컨테이너가로드 할 때 서블릿보다 0 또는 음수 인 경우로드됩니다.
  3. 웹 컨테이너에 의한 서블릿의 init () 메소드의 로딩, 초기화 및 호출을 보장합니다.
  4. 서블릿에 대한 요소가 없으면 웹 컨테이너가 서블릿을로드하기로 결정할 때로 드됩니다.

0

예. 동일한 값을 가질 수 있습니다 .... 시작시로드에 숫자를주는 이유는 서버가 모든 서블릿을로드하는 시퀀스를 정의하기 때문입니다. 시작시로드 값이 0 인 서블릿이 먼저로드되고 그 후에 값이 1 인 서블릿이로드됩니다.

두 개의 서블릿이 시작시로드에 대해 동일한 값을 가지면 web.xml에서 위에서 아래로 선언되는 방식으로로드됩니다. web.xml에서 처음 나오는 서블릿이 먼저로드되고 그 후에 다른 서블릿이로드됩니다.


0

-> (시작시로드가 없음) 태그 우선 서블릿이 서버에 배치 될 때 서블릿 오브젝트를 작성하는 것은 서버의 책임입니다. 예 : 서블릿이 서버에 배포되었다고 가정하고 (서블릿 객체는 서버에서 사용할 수 없음) 클라이언트가 처음으로 서블릿에 요청을 보낸 다음 서버는 기본 생성자의 도움으로 서블릿 객체를 만들고 즉시 init ()를 호출합니다. 클라이언트가 요청을 보낼 때마다 객체가 이미 사용 가능하므로 서비스 메소드 만 실행됩니다.

시작시로드 태그가 배치 디스크립터에서 사용되는 경우 : 배치 자체에서 서버는 태그 사이에 제공된 양수 값을 기반으로 서블릿에 대한 서블릿 오브젝트를 작성합니다. 서블릿 클래스의 오브젝트 작성은 0-128부터 시작합니다. 0 서블릿이 먼저 작성된 후 다른 숫자가 이어집니다.

web.xml에서 두 서블릿에 동일한 값을 제공하면 web.xml의 클래스 위치에 따라 객체 생성이 수행됩니다. 서버마다 다릅니다.

로드시 시작 태그 사이에 음수 값을 제공하면 서버는 서블릿 객체를 생성하지 않습니다.

서버가 서블릿에 대한 오브젝트를 작성하는 다른 시나리오

web.xml에서 시작시로드 태그를 사용하지 않으면 클라이언트가 처음으로 서버가 객체를 생성하고 서버가 수명주기 메소드를 호출 할 때 요청을 보낼 때 프로젝트가 배치됩니다. 그런 다음 서버에서 .class가 수정 된 경우 (tomcat). 다시 클라이언트는 수정 된 서블릿에 대한 요청을 보내지 만 Tomcat의 경우 새 오브젝트가 작성되지 않고 서버를 다시 시작하지 않으면 서버가 기존 오브젝트를 사용합니다. 그러나 웹 로직 클래스에서 요청을 받으면 서버를 다시 시작하지 않고 서버에서 .class 파일을 수정할 때 서버는 기존 서블릿에서 destroy 메소드를 호출하고 새 서블릿 객체를 작성하고 초기화를 위해 init ()를 호출합니다. .


-1

값이 <0이면 요청이 올 때 serlet이 인스턴스화되고, 그렇지 않으면> = 0 컨테이너가 증가하는 값의 순서로로드됩니다. 둘 이상의 서블릿이 동일한 값을 갖는 경우 web.xml에 선언 된 서블릿의 순서입니다.


-2

서블릿 컨테이너는 시작 중 또는 첫 번째 요청이있을 때 서블릿을로드합니다. 서블릿의로드는 "web.xml"파일의 "load-on-startup"속성에 따라 다릅니다. 속성이 양의 정수 (0-128)를 갖는 경우 서블릿은 컨테이너의로드와 함께로드되고, 그렇지 않으면 첫 번째 요청이 서비스에 도달 할 때로드됩니다.

서블릿이 요청되면 일단로드되면 "지연 로딩"이라고합니다.


-6

당신이 기대조차하지 않는 것은 간단합니다.

값이 양수이면 컨테이너가 시작될 때로드됩니다.

값이 양수가 아닌 경우 요청이 작성 될 때 서브릿이로드됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.