본문 바로가기
CLASS/SPRINGBOOT

#5-2 / thymeleaf로 데이터 출력 2

by hingu 2024. 8. 20.

  👀 JSP + thymeleaf  

- controller

@GetMapping("/datalist2.do")
public String datalist2(Model m) {
    m.addAttribute("view","JSP & JSTL");

    return "datalist2"; // 걍 null로 해도 되는듯
}

 

 

- datalist2.jsp

/*<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> */이걸 지워줘야함
<!DOCTYPE html>
<html lang="ko" xmlns:th="https://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>JSP + thymeleaf</title>
</head>
<body>
<span th:text="${view}"></span>
</body>
</html>

 

✅ 

view 파일 속성명을

html과 jsp 함께 사용시 상위 속성을 입력해야함!

 

application.properties

여기에 

spring.thymeleaf.cache=false
spring.thymeleaf.check-template-location=true
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/

# 요건 jsp 주의 
spring.thymeleaf.suffix=.jsp

spring.thymeleaf.mode=html

요렇게 변경하면 jsp는 나오나 (단, 파일 최상단 jsp 부분은 삭제해야함 ) html은 깨짐 

=> html의 controller에 return 값을 지정

     return "datalist.html";   


  👀 JSP와 JSTL 로  view에 데이터를 출력하는 방식  

application.properties

spring.thymeleaf.cache=false
spring.thymeleaf.check-template-location=true
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/


# 위의 spring.mvc.view.prefix , suffix부분이 불능 됨 => 요걸 해결해야 view안의 파일도 실행됨
spring.thymeleaf.suffix=.jsp
spring.thymeleaf.mode=html


🔽🔽🔽 요거 추가 🔽🔽🔽

#해당 view-names는 thymeleaf와 JSP&JSTL을 구분하기 위함
spring.thymeleaf.view-names=/*

 

-  Controller

@GetMapping("/datalist3.do")
public String datalist3(Model m,ServletRequest req) {
    req.setAttribute("data", "JSP 변수값에 대한 데이터 출력");
    m.addAttribute("view2","JSTL데이터 출력");

    return null;
}

 

-  /WEB-INF/views/datalist.jsp 추가함

이거랑 앞 datalist1, datalist2 다 나와야함 !!!

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String msg = (String)request.getAttribute("data");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>View(JSP 전용)</title>
</head>
<body>
	<%=msg%>
	<br><br>
	${view2}
</body>
</html>

 

잘 나오는군

 

 


👀 정리

templates 폴더 안의 view는 controller return   (얘네만 신경 잘 쓰면됨 :  앞에 /)

return "/datalist.html";  //templates의 html파일 
return "/datalist2"; //tehmplates의 jsp파일

 

 

views 폴더 안의 jsp view는 controller return

return "datalist3"; //views안의 jsp파일 
// => 얘는 뭐 null 해도 되는듯

 

- return null 이면 spring mvc 찾음 => null X

 

🔽 🔽

 

최최최최종  application.properties

spring.application.name=bootweb

#Server
server.port=8081
spring.devtools.restart.enabled=true
server.servlet.encoding.force-response=true
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true

#file I/O
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=4MB
spring.servlet.multipart.max-request-size=10MB

#view
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

#jdbc
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/cms
spring.datasource.username=hana
spring.datasource.password=hana1234

#mybatis (mybatis 사용시에만 패키지 추가)
mybatis.type-aliases-package=kr.co.sen,kr.co.web
mybatis.mapper-locations=classpath:/mapper/*.xml

#thymeleaf
spring.thymeleaf.cache=false
spring.thymeleaf.check-template-location=true
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.jsp
spring.thymeleaf.mode=html 
spring.thymeleaf.view-names=/*

=> view-names :  thymeleaf와 JSP&JSTL을 구분하기 위함