quote:
1-1 최근에 tiles로 많은 코딩을 한다는 이야기를 들었다. 하지만 나는 tiles를 모른다.
우연찮게 알게된 SiteMesh에 대한 이야기를 조금 하려고 한다.
누구나 웹프로그래밍을 해본 사람이라면 자기가 만든 page를 재사용하려고 하는 일이 많았을 것이다.
나도 물론 그렇다. 최근에 나의 사이트에 printable page를 추가했는데
이걸 추가하면서 php 경우 새로운 코딩이 들어갔다.
완전히 한페이지를 새로 코딩한것이다. 이런걸 보고 쌩노가다라 한다. 분명 솔루션은 있을텐데 말이다. 이것이 struts에서는 tiles라는 plugin 이다.
혹시 한번 만든 xx.jsp 를 다시 한번 재사용 할 방법은 없었나 ??
나는 초창기 div 를 이용하거나 iframe으로 사용했다. 또 potal사이트이 경우 매번 코딩을
완전히 다른것을 한적도 있다.
이런걸 노가다라 일컷는다. ㅋㅋㅋ
quote:
1-2 Site Mesh
http://www.opensymphony.com/sitemesh/
지금부터 나오는 이야기는 여기 아마 다 있을것이다. 나는 이곳의 글을 많이 읽지 않았다.
요즈음 시간도 없거니와 내가 아는것만 적을 생각이다. 가볍게 적고 싶었다.
만일 더 많은 정보가 필요하다면 위의 사이트를 보면 된다. 모든 답이 다 있지 않을까 싶다.
그리고 언제나와 같이 그냥 따라하면서 그렇구나 하면서 익힐 생각이다.
체험보다 더 많은 경험은 없을듯... 때문에 이론적인 기술이 필요하다면 위의 사이트에 많다. ^^
quote:
1-3 Site Mesh에 쓰인 Design pattern
Decorator design pattern
http://compstat.chonbuk.ac.kr/rightway/designpatterns/decorate.html
Composite design pattern
http://compstat.chonbuk.ac.kr/rightway/designpatterns/composite.html
등이다. 가만히 보면 servlet의 Filtering기능이 주기능을 이루는듯 하다.
그 증거들은 조금후에 공개 된다.
quote:
1-4 간단한 예제를 보도록 하자.
http://www.opensymphony.com/sitemesh/download.html
에서 SiteMesh 2.2.1 - sitemesh-blank.war 를 받도록 하자.
struts 나 기타 다른 framework과 같이 이것도 간단한 템플릿및 sample을 제공한다.
좀더 복잡한 sample을 원하면 그 옆에 있는 sample을 받으면 된다.
톰켓을 쓰고 있다면 C:\tomcat\Tomcat5.0\webapps 에 넣어두면 된다.
그리고 tomcat의 start이로서 모든 준비는 끝났다.
http://localhost:8080/sitemesh-blank
아래의 그림을 보면 첫번째 그림은 jsp파일이다.
그리고 2번째 그림은 printable파일결과다. 그아래 소스도 있다.
보통 이전같았으면 printable파일을 하나 더 만들었을것이다.
하지만 SiteMesh를 사용하면 그렇게 하지 않아도 된다.
많은 설명보다는 간단한 그림이 좀더 도움이 되지 않을까 싶어
아래에 그림을 몇개 넣었다.![]()
그림 1] Hello World jsp 가 SiteMesh를 거쳐 렌더링 된 결과![]()
그림 2] Hello World html source 가 SiteMesh를 거쳐 렌더링 된 html 결과
quote:
1-5 SiteMesh blank Dir의 구조![]()
테스트 환경 :
Servlet container : tomcat 5.x
JDK : 1.4.x
quote:
1-6 어떻게 저런일이 가능하단 말인가?
일단 궁금증을 잠식시키기 위해 소스를 뒤져봤다.
처음 우리가 보는 화면은 index.jsp였다.
그러나 index.jsp 조차도 변경된것이다. 아래의 그림을 참조하기 바란다.
원래의 index.jsp라면 2번째 그림의 소스처럼 나올리가 없다.![]()
그 해답은 sitemesh-blank\decorators 아래의 main.jsp에 있다. main.jsp의 소스는 아래와 같다.
[main.jsp는 실제 웹브라우져를 통해 접근을 할수 없다. main.jsp는 decorator로서 index.jsp를 꾸미는 기능을 한다.]
code:
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
<html>
<head>
<title>My Site - <decorator:title default="Welcome!" /></title>
<decorator:head />
</head>
<body>
<decorator:body />
<p><small>(<a href="?printable=true">printable version</a>)</small></p>
</body>
</html>
quote:
이것을 템플릿으로 index.jsp의 head, title, body등의 테그를 위의 템플릿에 대입한 결과라고 생각하면 된다.
html tag와 sitemesh decorator taglibcode:물론 이전에 언급한 printable도 마찬가지 이다. 이것만 봐도 재사용성이 뛰어날것처럼 보인다.
html tag : sitemesh decorator taglib
--------------------------------------------------------
<head> : <decorator:head />
<title> : <decorator:title default="Welcome!" />
<body> : <decorator:body />
이것은 printable.jsp를 템플릿으로 이용하여 화면을 보여주게 되는것이다.
code:쌩뚱맞게도 filter 를 설정하는것이 보이는데 이것이 sitemesh의 핵심이다 .
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<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>
</web-app>
code:위의 code를 보면 index.jsp는 main.jsp를 통해 보여지게끔 되어있고 printable page는
<?xml version="1.0" encoding="ISO-8859-1"?>
<decorators defaultdir="/decorators">
<decorator name="main" page="main.jsp">
<pattern>/*</pattern>
</decorator>
<decorator name="panel" page="panel.jsp"/>
<decorator name="printable" page="printable.jsp"/>
</decorators>
quote:
[참고자료]
http://raibledesigns.com/page/rd?anchor=my_tiles_to_sitemesh_migration
-- tiles를 sitemesh로 마이그레이션하기
http://today.java.net/pub/a/today/2004/03/11/sitemesh.html
--좀더 이론적인 학습을 원한다면 이곳을 보도록 하자.
http://www.onjava.com/pub/a/onjava/2004/09/22/sitemesh.html
--advanced sitemesh
물론 http://www.opensymphony.com/sitemesh/
는 말할것도없다. 모든것은 이곳에서 나왔다.
code:
<url-pattern>/*</url-pattern> -------->> 이전의 servlet 스펙 : 톰켓 4.x
<url-pattern>*.jsp</url-pattern> -------->> servlet 스팩 : 톰켓 5.x
올라온 글들 잘 읽고 있습니다.
이번에 Sitemesh를 접하면서 자료가 많이 없어서
애를 먹고 있었는데 위 예제가 많은 도움이 됬습니다.
그런데 printabl페이지 를 적용을 해도 Printable.jsp에서 데코레이트 되지
않고 계속 main.jsp를 사용합니다.
main.jsp에
code:
<a href ="?printable=true">Printable Version</a>
라고 집어넣어도 계속 그런데 어떻게 처리해야 하나요?
좋은 답변 부탁 드립니다.
quote:
Originally posted by silver_lion:
올라온 글들 잘 읽고 있습니다.
이번에 Sitemesh를 접하면서 자료가 많이 없어서
애를 먹고 있었는데 위 예제가 많은 도움이 됬습니다.
그런데 printabl페이지 를 적용을 해도 Printable.jsp에서 데코레이트 되지
않고 계속 main.jsp를 사용합니다.
main.jsp에
code:
<a href ="?printable=true">Printable Version</a>
라고 집어넣어도 계속 그런데 어떻게 처리해야 하나요?
좋은 답변 부탁 드립니다.
sitemesh.xml 에 다음과 같은 매퍼가 추가되었나요?
<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>
_________________
Lamp_java
SSISO Community