<복습>
application.yml
logging: #로그 지정
level:
'[kr.spring]': debug
이전에 명시했던 로그 단계를 낮춰서 저장하는 로그 양을 줄인다는 것이 이 문장임
상용 서비스 시 error 단계까지 조정하는 게 일반적이라고 하심
일단 이전에 생성했던 jsp 파일을 다 복붙했는데 스타일 시트 경로가 달라서 다 수정해야함
selectList, deleteForm, insertForm, selectDetail, updateForm 모두
<link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/style.css"> 에서
resources를 제외한 상태로 수정해야함
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css">
-> 다시 실행했을 때 창이 가운데 정렬로 떠야 정상
++
깨알 지식
open web browser > 바로 root로 이동 (localhost:8000으로 이동)
그래서 root를 redirect한다, 연결한다 라고 하는거임
<mybatis Boot형태 - 글 목록 처리>
++ 페이지 처리를 위해 이전 pageUtil 파일도 복붙해야함
src/main/java
kr.spring.util (package) 생성 후 pageUtil 복사해서 패키지에 붙여넣기
controller로 이동해서 데이터 뿌리기
BoardController
package kr.spring.board.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import kr.spring.board.service.BoardService;
import kr.spring.board.vo.BoardVO;
import kr.spring.util.PageUtil;
@Controller
public class BoardController {
//BoardService 주입받기
@Autowired
private BoardService boardService;
//로그 처리(로그 대상 지정)
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
//list.do로 리다이렉트
@RequestMapping("/")
public String main() {
return "redirect:/list.do";
}
@RequestMapping("/list.do")
public ModelAndView getList(@RequestParam(value="pageNum",defaultValue="1") int currentPage) {
//총 레코드 수
int count = boardService.selectBoardCount();
//페이지 처리
PageUtil page = new PageUtil(currentPage,count,10,10,"list.do");
//목록 호출
List<BoardVO> list = null;
if(count > 0) {
Map<String,Integer> map = new HashMap<String,Integer>();
//마이바티스는 본래 인자를 하나만 넘기지만 여러 개일 경우에는 map으로 묶어서 보냄
map.put("start", page.getStartRow());
map.put("end", page.getEndRow());
list = boardService.selectBoardList(map);
}
ModelAndView mav = new ModelAndView();
mav.setViewName("selectList");
mav.addObject("count", count);
mav.addObject("list", list);
mav.addObject("page", page.getPage());
return mav;
}
}
jsp 경로를 미리 수정했기 때문에 실행 시 초기화면 (목록)이 보임
<mybatis Boot형태 - 상세 페이지>
상세페이지 호출하기
BoardController
//페이지 상세보기
@RequestMapping("/detail.do")
public ModelAndView detail(@RequestParam int num) {
BoardVO board = boardService.selectBoard(num); //한 건의 레코드 읽어오기
return new ModelAndView("selectDetail","board",board); //호출페이지(뷰이름),속성명,속성값
}
<mybatis Boot형태 - 수정 폼 호출 + 수정 기능 실행>
수정폼 호출 + 수정 기능 실행
BoardController
//수정폼 호출
@GetMapping("/update.do")
public String formUpdate(@RequestParam int num, Model model) {
model.addAttribute("boardVO", boardService.selectBoard(num)); //자바빈 model에 저장(+request에도)
return "updateForm"; //반환타입(String) 문자열로 view호출
}
//수정작업
@PostMapping("/update.do")
public String submitUpdate(@Valid BoardVO boardVO, BindingResult result) {
//유효성 체크 결과 오류가 있으면 폼을 호출
if(result.hasErrors()) {
return "updateForm";
}
//DB에 저장된 비밀번호 구하기
BoardVO db_board = boardService.selectBoard(boardVO.getNum()); //한건의 데이터 읽어오기
//비밀번호 체크
if(!db_board.getPasswd().equals(boardVO.getPasswd())) {
result.rejectValue("passwd", "invalidPassword");
return "updateForm";
}
//글 수정
boardService.updateBoard(boardVO);
return "redirect:/list.do";
}
<mybatis Boot형태 - 글 쓰기>
자바빈 초기화 + 글쓰기 폼 호출 + 기능구현
BoardController
//BoardService 주입받기
@Autowired
private BoardService boardService;
//로그 처리(로그 대상 지정)
private static final Logger log = LoggerFactory.getLogger(BoardController.class);
//자바빈(VO) 초기화
@ModelAttribute
public BoardVO initCommand() {
return new BoardVO();
}
//list.do로 리다이렉트
@RequestMapping("/")
public String main() {
return "redirect:/list.do";
}
//글쓰기 폼호출
@GetMapping("/insert.do")
public String form() {
return "insertForm";
}
//글쓰기
@PostMapping("/insert.do")
public String submitForm(@Valid BoardVO boardVO, BindingResult result) {
log.debug("<<BoardVO>> : " + boardVO);
//유효성 체크 결과 오류가 있으면 폼 호출
if(result.hasErrors()) {
return form();
}
//글 등록
boardService.insertBoard(boardVO);
return "redirect:/list.do";
}
<mybatis Boot형태 - 글 삭제>
삭제 폼 호출 + 기능 구현
BoardController
//삭제폼 호출
@GetMapping("/delete.do")
public String formDelete(@RequestParam int num, Model model) {
BoardVO boardVO = new BoardVO();
boardVO.setNum(num);
model.addAttribute("boardVO", boardService.selectBoard(num));
return "deleteForm";
}
//삭제 작업
@PostMapping("/delete.do")
public String submitDelete(@Valid BoardVO boardVO, BindingResult result) {
log.debug("<<BoardVO>> : " + boardVO);
//유효성 체크 결과 오류가 있으면 폼을 호출
//비밀번호만 전송 여부 체크
if(result.hasFieldErrors("passwd")) {
return "deleteForm";
}
//DB에 저장된 비밀번호 구하기
BoardVO db_board = boardService.selectBoard(boardVO.getNum());
//비밀번호 일치 여부 체크
if(!db_board.getPasswd().equals(boardVO.getPasswd())) {
result.rejectValue("passwd", "invalidPassword");
return "deleteForm";
}
//글 삭제
boardService.deleteBoard(boardVO.getNum());
return "redirect:/list.do";
}
부트 형태의 CRUD 끝
<외부 UI 템플릿 Tiles 사용>
tiles를 이용하면 설정 가능하며 UI 작업하기에도 편하다고 함
부트에서 어떻게 사용하는지, 그리고 tiles를 이용해서 샘플 페이지를 만들어 볼 것
이걸 프로젝트에 활용하라 하셨음..ㅎㅎ
tiles = UI framework
템플릿을 여러 개 만들어서 화면에 레이어드 후 원하는 형태로 보여지게 하는 것
타일들을 붙이는 것과 같이 각 영역을 붙여서 하나의 웹페이지의 화면을 구성하는 라이브러리
웹페이지의 영역: header, content, left, nav, footer
*참고 블로그
스프링 프레임워크 - [Spring] 타일즈(Tiles) 설정하기 (tistory.com)
스프링 프레임워크 - [Spring] 타일즈(Tiles) 설정하기
타일즈(Tiles)란? 타일즈는 타일들을 붙이는 것과 같이 각각의 영역을 붙여서 하나의 웹페이지의 화면을 구성하는 라이브러리이다. 웹 페이지의 영역은 크게 header, content, left, nav, footer로 나누어
hyonee.tistory.com
<mybatis Tiles-새 프로젝트 생성>
1.
package explorer에서 우클릭 > new > spring boot > spring starter project
2.
name : ch14-Spring_tiles
artifact : Spring_Tiles
package : kr.spring
그외에는 변경 x
next >
3.
다음 창에
frequently used 모든 체크박스 선택 후
next
4.
finish
그럼 ch14-Spring_tiles 만들어짐
아까 3번에서 maven 설정 시 tiles를 넣고 싶었는데 버전을 몰라서 추가를 못했음
버전을 알아내서 디펜던스 설정을 하고 싶을 때
Maven Repository: Search/Browse/Explore (mvnrepository.com)
여기 접속해서 알아내면 됨
https://songcloud0620.tistory.com/78
대충 tiles 들으면서 적은 글... 뭔지 모르겠음 저게ㅠㅠ
tiles-jsp / tiles-servlet 사용할거기 때문에 기본 설정 시 pom.xml에서 디펜던시 값을 주면 됨
<mybatis Tiles-기본 설정>
1. pom.xml안에 라이브러리 추가~끝 이전 파일에서 복붙 (이전과 동일)
2. 버전 다운그레이드 (이전과 동일)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.17</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>2.3.1</version>
<scope>test</scope>
</dependency>
3. tiles dependency 값 주기 (tiles는 버전이 있기 때문에 버전 추가)
저장하면 이 라이브러리를 저장소에 저장해서 그 리포지토리에서 사용할 수 있게 해줌
프로젝트에 오류표시가 없다면 정상적으로 내려받은 것
전체 pom.xml 형태
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.17</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>kr.spring</groupId>
<artifactId>Spring_Tiles</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>ch14-Spring_tiles</name>
<description>Mybatis project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>2.3.1</version>
<scope>test</scope>
</dependency>
<!-- 라이브러리 추가 시작 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>3.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.7</version>
</dependency>
<!-- 라이브러리 추가 끝 -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<builder>paketobuildpacks/builder-jammy-base:latest</builder>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
저장 후 에러가 있다면 maven -> update project (새로고침)
<mybatis Tiles-기본 설정>
폴더 및 파일 생성
1.
데이터를 동일하게 쓸거라 유효성 검사 메시지 파일도 복붙
application.yml 복사 -> src/main/resources에 붙여넣기
2.
tiles 사용 시 설정파일이 필요함 (+경로 생성도 해줘야함)
----------------------------------------------------------------------------
main
webapp
WEB-INF (folder)
views (folder) 생성
WEB-INF
tiles-def (folder) 생성 << 이 안에 tiles 설정 파일을 넣을 것임
----------------------------------------------------------------------------
3.
tiles-def (folder) 안에 tilesdef.xml 파일 mbox에서 내려받아서 붙여넣기
<mybatis Tiles-자바코드기반설정>
부트는 servlet-context.xml, root-context.xml이 없음
그래서 application.yml 에 해야하는데 그건 정해진 설정값이 있어야 명시할 수 있기 때문에
그외 설정값을 모르는 것들은 자바코드기반 설정을 통해 설정하면 됨
부트에서는 자바코드기반설정을 많이 사용함
자바 코드 기반 설정 생성
src/main/java
kr.spring.config (package)
AppConfig (class)
package kr.spring.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
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 AppConfig implements WebMvcConfigurer {
@Bean
public TilesConfigurer tilesConfigurer() {
final TilesConfigurer configurer = new TilesConfigurer();
//tilesdef.xml의 경로와 파일명 지정
configurer.setDefinitions(new String[] {"/WEB-INF/tiles-def/tilesdef.xml"});
configurer.setCheckRefresh(true);
return configurer;
}
@Bean
public TilesViewResolver tilesViewResolver() {
final TilesViewResolver tilesViewResolver = new TilesViewResolver();
tilesViewResolver.setViewClass(TilesView.class);
return tilesViewResolver;
}
}
1.
implements WebMvcConfigurer, @Configuration
2.
@Bean 태그 사용, 수동으로 빈 생성 (자동-@Component)
위 클래스를 빈으로 등록하기 위해선 명시적으로 설정 클래스에서 @Bean 사용 -> 수동으로 스프링 컨테이너에 빈 등록
설정 클래스는 @Configuration 을 클래스에 붙여주면 됨
@Bean을 사용해서 수동으로 빈 등록 시 메소드 이름으로 빈 이름 결정 (빈 이름 중복 안되도록 주의)
[Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2)
기존의 Spring MVC에서는 xml을 활용하여 Bean을 등록하고 있었다. 하지만 프로젝트의 규모가 커짐에 따라 사용하는 요소들을 xml에 등록하는 것이 상당히 번거로워 져서 어노테이션(Annotation, @)를 활
mangkyu.tistory.com
===========================================================================================
3.
TilesConfigurer 메서드 : tilesdef.xml 의 경로 지정
configurer.setDefinitions(new String[] {"/WEB-INF/tiles/tilesdef.xml"}); -->
xml파일을 여러 개 만들 수 있기 때문에 배열 형태로 지정
4.
TilesViewResolver메서드 :
jsp가 아닌 인크루드 해서 조합된 페이지를 만드는거임 근데 그 페이지를 누가 만들어주냐면 tilesview가 따로있음
걔가 jsp를 종합해서 페이지를 만들어줌
그래서 view를 만들어줘야함 (TilesViewResolver)
4-2.
tilesview가 동작될때 지정해줘야지 조합된 페이지를 만들 수 있음
부트는 우선순위 지정 안해줘도 됨 컨테이너가 다 처리해줌 (이미 다 명시해놓음)
만약 지정시 문제가 생기면 우선순위를 지정해도 되는데 만약 문제가 안생기면 그냥 기본설정으로 동작시키면 된다는거임
내일 물어보고 내용 추가하기
<mybatis Tiles-레이아웃, 페이지 생성>
tiles를 사용하게 된다면 앞서 말했듯이 자동으로 include하고 레이어드해서 원하는 화면형태를 나오게 하는 방식이라
레이아웃을 만들고 그 안에 header, footer 등을 넣어줘야함
1) 레이아웃
views
template (folder)
layout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><tiles:getAsString name="title"/></title>
</head>
<body>
<table style="width:100%;">
<tr>
<td height="100" colspan="2"><tiles:insertAttribute name="header"/></td>
</tr>
<tr>
<td width="15%" height="400" valign="top">
<tiles:insertAttribute name="menu"/>
</td>
<td width="85%" align="center">
<tiles:insertAttribute name="body"/>
</td>
</tr>
<tr>
<td colspan="2">
<tiles:insertAttribute name="footer"/>
</td>
</tr>
</table>
</body>
</html>
문자열을 넣을 때에는 getAsString
jsp를 넣을 때에는 insertAttribute
2) 레이아웃 안에 명시될 내용
views
template (folder)
header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h2>Spring Tiles 실습</h2>
views
template (folder)
menu.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<ul>
<li><a href="main.do">main</a></li>
<li><a href="company.do">회사소개</a></li>
<li><a href="product.do">제품소개</a></li>
</ul>
views
template (folder)
footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<div align="center" style="background:yellow;">
© Star Mall
</div>
views
main_view.jsp (template X)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<b>main page body</b>
레이아웃을 제외한 header, footer, body 등의 jsp파일은 include되는거라 html 태그가 있으면 이중으로 보이게 됨
오류가 나는건 아닌데 코드도 복잡해지기 때문에 기본 html은 지우고 명시하는 게 좋음
<mybatis Tiles-페이지 출력>
src/main/java
kr.spring.tiles.controller
TilesController
package kr.spring.tiles.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class TilesController {
//root redirect
@RequestMapping("/")
public String init() {
return "redirect:/main.do";
}
//main호출
@RequestMapping("/main.do")
public String viewMain() {
return "main"; //타일스 설정명
}
}
main.do가 없는데 main.do라고 한 이유 >>
tiles를 사용하게 되면 layout.jsp를 호출하는데 원하는걸 다 인코딩 시키고 호출해야함
(인코딩은 tiles resolver가 다 매핑해줌)
그래서 return "main"; //타일스 설정명 라고 명시한 후 tilesdef.xml을 설정해야함
tilesdef.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="main" template="/WEB-INF/views/template/layout.jsp">
<put-attribute name="title" value="Spring Tiles 실습"/>
<put-attribute name="header" value="/WEB-INF/views/template/header.jsp"/>
<put-attribute name="menu" value="/WEB-INF/views/template/menu.jsp"/>
<put-attribute name="body" value="/WEB-INF/views/main_view.jsp"/>
<put-attribute name="footer" value="/WEB-INF/views/template/footer.jsp"/>
</definition>
</tiles-definitions>
layout.jsp 안에서 인코딩 되어야 하는 것들 명시
여기서 definition name="main" , template="layout.jsp" >> 라서 controller에서 return "main" 이라고 했을 때
layout이 보일 수 있는거임
title은 처음에 레이아웃에서 String으로 줬기 때문에 value값으로 문자열을 넣어준거임
<mybatis Tiles-회사 메뉴 클릭 시 출력 화면>
views
company_view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<b>회사 정보를 알려드립니다.</b>
tilesdef.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="main" template="/WEB-INF/views/template/layout.jsp">
<put-attribute name="title" value="Spring Tiles 실습"/>
<put-attribute name="header" value="/WEB-INF/views/template/header.jsp"/>
<put-attribute name="menu" value="/WEB-INF/views/template/menu.jsp"/>
<put-attribute name="body" value="/WEB-INF/views/main_view.jsp"/>
<put-attribute name="footer" value="/WEB-INF/views/template/footer.jsp"/>
</definition>
<!-- 회사 소개-->
<definition name="company" extends="main">
<put-attribute name="title" value="회사소개"/>
<put-attribute name="body" value="/WEB-INF/views/company_view.jsp"/>
</definition>
</tiles-definitions>
tiles의 좋은 점은 기본 설정을 하나 만들면 상속받을 수 있다는 것
맨 처음에 모든 레이아웃을 다 구현했던 main을 상속받고 바뀌는 내용들만 명시해줌 (title, body)
+definition name="company" 기 때문에 controller 에서 return "company" 라고 명시하면 됨
컨트롤러
TilesController
//회사소개 호출
@RequestMapping("/company.do")
public String viewCompany() {
return "company";
}
열려있는 창에서 회사소개를 누르면 정상적으로 구동되면서
body글이 회사 정보를 알려드립니다. 라고 뜨면 정상
<mybatis Tiles-제품소개>
views
product_view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<b>상품을 소개합니다.</b>
tilesdef.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="main" template="/WEB-INF/views/template/layout.jsp">
<put-attribute name="title" value="Spring Tiles 실습"/>
<put-attribute name="header" value="/WEB-INF/views/template/header.jsp"/>
<put-attribute name="menu" value="/WEB-INF/views/template/menu.jsp"/>
<put-attribute name="body" value="/WEB-INF/views/main_view.jsp"/>
<put-attribute name="footer" value="/WEB-INF/views/template/footer.jsp"/>
</definition>
<!-- 회사소개 -->
<definition name="company" extends="main">
<put-attribute name="title" value="회사소개"/>
<put-attribute name="body" value="/WEB-INF/views/company_view.jsp"/>
</definition>
<!-- 제품소개 -->
<definition name="product" extends="main">
<put-attribute name="title" value="제품소개"/>
<put-attribute name="body" value="/WEB-INF/views/product_view.jsp"/>
</definition>
</tiles-definitions>
tiles의 좋은 점은 기본 설정을 하나 만들면 상속받을 수 있다는 것
맨 처음에 모든 레이아웃을 다 구현했던 main을 상속받고 바뀌는 내용들만 명시해줌 (title, body)
+definition name="company" 기 때문에 controller 에서 return "company" 라고 명시하면 됨
컨트롤러
TilesController
//제품소개 호출
@RequestMapping("/product.do")
public String viewProduct() {
return "product";
}
열려있는 창에서 회사소개를 누르면 정상적으로 구동되면서
body글이 상품을 소개합니다. 라고 뜨면 정상
만약 안된다면 restart를 누르고 다시 실행
***
TilesConfigurer(Spring Framework 5.2.21.RELEASE API)
TilesConfigurer (Spring Framework 5.2.21.RELEASE API)
Set the DefinitionsFactory implementation to use. Default is UnresolvingLocaleDefinitionsFactory, operating on definition resource URLs. Specify a custom DefinitionsFactory, e.g. a UrlDefinitionsFactory subclass, to customize the creation of Tiles Definiti
docs.spring.io
***
[Spring]타일즈(Tiles) 설정 및 사용법 (템플릿엔진, 동적메뉴, ViewPrepare) : 네이버 블로그 (naver.com)
[Spring]타일즈(Tiles) 설정 및 사용법 (템플릿엔진, 동적메뉴, ViewPrepare)
Spring Tiles 설정 및 사용법 - Tiles란? - Tiles 관련 용어 - Tiles 사용법 · 1. 의존성 추가 · 2. ...
blog.naver.com
이거 정리 잘 되어 있는 듯 이거 보기
'학원 > spring' 카테고리의 다른 글
1.12 (ch15(tiles db파일 저장)-회원가입,로그인,로그아웃,my페이지) (1) | 2024.01.14 |
---|---|
1.10 (Tiles-Lombok install,기본설정,페이지 만들기) (0) | 2024.01.11 |
1.9 (myBatis-목록,상세,수정,삭제/ myBatis(boot) 설정,대문페이지) (0) | 2024.01.09 |
1.8 (JDBC-글목록,상세,수정,삭제/myBatis-기본설정,글작성,목록,상세) (1) | 2024.01.08 |
1.4 (SpringMVC-로그인처리,회원가입,파일업로드,파일다운로드) (0) | 2024.01.04 |