본문 바로가기
프로그래밍

sitemesh 설정

by 탁구치는 개발자 2013. 9. 2.

SiteMesh는 오픈 소스이고 페이지 레이아웃 프레임워크이다.

이와 비슷한 프레임워크는 Tiles, Velocity 등이 있는데 SiteMesh는 처음 써봐서 샘플 코드를 만들어 봤다.

이미지 출처



전체 소스 코드 : https://github.com/namkyu/sitemesh_test


sitemesh를 위한 설정은 어렵지 않다.

1. pom.xml에 라이브러리 추가

2. web.xml에 com.opensymphony.sitemesh.webapp.SiteMeshFilter 필터 추가

3. WEB-INF/decorators.xml 파일 생성 후 설정 추가 (페이지 레이아웃 설정 및 URL 패턴 정의)

<?xml version="1.0" encoding="UTF-8"?>

<decorators defaultdir="/decorators">
<decorator name="basic-theme" page="basic-theme.jsp">
<pattern>/jsp/*</pattern>
</decorator>
</decorators>

4. 페이지 레이아웃 구성

<?xml version="1.0" encoding="UTF-8" ?>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="dec"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><dec:title /></title>
</head>
<body bgcolor="<dec:getProperty property="body.bgcolor" />">
<h1>Header</h1>
<p>
<b>Navigation</b>
</p>
<hr />
<dec:body />
<hr />
<h1>
Footer</b>
</h1>
</body>

</html>


설정을 마치고 sitemesh의 작동 원리만 알면 쉽게 웹 애플리케이션에 적용이 가능하다.


브라우저에서 http://localhost:8080/jsp/menu.jsp를 웹 애플리케이션 서버에 요청을 보내게 되면 SiteMeshFilter가 해당 요청을 받은 후 전처리 시에는 별다른 동작을 하지 않고, org.apache.jasper.servlet.JspServlet 에게 위임한다. (JspServlet은 톰켓의 web.xml에 정의되어 있음)

JspServlet은 menu.jsp 파일에 대한 동적 파일 처리 완료 후 결과물로 html을 생성하게 되고, SiteMeshFilter 에서 이를 받아 menu.jsp의 결과물인 html의 body부분을 추출 후 페이지 레이아웃의 <dec:body /> 부분에 삽입한다.


서블릿 필터는 기본적으로 다음과 같이 처리

request   -> filter -> filter -> servlet

response <- filter <- filter <- servlet


public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

    

    // 여기서 전처리

    chain.doFilter(req, res);

    // 여기서 후처리

}