웹 프로그래밍을 하다보면, 다른 자원이 컨텐츠를 포함해야 할 일이 생긴다. 나 또한 jsp 페이지로 작업을 하다보면, 포함해야 경우가 있는데 매번 검색하고 갖다썼다. 그러니깐 내 지식이 되지 못해서 이번에 정리할 겸 작성하게 되었다.


[ 웹 프로그래밍, Servlet & JSP ] 관한 링크



기본적인 것들을 제대로 알고가면, 누가 이건 뭐야? 라고 물었을때 가볍게 답할 수 있으며 누군가에게 설명할 때 바르게 설명할 수 있다.



- include 디렉티브


<%@ include file = "header.jsp" %>



include 하는 특정한 jsp 페이지를 단순하게 텍스트로 포함시키는 기능을 가진다. 주로 조각코드를 삽입할 때 사용한다고 한다. 위의 그림을 살펴보자.


Client 가 Server 로 특정 명령을 요청하고, 이후에 Including jsp 는 Included jsp 를 텍스트 형태로 포함하고 있다. 그리고 이 과정에서 포함될 페이지를 포함시킨 jsp 파일은 이후에 서블릿으로 변환되고(.java 파일) 그 다음에 컴파일러에 의해서 컴파일 된다. 


컴파일 된 결과는 우리가 잘 아는 바이너리 파일(.class) 로 되며 이 파일은 Client 에게 html문서로 랜더링되어 보여진다. 따라서 include 디렉티브는 정적인 방식으로 컨텐츠를 포함하고 있는 것이다. 공통적인 변수나 저작권과 관련된 '공통된' 문장들을 포함하기에 적합하다.


결과적으로 include 디렉티브는, 


두 개의 jsp 파일을 하나의 Servlet 파일로 생성된다.




- <jsp:include> 표준 액션


<jsp:include page = "header.jsp" />




include 디렉티브와는 달리 동적인 방식으로 컨텐츠를 포함한다. 결국 포함시킬 페이지의 처리 결과를 포함한다는 것이다. 위의 그림을 살펴보자. 포함된 Including jsp 가 먼저 서블릿으로 변환되고 컴파일 되며, 이후에 Included jsp 가 서블릿으로 변환되고 클래스 파일로 컴파일된다. 


위와 같은 경우는 jsp 페이지를 모듈화 할 때 사용한다. 공통으로 사용하는 중복적인 부분들을 JSP 파일로 모듈화하면 향후 유지보수 하기 편리하다. 해당 레이아웃들이 각각 독립적으로 존재하며, 개발자는 전체를 뜯어고치는 것이 아닌 일부만 뜯어고치면 되기 때문이다. 그리고 동적 include 는 해당 파일이 수정되면 다시 컴파일이 된다.


결과적으로 <jsp:include> 는,


두 개의 JSP 파일이 존재하면, 두 개의 Servlet 파일이 생성된다.




- <c:import> JSTL 태그


<c:import var="data" url="header.jsp" />


<jsp:include> 와 동일하게 동적인 방식으로 컨텐츠를 포함한다.





Posted by doubler
,