회사는 정말 싫어욧

스프링부트를 해본적이 없어서 이거 해결한다고 개고생했는데 해결되서 너무 다행이다 ㅠㅠㅠㅠㅠㅠ

어디에 파일을 만드느냐가 매우매우 중요하므로 주의 또 주의하자..

컨트롤러나 화면 표시될 jsp는 이미 만들어져있다고 가정하고


데코레이터만 만들어서 사이트메쉬 적용하는걸 설명해보겠습니당


1. pom.xml에 sitemesh 추가


<!-- Sitemesh3 -->


<dependency>

<groupId>org.sitemesh</groupId>

<artifactId>sitemesh</artifactId>

<version>3.0.1</version>

</dependency>


2. src/main/webapp/WEB-INF/**에 decorator파일 생성 (deco기본에 적용되었는지 확인을 위해 div하나만 추가함)

저는 src/main/webapp/WEB-INF/decorator/maindeco.jsp 파일을 만듬

decorator폴더를 만들어서 넣은 이유는 deco를 권한별로 만들 수도 있으므로(admindeco, userdeco.. 등)


<%@ page language="java" contentType="text/html; charset=EUC-KR"

pageEncoding="EUC-KR"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title><sitemesh:write property='title' /></title>

<sitemesh:write property='head' />

</head>

<body>

<div>HIHI 저는 데코입니당</div>


<sitemesh:write property='body' />

</body>

</html>


div는 데코 적용되었는지 구분하기 위해서 추가

sitemesh:write property는 title, head, body가 있는데 데코씌울 페이지의 title, head, body를 각각 해당 위치로 넣어주는거고

이부분은 sitemesh3 써본분들은 아실테니 자세한 설명은 생략합니당 모르시는분은 댓글로 써주시면 답변남겨드릴게요





3. src/main/java/**에 클래스 생성 (/**는 하위 디렉토리 있어도 상관없음)


import org.sitemesh.builder.SiteMeshFilterBuilder;

import org.sitemesh.config.ConfigurableSiteMeshFilter;


public class SitemeshFilter extends ConfigurableSiteMeshFilter {



@Override

protected void applyCustomConfiguration(SiteMeshFilterBuilder builder) {

builder.addDecoratorPath("/*", "/WEB-INF/decorator/maindeco.jsp");

}


}


이부분이 매우매우 중요****

앞에 /*는 모든 경로를 의미 /WEB-INF/decorator/maindeco.jsp는 2번에서 만든 decorator파일경로입니다

만약 본인이 WEB-INF밑에 바로 decorator파일을 만들었으면 /WEB-INF/maindeco.jsp 이렇게 써야함


1번째 매개변수 : 주소 (보통 controller의 requestMapping의 value값)

2번째 매개변수 : decorator 파일 경로



4. src/main/java/**에 클래스 생성


import org.springframework.boot.web.servlet.FilterRegistrationBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;


@Configuration

public class ServletFilterConfig {

@Bean

public FilterRegistrationBean siteMeshFilter() {

FilterRegistrationBean filter = new FilterRegistrationBean();

filter.setFilter(new SitemeshFilter()); //2번에서 만든 클래스 이름으로 사용


return filter;

}

}



실행해보면 페이지에 HIHI 저는 데코입니당이 추가로 보이게 됩니다