보통 스프링 부트에서는 타임리프를 사용하는데, 스프링을 먼저 써보고 타일즈를 먼저 배워서 그런지 아직까진 타일즈가 편하다고 느껴서 스프링 부트에서의 타일즈 설정을 찾아보고 내가 겪은 점을 써본다.
- [build.gradle] tiles 관련 dependency 추가
- 우선 jsp를 파싱해주기 위해서 [tomcat-embed-jasper]를 추가해줘야한다. 이게 없으면, 경로를 아무리 잘 잡아도
해당 jsp를 찾을 수 없다는 mapping 에러가 뜨게 된다.
- 그리고, jsp를 쓰면 view에서 처리해줄 jstl을 사용하기때문에 이와 관련된 dependency를 추가해준다
- 마지막으로 tiles관련 dependency들을 추가해준다.
dependencies {
.........
implementation 'javax.servlet:jstl:1.2'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
//tiles 관련 라이브러리
implementation 'org.apache.tiles:tiles-jsp:3.0.5'
implementation 'org.apache.tiles:tiles-servlet:3.0.5'
implementation 'org.apache.tiles:tiles-core:3.0.5'
implementation 'org.apache.tiles:tiles-api:3.0.5'
implementation 'org.apache.tiles:tiles-el:3.0.5'
.........
}
- [TilesConfig.java] tiles 관련 설정.
- 스프링 부트는 기존 스프링에서 XML에서 처리했던 설정들을 자바에서 설정한다
- 설정을 해줄 때에는 클래스 선언 위에 @Configuration을 추가해주고, 메서드 선언 위에 @Bean을 추가해준다
이 설정을 안해주면, 인식을 못한다...
- configurer.setDefinitions에 적혀있는 문자열은 타일즈 설정파일에 대한 경로를 적어준다.
- 부트는 /WEB-INF/**로 들어온 경로를 src/main/webapp/WEB-INF/**로 매칭해주기 때문에 이 경로 아래에
해당 타일즈관련 파일을 만드는 것이 좋다.
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
import org.springframework.web.servlet.view.tiles3.TilesView;
import org.springframework.web.servlet.view.tiles3.TilesViewResolver;
@Configuration
public class TilesConfig {
@Bean(name = "tilesConfigure")
public TilesConfigurer tilesConfigurer() {
final TilesConfigurer configurer = new TilesConfigurer();
configurer.setDefinitions(new String[] {"/WEB-INF/tiles/default-layout.xml"});
configurer.setCheckRefresh(true);
return configurer;
}
@Bean(name = "viewResolver")
public TilesViewResolver tilesViewResolver() {
TilesViewResolver resolver = new TilesViewResolver();
resolver.setViewClass(TilesView.class);
resolver.setOrder(1);
return resolver;
}
}
- [default-layout.xml] 타일즈 레이아웃 설정
- 아래 사진은 타일즈 레이아웃 파일의 예시다.
- 타일즈 관련 레이아웃 설정을 할 때에는 레이아웃 경로와 실제 경로를 맞춰주는 것이 좋다.
- xml설정은 기존에 스프링에서 사용하던 방식과 같다.
- 타일즈 설정이 처음이라면 스프링 타일즈 설정 에서 확인!!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<definition name="layouts-tiles" template="/WEB-INF/jsp/cmmn/default-layout.jsp">
<put-attribute name="head" value="/WEB-INF/jsp/cmmn/default-header.jsp" />
<put-attribute name="nav" value="/WEB-INF/jsp/cmmn/default-nav.jsp" />
<put-attribute name="content" value="" />
<put-attribute name="footer" value="/WEB-INF/jsp/cmmn/default-footer.jsp" />
</definition>
<definition name="*/*.tiles" extends="layouts-tiles">
<put-attribute name="content" value="/WEB-INF/jsp/{1}/{2}.jsp" />
</definition>
</tiles-definitions>
- [BoardController.java] 컨트롤러에서 타일즈를 리턴
- 마지막으로 컨트롤러에서 타일즈를 리턴!!
- 아래 코드는 개인적으로 만든 컨트롤러 소스이므로, 아래 소스를 따라했을 시에는 안될 수도 있다.
- board 메서드의 return 부분에 있는 문자열에 "board/board.tiles"를 리턴하게되는데, 기존 타일즈 동작 방식과
똑같이 이해하면 된다.
package com.example.demo.controller;
import com.example.demo.domain.Board;
import com.example.demo.service.BoardService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Slf4j
@Controller
@RequestMapping("/board")
public class BoardController {
private final BoardService boardService;
public BoardController(BoardService boardService) {
this.boardService = boardService;
}
@RequestMapping({"", "/"})
public String board(@RequestParam(value = "index", defaultValue = "0") Long index,
Model model) {
Board board = boardService.findBoardByIndex(index).orElse(null);
model.addAttribute("board", board);
return "board/board.tiles";
}
}
'Spring Framework' 카테고리의 다른 글
OAuth2.0 Resource Server와 Spring Security (0) | 2020.05.05 |
---|