타일즈와 유사하게 header, footer, body 등의 형식을 지원하는 sitemesh 설정 방법

 

[    SiteMesh 설정하기    ]

 

1. pom.xml에 dependency 추가

1
2
3
4
5
6
<!-- sitemesh -->
<dependency>
 <groupId>opensymphony</groupId>
 <artifactId>sitemesh</artifactId>
 <version>2.4.2</version>
</dependency>

 

2. web.xml에 한글처리 filter 위에 filter 추가

이때, 모든 경로가 siteMesh의 영향을 일단 받을 수 있도록 /*로 설정한다.

1
2
3
4
5
6
7
8
<filter>
  <filter-name>sitemesh</filter-name>
  <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>sitemesh</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

 

3. /WEB-INF 폴더 밑에 sitemesh.xml 파일을 만들고 다음 코드를 붙여넣는다.

sitemesh 라이브러리를 추가했다면, WEB-INF 폴더 밑에 sitemesh.xml 파일을 자동으로 인식한다.

이 곳에서 sitemesh 설정파일의 위치를 등록해준다.

여기서는 /WEB-INF/decorators.xml 로 sitemesh의 설정파일을 사용하겠다는 것을 알 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?xml version="1.0" encoding="UTF-8"?>
<sitemesh>
 <property name="decorators-file" value="/WEB-INF/decorators.xml"/> // sitemesh 의 환경설정 파일을 이 걸로 사용하겠다는 지정
 <excludes file="${decorators-file}"/>
 
 <page-parsers>
  <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
 </page-parsers>
 
 <decorator-mappers>
 
  <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
   <param name="property.1" value="meta.decorator"/>
   <param name="property.2" value="decorator"/>
  </mapper>
 
  <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
  </mapper>
 
  <mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
   <param name="match.MSIE" value="ie"/>
   <param name="match.Mozilla" value="ns"/>
   <param name="match.Opera" value="opera"/>
   <param name="match.Lynx" value="lynx"/>
  </mapper>
 
  <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
   <param name="decorator" value="printable"/>
   <param name="parameter.name" value="printable"/>
   <param name="parameter.value" value="true"/>
  </mapper>
 
  <mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
   <param name="decorator" value="robot"/>
  </mapper>
 
  <mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
   <param name="decorator.parameter" value="decorator"/>
   <param name="parameter.name" value="confirm"/>
   <param name="parameter.value" value="true"/>
  </mapper>
 
  <mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper">
  </mapper>
 
  <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
   <param name="config" value="${decorators-file}"/>
  </mapper>
 
 </decorator-mappers>
 
</sitemesh>

 

4. 위에서 설정파일로 사용할 xml 파일을 WEB-INF 폴더 하위에 decorators.xml로 만들고 다음 코드를 붙여넣는다.

/WEB-INF/decorators.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8"?>
 
<!-- 데코레이터 기본 폴더 -->
 
<decorators defaultdir="/WEB-INF/views/layout"> // 데코레이터 기본 폴더로 sitemesh의 layout 관련 파일은 /WEB-INF/view/layout 폴더로 추가 할 것이다.
 
 
 
 <!-- 예외 URL 패턴 -->
//여기 패턴은 sitemesh를 사용하지 않을 URL 패턴을 입력하면 된다.
//아직 만들어진 것이 없어 추가할 내용은 없지만, 추후 login 문자열이 들어간 URL은 sitemesh를 사용하지 않겠다는 것이다.
 
 <excludes>
     <pattern>*login*</pattern>
 </excludes>
 
  
// 이 부분이 데코레이터를 정의하는 부분이다.
//여기서는 아래와 같이 header와 footer가 고정으로 들어가고 본문내용만 바뀌는 데코레이터를 만들 생각이다.
// header
// body
// footer
 <decorator name="header-footer-layout" page="header-footer-layout.jsp">
  <pattern>*</pattern>
 </decorator>
 
 
</decorators>

 

5. 데코레이터 기본 폴더에 decorator로 등록한 파일을 생성하자

/WEB-INF/views/layout/header-footer-layout.jsp 를 만들고 다음 코드를 붙여넣자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
 
<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<head>
 <title>테스트 페이지</title>
  
 <!-- 공통 CSS -->
 
  
 
 <!-- 공통 JS -->
  
 <decorator:head />
</head>
 
  
 <div>공통 헤더</div>
 <hr />
  
 <div>
  <decorator:body />
 </div>
  
 <hr />
 <div>공통 푸터</div>

 

6. 그 외의 설정

여기서는 4번에서 header-footer-layout.jsp 하나만을 등록하고 *(모든 요청)시 작동하도록 하였는데,

그 외에 다른 적용이 필요한 경우 이 부분에 다른 layout 설정 파일을 등록해서 사용할 수 있다.

 

그 외에도, layout 파일 내에도 별도의 header.jsp 등을 만든 것을

<c:import 태그를 이용해서 등록해서 사용할 수 있다.

1
 
 

+ Recent posts