필자의 다음 프로젝트를 보면 중복되는 CSS, JSP 파일이 많다.

해당 부분을 tiles로 처리하여 코드를 간소화 시키고자한다.

파일의 구조는 다음과 같으니 참고하도록하자

우선 dispatcher-servlet.xml 파일을 다음과 같이 작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:beans="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">


    <mvc:annotation-driven></mvc:annotation-driven>
    <context:component-scan base-package="com.mycom" />

    <!-- 패키지 tiles의 모든 설정 XML 파일을 읽어 들인다. -->
    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>classpath:tiles/*.xml</value>
            </list>
        </property>
        <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory" />
    </bean>

    <!-- 타일즈 뷰리졸버를 사용하여 화면을 표시한다. -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
        <property name="order" value="1" />
    </bean>

    <!-- 타일즈 뷰리졸버에 포함되지않은 것은 다음과 같이 view 셋팅을 한다. -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
        <property name="order" value="2"/>
    </bean>

</beans>

그럼 브라우저에서 요청시 타일즈를 적용하여 JSP를 표시해보도록하자

JSP에 타일즈 기능을 적용하는 과정은 다음과 같다.

 

  1. tiles_member.xml을 작성한다.
  2. 레이아웃용 JSP를 작성한다.
  3. 레이아웃에 표시할 JSP를 작성한다.
  4. 컨트롤러에서 tiles.xml에 설정한 뷰이름을 반환한다.

 

 

1. tiles_member.xml을 작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:beans="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

    <context:component-scan base-package="com.mycom"/>

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="10485760" />
    </bean>
    
    
    <!-- 패키지 tiles의 모든 설정 XML 파일을 읽어 들인다. -->
    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>classpth:tiles/*.xml</value>
            </list>
        </property>
        <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory" />
    </bean>
    
    <!-- 타일즈 뷰리졸버를 사용하여 화면을 표시한다. -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
    </bean>
    
</beans>

2. 레이아웃용 JSP를 작성한다.

그외에 footer, css, side 등은 프로젝트에 맞게 작성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" isELIgnored="false"
%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>

</head>
<body>
<div id="container">
    <div id="sidebar-left">
        <tiles:insertAttribute name="side"/>
    </div>
    <div id="content">
        <tiles:insertAttribute name="body"/>
    </div>
    <div id="footer">
        <tiles:insertAttribute name="footer"/>
    </div>
</div>
</body>
</html>

3. 레이아웃에 맞게 JSP를 작성한다.

필자는 다음과 같이 작성하였다.

4. 컨트롤러에서 tiles.xml에 설정한 뷰이름을 반환한다.

package com.mycom;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(){
        System.out.println("타일즈 접속");
        return "main";
    }

}

 같이 홈 컨트롤러에서 main을 반화하면

tiles_member.xml에서 main을 받아서

다음과 같이 구성된 Layout을 참조한다.

참조 후 다음과 같이 정상 출력되는 것을 확인할 수 있다.

'[책] > 자바 웹을 다루는 기술' 카테고리의 다른 글

7. pageContext.request.contextPath에 관하여  (0) 2020.01.15
6. Thumnail을 사용해보자  (0) 2020.01.14
4. Filter API  (0) 2020.01.06
3. 세션 쿠키 사용하기  (0) 2020.01.06
2. 쿠키란?  (0) 2020.01.06

+ Recent posts