jsp๋ง ๋ฐฐ์ฐ๊ณ ์ฌ์ฉํ๋ฉด์ ์ต์ํด์ง ๊ฒ์ ๊ณ์ ์ฐ๊ณ ์ถ์์ง๋ง Spring Boot๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ Thymeleaf๋ฅผ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
์ฐ์ ์ ์ผ๋ก Spring boot์์ jsp ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์์ง ์์ต๋๋ค. ์๋ง ๋ด์ฅํฐ์บฃ์ด๊ธฐ ๋๋ฌธ์ war๋ก ํจํค์ง์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ Spring boot๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ ์ฅ์์๋ ์ฝ๊ฐ ๐คจ์ ๋๋ค.
Thymeleaf๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์์กด์ฑ์ ๋จผ์ ์ถ๊ฐ ํด์ค๋๋ค.
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
application.yml์๋ ๊ด๋ จ ์ค์ ์ ํด์ฃผ์ด์ผ ํฉ๋๋ค. jsp๋ฅผ ์ฌ์ฉํ ๋ ์ฒ๋ผ ์์น์ ํ์ผํ์์ ์๋ ค์ค๋๋ค
application.yml
spring:
thymeleaf:
prefix: classpath:templates/
suffix: .html
mode: HTML5
ํจํค์ง ๊ตฌ์กฐ๋ ์ด๋ ์ต๋๋ค.
template ํํ๋ ์ด๋ ์ต๋๋ค. ์์ xmlns:th ๋ง ๋ถ์ฌ์ฃผ๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค.!
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Dealink Admin Page</title>
</head>
<body>
</body>
</html>
Controller
@RequestMapping("/room")
public String room() {
return "room";
}
Test Code (ํ ์คํธ ์ฝ๋ JUnit5)
package com.chatting.domains.chatting.presentation;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = ChattingController.class)
class ChattingControllerTest {
@Autowired private MockMvc mockMvc;
@Autowired WebApplicationContext wac;
@BeforeEach
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
@Test
public void html๋งตํํ
์คํธ() throws Exception {
this.mockMvc
.perform(MockMvcRequestBuilders.get("/room"))
.andExpect(status().isOk())
.andDo(print())
.andExpect(view().name("room"));
}
}
๊ฐ๋จํ ๋ฌธ๋ฒ ๋ช๊ฐ๋ก ์๋ฅผ ๋ค์ด๋ณด๋ฉด
Text
์ปจํธ๋กค๋ฌ์์ model๋ก ๋ฐ์์จ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ธํ ๋ฆฌ์ ์ด์์ ์๋์์ฑ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฐ์ ๋ฐ์ ์ฌ ์ ์๋์ง ์ฝ๊ฒ ๊ฐ๋ฅํฉ๋๋ค !
<p th:text="'์ด์
์ฐฐ ์: '+${countBidHistory}"></p>
๋ฐ๋ณต๋ฌธ
auctionResponseList๋ผ๋ ๋ฆฌ์คํธ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์์ ๋ ์ฒ๋ฆฌ ์ด๋ ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
<tr th:each="auction : ${auctionResponseList}">
<td th:text="${auction.date}">์ํ ๋ฑ๋ก ๋ ์ง</td>
</tr>
aํ๊ทธ
"" ์์ ''๋ฅผ ์ฌ์ฉํด์ผ ์ ์์ ์ผ๋ก ๋ฐ์์ด ๋ฉ๋๋ค! ์์ @๋ฅผ ๋ถ์ด๋๊ฒ์ด ํต์ฌ์ ๋๋ค.
<a th:href="@{'https://www.aejeong.co.kr/product/'+${auction.auctionEntity.url}}"
th:target="_blank">์ํํ์ด์ง ๋ณด๊ธฐ</a>
onClick
<a th:onclick="'window.open(\'/auction/history/'+${auction.auctionEntity.id}+'\',\'width=700px,height=800px,scrollbars=yes\')'"
th:text="${auction.count}" style="color: blue;text-decoration: underline">๊ฒฝ๋งค ๋ด์ญ</a>
format
๋ฐ์ดํธ ํฌ๋งท๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค! #temporals.format์ ์๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
<td th:text="${#temporals.format(auction.historyEntity.createdDate,'yyyy-MM-dd HH:mm')}"></td>
'๐ WEB > Thymeleaf' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Thymeleaf๋ก Pageable ์ ์ฉํ๊ธฐ! (0) | 2021.02.05 |
---|