본문 바로가기
학원/spring

1.10 (myBatis(boot)-crud/spring-tiles crud)

by 쿠룽지 2024. 1. 11.
728x90
반응형

 

 

<복습>

 

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) - MangKyu's Diary (tistory.com)

 

[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;">
	&copy; 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

이거 정리 잘 되어 있는 듯 이거 보기

728x90
반응형