2012-07-17 4 views
-4

doget() 서블릿 메소드 내에서 init() 메소드를 호출하면 어떻게되는지 알려주십시오. 예외가 발생합니까? 서블릿 라이프 사이클에 어떤 영향을 미칩니 까?서블릿의 doget() 메소드 내에서 init() 호출

알려 주시기 바랍니다.

+0

시도해 보셨습니까? – johusman

+3

절대로 이렇게하지 마십시오. 그것은 서버를 어두운면으로 건너 뛰고 브라우저를 실행하는 컴퓨터를 튀기고 나서 브라우저 자체를 파괴합니다. 운명적인 요청을 보내는 서버와 브라우저가 어디에 있는지에 따라 대서양 횡단 통신 케이블에서 문제가 발생할 수 있습니다. –

답변

1

대부분의 경우 init() 메서드의 코드가 실행됩니다.

init 메소드에는 특별한 것이 없습니다. 단, 컨테이너가 서블릿을 사용하기 전에 호출한다는 점만 다릅니다. 언제든지 전화 할 수 있습니다. init 메서드가 공유 데이터의 값을 변경하면 이상한 문제가 발생할 수 있습니다.

누군가가 doGet 방법에서 init으로 전화해야하는 이유를 상상할 수 없습니다.

1

우선 doGet()에서 init() 메서드를 호출하고 어떤 결과가 발생했는지 궁금하면이 질문을 피할 수 있습니다. 어쨌든

, 서블릿 사양 2.3은 말한다 : 서블릿이 영구적 구성 데이터를 읽을 수 (예 : JDBC ™ API 기반 연결로) 비용이 많이 드는 자원을 초기화하고 원 - 기타 수행 할 수 있도록

초기화가 제공됩니다 시간 활동.

그래서, 당신은 당신의 현재 init() 방법에서 얼마나 그 일회성 활동의 많은 궁금합니다. 이 메소드를 호출하는 것은 다른 메소드를 호출하는 것과 다르지 않습니다. 나는 당신의 init() 메소드가 유일하게하는 일이 ServetConfig의 초기화 매개 변수에서 소유 된 속성을 초기화하는 시나리오에서 생각하고 있습니다. 그럴 경우 잘못된 것은 없습니다.

그러나 init() 메서드가 서블릿의 내부 상태를 변경할 수있는 작업을 수행하면 이상한 동작이 발생할 수 있습니다.

init() 메서드의 작업을 doGet()에서 사용해야 할 수도있는 작업을 수행하는 경우 개인 내부 메서드로 이동하십시오.

0

init() 메소드를 구현하지 않은 경우 아무런 변화가 없습니다.. 이유는 상속 된 구현이 비어 있다는 것입니다.

public void init() throws ServletException { 
    // NOOP by default 
} 

당신이 당신의 자신의 구현이있는 경우, 구현에서 다음 코드는을 실행 : 서블릿 가능성이 GenericServlet에서 구현 다음 상속, HttpServlet을 확장합니다. 예외를 던지 느냐는 - 당신이 코딩 한 것에 의존한다.

ServletConfig를 인수로 사용하는 init을 호출하면 원래 ServletConfig가 대체되고 init()이 호출된다. init 또는 init(ServletConfig) 메쏘드에 전화하는 이유를 알 수 없습니다. 필요한 경우에 오버라이드 (override) 해, 서블릿 컨테이너에 의해 불려가는 메소드가 있습니다.

관련 문제