https://www.youtube.com/watch?v=F8-elAVTSzE
뉴렉쌤 항상 감사합니다 !
문제점.. 어느 한 부분을 수정하면 모두 수정해야 한다.
이렇게 집중 할 수 있도록 해야 한다.
jsp 에 저런 기능이 있지만.. 이 역시 중복을 야기한다.
이때 바로 Tiles를 사용하는 것이다.
notice/list
요청은 일반적인 jsp 요청으로
notice.list
요청은 tiles가 조립하는 요청으로 가게끔 한다.
참고로 Tiles는 은퇴했다ㅠㅠ
Tiles 초기 설정
<tiles-definitions>
<definition name="notice.list" template="/WEB-INF/view/customer/inc/layout.jsp">
<put-attribute name="title" value="Tiles tutorial homepage" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="visual" value="/WEB-INF/view/customer/inc/visual.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/customer/inc/aside.jsp" />
<put-attribute name="body" value="/WEB-INF/view/customer/notice/list.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
<definition name="notice.detail" template="/WEB-INF/view/customer/inc/layout.jsp">
<put-attribute name="title" value="Tiles tutorial homepage" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="visual" value="/WEB-INF/view/customer/inc/visual.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/customer/inc/aside.jsp" />
<put-attribute name="body" value="/WEB-INF/view/customer/notice/detail.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
</tiles-definitions>
내 경우는 위와 같은 설정이 나왔다
page마다 저렇게 할 수는 없으니.. 리펙터링 예정이다
Tiles 다운
pom파일 > Dependencies탭 > add > org.apache tiles-jsp
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
layout.jsp에 위 문장을 추가하자
<tiles:insertAttribute name="header" />
각 layout의 위치에 위와 같이 설정하면 된다
<tiles:getAsString name="title" />
공통으로 놓을 문자열은 위와 같이 설정한다.
<bean
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles3.TilesView" />
<property name="order" value="1" />
</bean>
<bean
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions" value="/WEB-INF/tiles.xml" />
</bean>
<bean name="" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
<property name="order" value="2"></property>
</bean>
disaptcher-servlet.xml
에 위 설정을 추가한다.
jstl lib가 없을 경우 500에러가 나는데
maven에서 추가해주자 (javax.servlet.jstl
)
다 되면 위와 같이 뜬다.
<definition name="notice.*" template="/WEB-INF/view/customer/inc/layout.jsp">
<put-attribute name="title" value="공지사항" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="visual" value="/WEB-INF/view/customer/inc/visual.jsp" />
<put-attribute name="aside" value="/WEB-INF/view/customer/inc/aside.jsp" />
<put-attribute name="body" value="/WEB-INF/view/customer/notice/{1}.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
위와 같이 설정을 바꾸면 list나 detail 등의 요청에 대해 대응이 가능하다.
notice.*.*.*
이렇게 level이 3단계까지 내려가는 요청이 오면
~/notice/{1}/{2}/{3}
이렇게 설정해주면 된다
root의 index 페이지를 설정해보자
<definition name="*" template="/WEB-INF/view/inc/layout.jsp">
<put-attribute name="title" value="공지사항목록" />
<put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
<put-attribute name="body" value="/WEB-INF/view/{1}.jsp" />
<put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
</definition>
위와 같이 설정할때
*
요청이 notice.*
의 요청까지 가로챌 수 있다
그렇다고 순서를 뒤바꾸면.. 무한 루프에 빠질 가능성이 있다.
*
-> root.*
로 바꾸고
IndexController도 return "root.*";
로 바꾸자