본문 바로가기
카테고리 없음

[스프링프레임워크] siteMesh 설정

by RoundRyun 2019. 10. 30.

sitemesh는 레이아웃을 효율적으로 처리할 수 있게 도와주는 프레임워크이다.

웹페이지의 동일한 상단, 하단, 메뉴등의 부분들은 한 곳에서 관리하고 각각의 페이지는 실제 내용만을 관리한다.

스프링 프레임워크기반 프로젝트에 siteMesh를 설절하는 방법은 아래와 같다.

1. pom.xml을 통한 sitemesh 라이브러리 다운

pom.xml에 sitemesh 디펜던시를 아래와 같이 추가해주고 저장한다. 프로젝트 빌드시 자연스레 라이브러리 파일이 다운된다.

 

2. web.xml에 siteMesh 필터 설정.

web.xml에 아래와 같이 사이트페쉬 필터를 설정해둔다.

<!-- sitemesh decorator filter -->
    <filter>
        <filter-name>sitemesh</filter-name>
        <filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>*.do</url-pattern>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

위의 코드는,com.opensymphony.sitemesh.webapp.SiteMeshFilter라는 클래스를 sitemesh라는 이름의 필터로 사용할것이며, ~.do로 끝나는 모든 url요청에 대하서는 위에 설정해둔 sitemesh라는 이름의 필터가 적용될 것이라는 의미라고 생각해두면 된다.

 

안에 설정해둔 것들의 의미는, dispatcher가 가질 수 있는 값은 REQUEST, INCLUDE, FORWARD, ERROR 가 있는데
REQUEST 의 경우 url 에 입력해서 들어올 경우,
INCLUDE 의 경우 include() 를 통해(예를 들면 <jsp:include ..>) 를 통해 들어올 경우,
FORWARD 의 경우 forward() 를 통해(예를 들면 <jsp:forward ..>) 를 통해 들어올 경우,
필터를 적용하라는 의미이다. 가 없을 경우 기본적으로 url 에 입력되어 들어오는 것에 대해서만 필터를 적용한다.

( 출처: https://m.blog.naver.com/myca11/80127282862)

 

 

3.sitemesh.xml파일 생성 및 설정하기.

sitemesh.xml파일은 반드시 WEB-INF/ 디렉토리 경로 아래에 설정해 두어야 한다. decorators.xml파일의 경로는 sitemesh.xml에서 마음대로 설정할 수 있다. 설정한 경로에다가 위치시키면 된다.sitemesh 라이브러리를 추가했다면, WEB-INF 폴더 밑에 sitemesh.xml 파일을 자동으로 인식한다

 

sitemesh.xml : 기본적인 sitemesh 설정 및 decorators.xml파일을 호출하는 역할을 한다.

<?xml version="1.0" encoding="UTF-8"?>
<sitemesh>
    <property name="decorators-file" value="/WEB-INF/decorators.xml"/> 이부분이 decorators.xml의 위치를 지정하는 구간
    <excludes file="${decorators-file}"/>

    <page-parsers>
        <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
    </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. decorators.xml파일 생성 및 설정하기.

사이트메쉬 환경설정파일이다. excludes 엘리먼트 안에는 sitemesh를 사용하지 않을 url패턴을 넣으면 된다.

decorators 엘리먼트는 스프링 컨트롤러를 타고 리턴된 페이지(view)가 생성되고 이 페이지의 head나 body를 설정한 페이지인 /WEB-INF/Views/decorators 아래의 지정한 page 경로 에있는 jsp파일에 붙여넣게 된다. 즉 decorators엘리먼트는 클라이언트가 호출한 페이지를 꾸며주게 된다.

 

아래의 코드에서 /admin/*.do 라는 말은 /admin/아래의 모든 ".do"로 끝나는 요청은 해당 데코레이터를 적용하겠다는 의미이다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE decorators>

<decorators defaultdir="/WEB-INF/views/decorators">

    <!-- Any urls that are excluded will never be decorated by Sitemesh -->
    <excludes>
      <pattern>/admin/login.do</pattern>
      <pattern>/admin/*Include.do</pattern>
    </excludes>

    <!-- admin -->
    <decorator name="admin_top" page="admin/top.jsp" />
    <decorator name="admin_sidebar" page="admin/sidebar.jsp" />
    <decorator name="admin_default" page="admin/default.jsp">
        <pattern>/admin/*.do</pattern>
    </decorator>

    <!-- front -->
    <decorator name="top" page="front/top.jsp" />
    <decorator name="sidebar" page="front/sidebar.jsp" />
    <decorator name="default" page="front/default.jsp">
        <pattern>/*.do</pattern>
    </decorator>

    <!-- preview -->
    <decorator name="preview_default" page="preview/default.jsp">
        <pattern>/preview/*.do</pattern>
    </decorator>

</decorators>

사이트메쉬를 사용하며 위와같이 프로젝트생성시 관리자모드와 일반프론트모드를 따로설정해두는 게시판 프로젝트를 위한 레이아웃설정이 가능하다.