본문 바로가기
웹프로그래밍 무작정따라하기/JAVA_Spring

[Spring]Site Mesh 설정

by RIMD 2023. 3. 2.

1. SiteMesh란?

Sitemesh는 Spring 프레임워크에서 Sitemesh를 사용하여 웹 애플리케이션의 디자인 및 레이아웃을 쉽게 구성할 수 있도록 지원합니다. Sitemesh는 Spring MVC와 통합되며, Sitemesh 데코레이터를 사용하여 웹 페이지의 헤더, 푸터, 사이드바 등의 공통된 디자인 요소를 정의하고, 이러한 요소를 웹 페이지에 적용할 수 있습니다

Sitemesh를 사용하면 애플리케이션의 디자인과 레이아웃을 쉽게 변경할 수 있으며, 코드의 중복을 최소화할 수 있습니다. 또한, Sitemesh가 제공하는 다양한 데코레이터를 활용하여 디자인 요소를 구성할 수 있으므로, 웹 페이지의 디자인을 보다 효율적으로 관리할 수 있습니다.

또한 중복되는 코드가 모든 페이지에 삽입된다면 코드의 가독성이나 유지보수 측면에서 비용을 감소 시킬 수 있습니다.

 

2. SiteMesh 라이브러리 추가 (build.gradle)

먼저, Spring Sitemesh 라이브러리를 프로젝트에 추가해야 합니다. 

Gradle일 경우, build.gradle파일에 다음 의존성을 추가합니다.(maven일경우는 pom.xml에서 설정)

dependencies {
  implementation 'org.sitemesh:sitemesh:3.0.1'  
  // 또는
  compile group: 'org.springframework.sitemesh', name: 'spring-sitemesh', version: '5.3.5.RELEASE'
}

 

3. SiteMesh 구성

SiteMesh를 구성하기 위해 Spring구성 파일(WebApplication.java)에 다음과 같이 빈을 추가합니다.

3-1. ServletfilterConfig 파일 설정

import 해당패키지경로.SiteMeshConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@EnableRedisHttpSession
public class WebApplication extends SpringBootServletInitializer {

   ..생략
    
	public static void main(String[] args) {
		SpringApplication.run(WebApplication.class, args);
	}
	
    // bin설정
    // setFilter()를 통해 view페이지들이 SitemeshFilter를 거칠 수 있도록 설정
	@Bean public FilterRegistrationBean<SiteMeshConfig> siteMeshFilter() {
	    FilterRegistrationBean<SiteMeshConfig> filter = new FilterRegistrationBean<SiteMeshConfig>(); 
	    filter.setFilter(new SiteMeshConfig()); 
	    return filter; 
	} 
 
}

 

3-2.SitemeshFilter 파일 설정

// 적용할 filter 설정
public class SitemeshFilter extends ConfigurableSiteMeshFilter {
	@Override
	protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {
    
                // 모든 경로(/*)에 대해 default.jsp라는 Decorator를 타라
		builder.addDecoratorPath("/*", "/WEB-INF/decorator/default.jsp")
               // /admin/*라는 url은 admin_default.jsp라는 Decorator를 타라
		       .addDecoratorPath("/admin/*", "/WEB-INF/decorator/admin_default.jsp")
               // /sitemap라는 url은 어떠한 Decorator도 타지 않게 제외
		       .addExcludedPath("/sitemap");
	}
}

SiteMesh는 view페이지가 Decorator를 한번 거치고 사용자에게 반환되록 합니다.

SitemeshFilter.java에서 사용자로부터 요청된 view페이지가 어떤 Decorator를 거칠 것인지 지정해줍니다.

- addDecoratorPath()    Decorator에 포함될 url과 Decorator종류를 지정

- addExcludedPath()     Decorator로부터 제외될 url을 설정

 

4. Decorator 구성

//admin_default.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="ko">
   
   // include로 공통처리(head)
   <%@ include file="/WEB-INF/includes/admin/head.jsp" %>
   <body class="nav-md">
	<div class="container body">
		<div class="main_container">
			<!-- header content -->
            // include로 공통처리(header)
			<%@ include file="/WEB-INF/includes/admin/header.jsp" %>
			<!-- /header content -->
			
			<!-- page content -->
            // 요청된 url에 따른 해당 페이지가 <sitemesh:wirte property='body'/>라는
            // 태그에서 동적으로 삽입
			<sitemesh:write property='body' />
			<!-- /page content -->

			<!-- footer content -->
            // include로 공통처리(footer)
			<%@ include file="/WEB-INF/includes/admin/footer.jsp" %>
			<!-- /footer content -->
		</div>
      </div>   
   </body>
</html>

 

참고사항

application.yml에서 view페이지의 prefix와 suffix를 설정할 수 있습니다.

  mvc:
    view:
      prefix: /WEB-INF/jsp/      
      suffix: .jsp

 

 

ref.

 

[Spring Boot]SiteMesh 설정하기

SiteMesh가 무엇인지, 사용하면 어떤 게 좋을지 확인해 본 후 실제 JSP 화면에 적용시키는 실습까지 진행한다. 화면까지 직접 디자인하는 것은 시간낭비일 것 같아서 무료 부트스트랩 테마를 가져

hye0-log.tistory.com

 

댓글