이전글



웹사이트의 페이지 분할 구성
웹사이트에서(예를 들면 게시판) 한 페이지의 구성을 살펴보면 다음과 같이 사이드 메뉴, 상단 메뉴, 컨텐츠 와 같은식으로 이루어집니다. 다음은 이고잉님의 생활코딩 사이트입니다. 앞서 말했던 것처럼 좌측 사이드 메뉴, 상단메뉴, 중앙 컨텐츠 부분으로 나누어진 것을 볼 수 있습니다.



여기서 중요한 점은 사이드메뉴의 각 항목을 클릭하면 중앙 컨텐츠만 변경된다는 점과 상단 메뉴의 각 항목을 클릭하면 상단메뉴를 제외한 사이드 메뉴 및 중앙 컨텐츠만 변경된다는 점 입니다.

즉 사이드메뉴에서의 각 항목들. 여기서는 CSS 소개, 실습환경, HTML과 CSS가 만나는 법 등을 각각 클릭했을때는 중앙 컨텐츠만 변경되면 되고 나머지 부분은 공통적인 부분이라는 것입니다. 만약 각각의 항목들을 클릭했을때의 화면을 처리하는 JSP 페이지를 각각 작성하게 되면 공통 부분에 대한 내용은 중복이 발생하게 됩니다.

/a.jsp 에서 왼쪽 사이드메뉴의 버튼을 클릭하면 각각 작성한 /b.jsp, /c.jsp, /d.jsp를 불러오는 형태입니다.




JSP 코드 중복시 문제점
위와 같이 가운데 컨텐츠 부분만 다른 페이지인데도 전체 페이지를 중복 작성하게 되는 경우 가장 큰 문제점은 코드 수정시 많은 시간이 소모된다는 점 입니다. 코드가 중복되는 페이지가 많아질수록 중복되는 부분의 범위가 넓을수록 간단한 수정에도 모든 페이지를 각각 수정해 주어야 합니다. 또한 개발자도 사람이기에 그 중 하나라도 실수로 코드를 잘못 수정하게 되는경우에 버그를 야기할 수 있습니다.



JSP 모듈화 및 <jsp:include> 액션 태그
JSP에서는 이렇게 JSP작성시 코드가 중복되는 것을 방지하고 JSP 코드를 분리시킬 수 있도록 <jsp:include> 액션태그를 제공하고 있습니다. 예를 들어 <jsp:include> 액션태그를 사용하면 중앙 컨텐츠 JSP와 나머지 메인 페이지 JSP를 분리하고 메인페이지 JSP에 중앙 컨텐츠 JSP를 필요할때마다 불러와 포함시켜 처리하여 사용자에게 보여줄 수 있습니다.


각각 달라지는 부분인 /contentA.jsp /contentB.jsp /contentC.jsp 만 작성해 두고 공통 부분인 /main.jsp 페이지는 한번만 작성해 두는것입니다. 만약 상단 메뉴 디자인을 변경하고 싶으면 /main.jsp 페이지에서 한 번만 수정하면 됩니다.




<jsp:include> 액션 태그 동작 방식
<jsp:include> 액션 태그를 사용한 페이지와 <jsp:include>태그를 통해 호출된 페이지는 request 기본객체, response 기본객체, out 기본객체를 공유하게 됩니다.

main.jsp에서 contentA.jsp 페이지를 include 하게 되는 경우의 처리는 다음과 같습니다.


1. 브라우저로부터 서버에 main.jsp 요청이 들어오면 main.jsp 페이지 처리가 시작되고 처리 내용을 출력 버퍼로 출력합니다.

2. <jsp:include> 가 실행 되면서 request, response, out 객체를 contentA.jsp 페이지에 전달함과 동시에 실행 흐름 제어가 넘어갑니다.

3. 넘겨받은 기본객체들을 이용하여 contentA.jsp 페이지를 처리하고 처리 내용을 전달받은 out 객체를 이용해 버퍼에 출력합니다. 기본객체들을 공유하므로 출력 버퍼 또한 공유됩니다.

4. contentA.jsp 페이지의 처리가 끝나면 다시 제어가 main.jsp 페이지로 넘어가고 main.jsp 페이지의 나머지 처리를 하고 버퍼에 저장됐던 모든 처리 내용을 브라우저로 출력합니다.


위의 그림은 버퍼의 관점에서 표현한 것입니다. 버퍼를 공유하기 때문에 main.jsp의 버퍼 크기 설정에 주의해야 합니다. 또한 <jsp:include> flush 속성을 통해 제어가 넘어가기 전에 버퍼를 flush 할것인지에 대한 여부를 설정할 수 있습니다. 버퍼에 대한 내용은 이전글을 참고합니다. 다음글에서는 <jsp:include> 액션태그의 실질적인 사용법을 알아보도록 하겠습니다.


다음글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,