2016. 12. 22. 15:07ㆍframework/etc framework
Sitemesh 설정, 사용방법
그동안 미뤄놨던 Sitemesh 에 대한 정리
Sitemesh3 가 나왔다고 하지만 내가 사용했던 Sitemesh2 2.4.2 버전을 기준으로 설명한다.
설정 및 테스트는 jsp로 진행한다.
> Sitemesh란
웹페이지의 레이아웃을 효율적으로 처리할 수 있게 도와주는 프레임워크이다.
웹페이지의 동일한 상단, 하단, 메뉴 등의 부분들은 한곳에서 관리하고 각각의 페이지는 실제 내용만을 관리한다.
> Design Pattern
디자인 패턴에는 여러가지가 있다.
그 중에서 Sitemesh는 Decorator 패턴을 사용한다.
레이아웃 프레임워크중에서 가장 많이 사용되고있는 Tiles와 비교해보자.
Tiles (타일즈) 는 Composite View Pattern 을 사용한다.
부모 뷰와 자식 뷰들을 전체와 부분 관계로 나타낸다.
모든 뷰는 자신보다 작은 부분들의 집합이며 여러 뷰에서 생기는 중복 코드를 감소시키는 역할을 한다.
각각의 뷰들 사이의 일관성을 높여 유지보수와 제어를 수월하게 할 수 있도록 한다.
Sitemesh는 Decorator Pattern 을 사용한다.
웹서버로부터 웹브라우저로 제공되는 원본 컨텐츠를 파싱하고, 컨텐츠로부터 속성과 데이타를 추출하여 최종 결과물을 생산한다.
예를 들면 JSP페이지 수행결과가 웹브라우저에 가기 전에 중간에 가로채서 문서의 내용을 변경할 수 있게 한다.
> Sitemesh 장점
대형 웹사이트에서 많은 웹페이지가 일관된 사용자 룩앤필, 페이지이동, 페이지 레이아웃을 갖는데 용이하다.
설정방법과 사용방법도 Tiles 에 비하면 간단한 수준이다.
또한 Java2, Servlet, JSP, XML, CGI(Perl, Python etc), PHP, Cold Fusion 등 다른 아키텍쳐와 잘 통합된다.
> Sitemesh 설정
테스트환경 : JSP, Tomcat 7.0, JDK 1.7, eGov 2.7 |
설정방법은 매우 간단하다.
http://wiki.sitemesh.org/wiki/display/sitemesh/Download
위 주소로 이동하여 2.4.2 버전의 jar 파일을 다운받는다.
다운받은 파일을 lib 폴더에 위치시킨다.
web.xml
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> |
Sitemesh 를 사용하기 위한 설정이다.
위 내용을 web.xml에 작성한다.
다음으로 아래와 같이 decorators.xml, sitemesh.xml 파일을 생성한다.
sitemesh.xml 경로는 꼭 아래 경로에 위치해야 하며 decorators.xml 은 sitemesh.xml 파일 내에서 경로를 설정해줄 수 있기 때문에 아무대나 위치해도 된다.
편의상 같이 두는것을 추천한다 ^^
사용할 준비는 다 끝났습니다.
이제 decorators.xml 파일과 sitemesh.xml 파일을 살펴보면서 내부에 어떤 설정을 하고 있는지 알아보자.
sitemesh.xml
태그기본적인 sitemesh의 설정 및 사용할 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 |
<?xml version="1.0" encoding="UTF-8"?>
<sitemesh>
<page-parsers>
<parser default="true"
class="com.opensymphony.module.sitemesh.parser.DefaultPageParser" />
<parser content-type="text/html"
class="com.opensymphony.module.sitemesh.parser.FastPageParser" />
</page-parsers>
<excludes file="/WEB-INF/decorators.xml"/>
<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.PrintableDecoratorMapper">
<param name="decorator" value="printable2" />
<param name="parameter.name" value="printable2" />
<param name="parameter.value" value="true" />
</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.RobotDecoratorMapper">
<param name="decorator" value="robot" />
</mapper>
<mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper">
</mapper>
<mapper
class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
<param name="config" value="/WEB-INF/decorators.xml" />
</mapper>
</decorator-mappers>
</sitemesh> |
2# : sitemesh 태그
10# : decorators.xml 에 정의된 excludes 태그를 사용한다는 선언이다. decorators.xml 이 아닌 별도의 파일을 생성할 수 도 있다.
12# : decorator 를 연결해주는 맵퍼를 정의, 정의된 순서대로 우선순위가 결정되는것 같다.
14# : PageDecoratorMapper : meta 태그를 사용하여 decorator을 선택할 수 있다.
PageDecoratorMapper는 <meta>태그에 decorator 항목이 있을 때 장식자를 리턴한다. 예를 들어 현재 layout.jsp 라는 장식자가 default 로 결정되어 있지만 popup이라는 이름의 장식자를 특정 페이지에 적용하고 싶다면 <meta name="decorator" content="popup"></meta> 라고 작성
19# : PageDecoratorMapper : 프레임셋 사용시
page가 HTMLPage 또는 isFrameSet() 의 return value가 true일 때 특정 decorator을 선정할 수 있도록 한다.
decorator의 이름은 주어진 property에서 지정할 수 있다.
23# : AgentDecoratorMapper : 브라우저별로 다른 decorator을 설정할 경우
AgentDecoratorMapper는 브라우저에 따른 장식자를 선택할수 있도록 한다.
예를 들어 http클라이언트가 익스플로러 라면 /decorators/layout-ie.jsp 장식자 페이지를 적용하게 된다.
모질라 기반 브라우저라면 /decorators/layout-ns.jsp 가 장식자 페이지로 결정될 것이다. 만약 선정된 장식자 페이지를 찾는데 실패한다면 기본 장식자 페이지인 layout.jsp 가 적용될 것이다.
30# : PrintableDecoratorMapper : url queryString 의 특정 패턴에 따라 decorator을 설정할 경우
url쿼리 스트링의 printable=true라는 문자열에 반응한다.
/WEB-INF/decorators.xml에 정의된 장식자 중 printable장식자를 리턴할 것이다.
44# : ParameterDecoratorMapper : url queryString 에 dacoratorName를 설정할 경우
url쿼리 스트링의 decorator=decoratorName&confirm=true라는 문자열에 반응한다.
/WEB-INF/decorators.xml에 정의된 장식자 중 decoratorName장식자를 리턴할 것이다.
51# : RobotDecoratorMapper : 검색엔진의 로봇이라고 식별될 때 decorator 를 사용한다.
55# : FileDecoratorMapper : web-app context에서 decorator 이름을 사용할 파일이름으로 취급한다.
58# : ConfigDecoratorMapper : decorators.xml 에 정의된 decorator를 사용한다.
* 자세한 설명은 다음 주소 참고
decorators.xml
정의된 decorator 패턴을 지정하는 역할
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 |
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/WEB-INF/jsp/decorators">
<excludes>
<pattern>/includeSample/*</pattern>
</excludes>
<decorator name="sitemeshSample" page="layout.jsp">
<pattern>/sitemeshSample/view/*</pattern>
</decorator>
<decorator name="sitemeshSamplePopup" page="popup.jsp">
<pattern>/sitemeshSample/popup/*</pattern>
</decorator>
<decorator name="popup" page="popup.jsp"/>
<decorator name="printable" page="printable.jsp"/>
<decorator name="printable2" page="printable2.jsp"/>
<decorator name="help" page="help.jsp"/>
</decorators> |
3# : 정의된 decorator 파일들이 있는 기본 디렉토리를 설정
5# : controller를 호출하는 url 값이 정의된 패턴에 해당한다면 decorator를 사용하지 않음
9#, 13# : controller를 호출하는 url 값이 정의된 패턴에 해당한다면 지정된 page의 레이아웃 형태를 사용한다.
17# ~ 20# : 패턴이 없는 decorator이다.
sitemesh.xml 에서 정의한 mapper로 사용가능하다.
layout.jsp
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
31
32
33
34
35
36 |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>title:::::<decorator:title /></title>
<!-- header -->
<decorator:head></decorator:head>
<!-- //header -->
</head>
<body>
<!-- UI Object -->
<div id="wrap">
<p>wrap</p>
<!-- container -->
<div id="container">
<p>container</p>
<!-- snb -->
<div class="snb" >
<p>snb</p>
</div>
<decorator:body ></decorator:body>
<!-- //content -->
</div>
<!-- //container -->
<!-- footer -->
<div id="footer">
<p>footer</p>
</div>
<!-- //footer -->
</div>
<!-- //UI Object -->
</body>
</html> |
2# : dacorator 태그를 사용하기 위한 선언
8# : decorator:title : 컨텐츠 페이지에서 title을 가져온다.
10# : decorator:head : 컨텐츠 페이지에서 head 를 가져온다.
24# : decorator:body : 컨텐츠 페이지에서 body 부분을 가져온다.
위 내용만 보면 기본적인 sitemesh 설정 및 사용하는데 크게 무리가 없을 것이다.
'framework > etc framework' 카테고리의 다른 글
Log4j의 정의, 개념, 설정, 사용법 정리 (2) | 2018.02.21 |
---|---|
log4j 특정 클래스 제외 / 클래스별 설정 (0) | 2017.07.04 |
Log4j의 개념, 설치, 사용법, Query Multi Line (쿼리를 여러줄로 가독성 있게 표현) 설정 방법 등 - 전자정부 - eGovFrame spring 기반 | etc framework (2) | 2016.01.05 |
SiteMesh 설정 - 전자정부 - eGovFrame spring 기반 | etc framework (6) | 2016.01.05 |
iBatis에서 MyBatis로 변경하는 과정 및 MyBatis설정 - eGovFrame spring 기반 (0) | 2016.01.05 |