BackEnd/Spring&SpringBoot

[Spring] SiteMesh란?

Systema 2025. 4. 5. 22:25

 

1. SiteMesh란?

SiteMesh는 Java 기반 웹 애플리케이션에서 공통 레이아웃을 적용하기 위한 필터 기반 데코레이터

프레임워크.


2. 데코레이터 패턴이란?

기존 객체의 기능을 변경하지 않고, 동적으로 기능을 추가하거나 확장할 수 있게 하는 패턴


3. SiteMesh의 주요 개념

개념 설명
Decorator 페이지에 입힐 공통 레이아웃 (보통 layout.jsp)
Content 실제 사용자 컨텐츠 (board.jsp, main.jsp 등)
Filter 웹 요청 시 페이지를 가로채서 레이아웃을 적용
Tag <sitemesh:write property="title"/> 등으로 컨텐츠 위치 지정

4. SiteMesh의 동작 방식

- 동작방식

   요청: /board/list.jsp

  1. 사용자는 /board/list.jsp를 요청함
  2. SiteMesh Filter가 요청을 가로채서 내부적으로 렌더링 시작
  3. list.jsp의 내용(본문)을 먼저 생성함
    → 여기서 title, head, body 부분을 추출
  4. layout.jsp(데코레이터)에 그 내용들을 끼워 넣음:
    • <sitemesh:write property="title"/> → list.jsp의 <title>로 채움
    • <sitemesh:write property="body"/> → list.jsp의 본문 내용으로 채움
  5. 완성된 페이지를 사용자에게 전달

- Spring MVC의 ViewResolver와는 별개로 동작함

- 설정 파일 (decorators.xml) 또는 Java Config를 통해 URL 패턴 매핑 가능


5. SiteMesh의 장점

장점 설명
공통 레이아웃 관리 용이 header, footer 중복 제거
유지보수 편리 전체 UI 변경 시 layout.jsp만 수정하면 됨
디자인 일관성 모든 페이지가 동일한 틀을 가짐
적용 간단 복잡한 설정 없이도 빠르게 도입 가능
Spring MVC와 호환 가능 filter 기반이라 MVC 설정과 충돌 없음

6. SiteMesh 3.x vs 2.x 설정 방식 비교

항목 SiteMesh 2.x (XML 설정) SiteMesh 3.x (Java 설정)
설정 파일 decorators.xml Java 클래스 (SiteMeshFilter 설정)
레이아웃 매핑 방식 XML 기반 URL 패턴 코드 기반 URL 패턴
유연성/동적 처리 제한적 (고정된 설정) 매우 유연 (조건별 설정 가능)
커스터마이징 복잡하고 제한적 필터 체인 및 커스텀 파서 등 쉬움
초기화 방식 web.xml 필터 등록 FilterRegistrationBean 또는 Java Config
적용 대상 JSP 중심 HTML5, Thymeleaf 등도 OK

 

- 2.x는 전통적인 XML 설정 기반

- 3.x는 Java 기반 설정과 더 유연한 확장성 지원

 

SiteMesh 2.x 예제 (XML 설정 기반)

decorators.xml
<decorators defaultdir="/WEB-INF/decorators">
    <decorator name="default" page="layout.jsp">
        <pattern>/*</pattern>
    </decorator>
</decorators>

 

web.xml
<filter>
    <filter-name>sitemesh</filter-name>
    <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>sitemesh</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

SiteMesh 3.x 예제 (Java 설정 기반)

SiteMeshConfig.java
import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.config.ConfigurableSiteMeshFilter;
import org.sitemesh.builder.SiteMeshFilterBuilder;
import org.sitemesh.webapp.WebAppContext;

import javax.servlet.annotation.WebFilter;
import javax.servlet.FilterConfig;

@WebFilter("/*")
public class SiteMeshConfig extends ConfigurableSiteMeshFilter {
    @Override
    protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
        builder
            .setMimeTypes("text/html")  // 필터링할 MIME 타입
            .addDecoratorPath("/*", "/WEB-INF/decorators/layout.jsp") // 데코레이터 지정
            .addExcludedPath("/static/*"); // 제외할 경로
    }
}

7. 정리

SiteMesh는 웹 페이지에 일관된 레이아웃을 자동으로 적용해 유지보수를 쉽게 만드는 필터 기반 템플릿 프레임워크다.

** SiteMesh 적용 프로젝트 | https://github.com/LuckyStrike1989/my-spring-framewrok-project