연이어 연재하던 시리즈가 연휴를 지나면서 복구가 어렵게 되었습니다. ^^;
처음부터 다시 훑어봐야 기억이 날 것도 같아서...
그런데 무엇보다 생산성이 떨어지는 접근법인 것도 같아서
이번에는 효과적인 방법으로 웹 어플리케이션을 만드는 것은 계속하려고 합니다.
Equinox는 앞서와 같이 어플리케이션 개발을 위한 작은 틀을 제공해줍니다.
앞서의 시리즈는 그것을 치밀하게 이해하려고 했는데
그보단 원하는 결과물을 만들어내면서 이해를 수반하는 식으로 가려구요.
일단, 첫화면은 앞에서도 본 것으로 기억합니다.
어찌 되었건 눈에 보이는 것은 index.jsp 에 기록된 HTML 들인데
첫 화면을 바꾸려면 이것을 바꿔야겠죠.
근데 Ctrl+F 로 찾아봐도 좌측이나 아래쪽의 링크들은 index.jsp에서 볼 수가 없습니다.
아무래도 템플릿으로 화면이 꾸며진 듯 하네요.
이미 SiteMesh를 썼다는 사실은 앞서두 언급했고
뒤져보니까 decorators 디렉토리에 default.jsp 파일이 있는데 이 녀석이 범인 같군요.
default.jsp 파일을 body 부분만 div로 분리된 영역을 정리해보면 다음과 같습니다.
container
- intro
- pageHeader
- quickSummary
- content
- supportingText
- underground
- footer
- linkList
- linkList2
- lresources
논리적으로 크게 삼등분 하고 있고, 이 녀석이 index.jsp 보다 먼저 로딩되는 것만은
확실한 것 같습니다. 다시 이녀석을 분석하고 싶은 마음이 또 생기지만 이를 억누르고
제가 만든(혹은 여러분이 만든) index.jsp가 보여지도록 할 수 있도록 궁리를 해보죠.
직관적으로 두 가지 정도를 먼저 알면 될 것 같습니다.
default.jsp가 어떤 설정을 통해서 불리게 되느냐?
그걸 알아야 다른 템플릿을 만들 수 있으니까요.
그리고 다른 하나는
동적으로 다른 jsp를 삽입시키는 방법
이건 아마도 decorator라는 태그가 알고 있을 듯 합니다.
default.jsp 에서 decorator 태그가 등장하는 부분만 추려내면 다음과 같습니다.
<div id="content">
<%@ include file="/messages.jsp"%>
<decorator:body/>
</div>
</div>
<div id="supportingText">
<div id="underground"><decorator:getProperty property="page.underground"/></div>
먼저 주요 설정 저장소인 WEB-INF 디렉토리를 보면, decorators.xml 파일이 있습니다.
<decorators defaultdir="/decorators">
<decorator name="default" page="default.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
sitemesh를 잘 모르지만 자바 커뮤니티의 코딩 관습(coding convention)에 따라 해석하면
모든 요청에 대해서 /decorators 디렉토리에 있는
default.jsp를 적용하란 것이라고 생각됩니다. default 라는 이름도 지정했는데
이건 어디서 쓰이는지 모르겠네요. 서블릿처럼 이 녀석도 패턴을 밖으로 정의할 수 있나 봅니다.
이제 풀리지 않은 의문은 decorator:body 와 decorator:getProperty 입니다.
이 의문을 풀 수 있는 단서는 web.xml 의 다음 설정 같은데요.
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
SiteMesh API를 봐야겠군요. Ultra-API에 없네요. 갱신해야지.
갱신한 것은 북마크에서 를 클릭하시면 됩니다.
API 문서에서 com.opensymphony.module.sitemesh.filter.PageFilter 를 찾아보죠.
설명은 간단하게 아래와 같이 나와 있네요.
Main SiteMesh filter for applying Decorators to entire Pages
데코레이터(장식을 해주는 객체죠)를 전체 페이지에 적용하는 SiteMesh의 주요 필터라.
핵심이 되는 녀석이군요. 근데 이녀석만 봐서는 decorator:body 와 decorator:getProperty 를
알기는 어렵네요. 메소드나 필드로 이런 것들이 노출되어 있지는 않네요. |