일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- handlerMapping
- Program
- Agile
- classdiagram
- ERD
- system developer
- setAttribute
- Spring
- 프롬프트
- pattern
- tiles
- Framework
- getAttribute
- mybatis
- 내장객체
- getParameter
- controller
- DevOps
- jsp
- Cloud
- UML
- command
- 맥린이
- NOTE
- App
- backend
- FrontController
- usecasediagram
- HTTP
- MVC
- Today
- Total
시작은 언제라도
Tiles framework detail 본문
Spring + tiles 연동 방법
1. 프로젝트 maven 적용 후 pom.xml에서 tiles dependency 추가
2. tiles-config.xml 작성
<tiles-definitions>
<!-- HomeController 에서 viewName을 home.tiles 로 줄 예정 -->
<definition name="home.tiles" template="/WEB-INF/views/templates/layout.jsp">
<put-attribute name="title" value="kosta"/>
<put-attribute name="header" value="/WEB-INF/views/templates/header.jsp"/>
<put-attribute name="left" value="/WEB-INF/views/templates/left.jsp"/>
<put-attribute name="main" value="/WEB-INF/views/home.jsp"/>
<put-attribute name="right" value="/WEB-INF/views/templates/right.jsp"/>
<put-attribute name="footer" value="/WEB-INF/views/templates/footer.jsp"/>
</definition>
<!-- <definition name="main2.tiles" extends="home.tiles">
<put-attribute name="main" value="/WEB-INF/views/main2.jsp"/>
</definition> -->
<!--
definition name="*.tiles"
* 가 {1} 정보로 할당된다
만약 Controller에서 viewName을 main2.tiles로 주면
main2.jsp가 메인으로 제공된다
사례) HomeController 의 메서드
@RequestMapping("main2")
public String main2() {
return "main2.tiles";
}
-->
<definition name="*.tiles" extends="home.tiles">
<put-attribute name="title" value="{1}" />
<put-attribute name="main" value="/WEB-INF/views/{1}.jsp"/>
</definition>
<definition name="*/*.tiles" extends="home.tiles">
<put-attribute name="title" value="{2}" />
<put-attribute name="main" value="/WEB-INF/views/{1}/{2}.jsp"/>
</definition>
</tiles-definitions>
3. 기본 템플릿으로 사용할 jsp작성
ex) template.jsp
<html>
<head>
<title><tiles:insertAttribute name="title" ignore="true" /></title>
</head>
<body>
<div id="header">
<!-- Tiles header 영역 -->
<tiles:insertAttribute name="header" />
</div>
<div class="container-fluid text-center">
<div class="row content">
<div id="left" class="col-sm-3 sidenav" >
<!-- Tiles left 영역 -->
<tiles:insertAttribute name="left" />
</div>
<div id="main" class="col-sm-7 text-left">
<!-- Tiles main 영역 -->
<tiles:insertAttribute name="main" />
</div>
<div id="right" class="col-sm-2 sidenav">
<!-- Tiles right 영역 -->
<tiles:insertAttribute name="right" />
</div>
</div>
</div>
<div id="footer">
<!-- Tiles footer 영역 -->
<tiles:insertAttribute name="footer" />
</div>
</body>
</html>
tiles-config.xml의 <definition>태그에서 name속성에 작성한 header, footer에 해당하는 value값에 있는경로의
jsp파일이 layout.jsp의 <tiles:insertAttributes>태그의 name속성에 사용되는것이다.
즉, header, body, footer 라는 레이아웃으로 템플릿을 구성한 것이다.
이곳(template.jsp) 에 들어갈 내용을 따로 작성해서 (main.jsp) 적용시킨다.
3.tilesConfiguration.java 에서
bean 객체 설정 (SpringBoot)
@Bean // 소문자로 시작하는 메서드명이 bean id가 된다
UrlBasedViewResolver tilesViewResolver()
@Bean
TilesConfigurer tilesConfigurer()
4. 개별 controller에서 설정 완료
ex)
@Controller
public class MemberController {
@Resource
private MemberMapper memberMapper;
@RequestMapping("findbyid-form")
public String findbyIdForm() {
return "member/findbyid-form.tiles";
}
}
*.tiles로 return 하지 않을시 viewResolver에 의해 .jsp로 return 된다. -> layout 적용안된 페이지가 나타나게 됨
Tiles framework로 각 화면 jsp파일마다 jstl로 c:include없이 페이지 레이아웃을 담당하는 부분과 각 화면이 담당하는 소스를 확실하게 나누어 코드 양을 줄이고, loose coupling 시킴. 페이지의 레이아웃이 바뀌어도 jsp파일의 include를 수정할 필요가 없어졌다
'Web programming > Spring' 카테고리의 다른 글
Spring + Tiles Framework 연동 (0) | 2021.06.22 |
---|---|
MyBatis Framework (1) | 2021.06.19 |
spring framework 용어 정리 (0) | 2021.06.07 |
Spring Annotation (0) | 2021.06.01 |
Settings (0) | 2021.06.01 |