Inor

[JSP] Servlet의 LifeCycle 본문

Computer Engineering/JSP

[JSP] Servlet의 LifeCycle

Inor 2017. 8. 30. 15:41

생명주기




 대부분의 프로그램이 생명주기를 갖고 있듯이 서블릿도 생명주기를 갖고 있습니다. 서블릿 객체가 생성, 실행, 소멸 되는 과정에서 호출되는 특정 메서드들이 있습니다. 생명주기에 따라서 특정 메서드가 호출이 되고 그 안의 로직을 수행 합니다. Servlet에도 각 과정에서 호출이 되는 몇가지 메서드들이 있습니다. 그것들을 알아보도록 하겠습니다.




초기화(initialization)


 사용자의 Servlet 클래스가 상속 받는 HttpServlet 클래스의 init() 메서드를 오버라이드해서 초기화 메서드를 생성할 수 있습니다. 이 메서드는 서블렛 객체가 생성 되면서 호출이 되는 메서드로서 주로 초기화 작업을 수행 합니다. 초기화 전에 특정 작업(전처리)을 수행해야되는 경우가 있다면 @PostConstruct 어노테이션으로 선언된 메서드를 생성해주면 됩니다. 전처리 메서드는 init() 메서드 전에 호출이 되고 여러개의 메서드에 선언할 수 있지만 런타임 상황에서 에러를 발생 시킵니다.


        @Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
	}
	
	@PostConstruct
	public void postConstruct(){
		System.out.println("post");
	}	




Service


 서블릿 객체기 생성이 되고 이제 Request를 받을 준비가 된 상황 입니다. 이런 상황에서는 doGet(), doPost() 메서드들이 호출 됩니다. Request가 있을 경우에 상황에 맞게 post와 get 메서드를 호출 합니다. 이 메서드들의 파라미터에는 Request, Response 관련 객체가 있고 요청에대한 정보를 보고 싶으면 Request 관련 객체를 사용하고 응답에대한 작업을 하고 싶은 경우에는 Response 관련 객체를 사용해서 응답 하면 됩니다. post와 get의 차이점은 여기서 확인하지 않겠습니다. 간단하게 get 방식은 클라이언트에서 url을 통해서 값을 전달 받는 것 입니다. 그렇기 때문에 클라이언트에 값이 노출이 되고 보안에 취약하다는 특징이 있습니다. post 방식의 경우에는 헤더에 값들을 저장해서 요청하기 때문에 보안에 get 방식보다 덜 취약하다는 특징이 있습니다. Service는 서블릿 객체가 살아있는 동안에 doGet(), doPost()를 요청이 있을때마다 호출을하고 요청에대한 로직을 수행하고 클라이언트에게 응답 합니다.


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}




소멸(Destruction)


 서버가 중지할 경우에 HttpServlet 클래스의 destroy() 메서드를 오버라이드해서 서블릿 객체가 소멸할때 기존에 갖고 있던 자원들을 반납할 수 있습니다. 그리고 init()메서드와 마찬가지로 destroy() 메서드를 실행하고난 후에 호출되는 메서드를 생성할 수 있습니다. @PreDestroy 어노테이션을 선언한 메서드는 destroy() 메서드가 호출된 후에 호출이 되므로 destroy() 메서드 이후에 작업을 해야되는 로직이 있다면 후처리 메서드를 선언하면 됩니다.


	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		super.destroy();
		System.out.println("destroy");
	}
	
	@PreDestroy
	public void preDestroy(){
		System.out.println("pre");
	}


'Computer Engineering > JSP' 카테고리의 다른 글

[JSP] JSP 기본 태그와 동작 원리  (0) 2017.08.31
Comments