spring로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

spring로 검색한 결과
등록일:2008-06-11 10:28:30
작성자:
제목:SiteMesh Session 1[SiteMesh = Site + Mesh]


SiteMesh = Site + Mesh



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 taglib
code:

html tag  :   sitemesh decorator taglib
--------------------------------------------------------
<head>    :   <decorator:head />
<title>   :   <decorator:title default="Welcome!" /> 
<body>    :   <decorator:body />


물론 이전에 언급한 printable도 마찬가지 이다. 이것만 봐도 재사용성이 뛰어날것처럼 보인다.
이것은 printable.jsp를 템플릿으로 이용하여 화면을 보여주게 되는것이다.




그런데 이것을 가능하게 하는것은 아래와 같이 web.xml 을 보면 알수 있다.
code:
<?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>


쌩뚱맞게도 filter 를 설정하는것이 보이는데 이것이 sitemesh의 핵심이다 .
servlet의 filter기능 decorators jsp를 이용해 Decorator design pattern, Composite design pattern 을 구현하는것이다.
물론 한가지 더 설정을 볼수 있다.


sitemesh-blank\WEB-INF\decorators.xml 을 보면 아래와 같이 되어있음을 알수 있다.
code:
<?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>


위의 code를 보면 index.jsp는 main.jsp를 통해 보여지게끔 되어있고 printable page는
printable.jsp를 통해 보여지게 되어있는게 보인다.
그리고 printable 페이지의 링크는 printable=true parameter 를 통해
main.jsp를 통하지 않고 printable.jsp를 통해 데코레이션이 되는것이다.







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/
는 말할것도없다. 모든것은 이곳에서 나왔다.



주의 사항 : web.xml 에서 url pattern의 tag는 아래와 같이 적용되어야 한다.
code:
<url-pattern>/*</url-pattern> -------->> 이전의 servlet 스펙 : 톰켓 4.x
<url-pattern>*.jsp</url-pattern> -------->> servlet 스팩 : 톰켓 5.x


Printable Page 적용

올라온 글들 잘 읽고 있습니다.
이번에 Sitemesh를 접하면서 자료가 많이 없어서
애를 먹고 있었는데 위 예제가 많은 도움이 됬습니다.
그런데 printabl페이지 를 적용을 해도 Printable.jsp에서 데코레이트 되지
않고 계속 main.jsp를 사용합니다.
main.jsp에

code:
<a href ="?printable=true">Printable Version</a>


라고 집어넣어도 계속 그런데 어떻게 처리해야 하나요?
좋은 답변 부탁 드립니다.

Re: Printable Page 적용

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

출처 : Tong - kangdydtjs님의 spring ALL통