스프링부트에서는 템플릿 엔진으로 JSP 사용을 권장하지 않는다. 스프링부트 MVC와 JSP에 익숙한 개발자는 다른 템플릿 엔진을 배우기 위해서는 익숙한 JSP를 포기해야 한다. 하지만 JSP 사용이 가능한 방법이 있어 메모 남긴다.
설정 - build.gradle
implementation 'javax.servlet:jstl'
implementation "org.apache.tomcat.embed:tomcat-embed-jasper"
그래들 설정을 변경하면 프로젝트에서 "Refresh Gradle Project"를 해준다.
설정 - application.properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
JSP view 폴더 생성
src/main/webapp 아래 spring.mvc.view.prefix에 설정한 경로에 파일이 위치하면 된다.
컨트롤러 작성
package com.suinautant.LearnAjaxSpringBootJSP.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import com.suinautant.LearnAjaxSpringBootJSP.object.Hobby;
@Controller
public class HobbyController {
@GetMapping("/hobby")
public String hobby(Model model) {
Hobby hobby1 = new Hobby(1, "lee", "book");
Hobby hobby2 = new Hobby(2, "choi", "music");
Hobby hobby3 = new Hobby(3, "kim", "sports");
List<Hobby> hobbys = new ArrayList<Hobby>();
hobbys.add(hobby1);
hobbys.add(hobby2);
hobbys.add(hobby3);
model.addAttribute("hobbys", hobbys);
return "hobby";
}
}
Hobby 클래스
package com.suinautant.LearnAjaxSpringBootJSP.object;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class Hobby {
private Integer idx;
private String name;
private String hobby;
public Hobby(Integer idx, String name, String hobby) {
this.idx = idx;
this.name = name;
this.hobby = hobby;
}
}
jsp 파일 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>스프링 부트 / JSP</title>
</head>
<body>
<h2>스프링부트 model 값 JSP 받기</h2>
<div>
<table border="1">
<tr>
<th>번호</th>
<th>이름</th>
<th>취미</th>
<th>객체</th>
</tr>
<c:forEach items="${hobbys}" var="hobby">
<tr>
<th>${hobby.getIdx()}</th>
<th>${hobby.getName()}</th>
<th>${hobby.getHobby()}</th>
<th>${hobby}</th>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
결과
오류
2021-11-07 11:37:08.673 WARN 2032 --- [nio-8080-exec-7] o.s.w.s.r.ResourceHttpRequestHandler : Path with "WEB-INF" or "META-INF": [WEB-INF/views/test.jsp]
2021-11-07 11:41:53.806 WARN 2032 --- [nio-8080-exec-5] o.s.web.servlet.PageNotFound : No mapping for GET /WEB-INF/views/test.jsp
JSP 설정을 마치고 기능 구현 이전에 HELLO WORLD를 먼저 출력해 볼려고 했는데 위치를 찾지 못하는 현상이 있었다. 첫번째는 위처럼 설정을 했을 때 났던 오류이고, 두번째는 스택오버플로우를 참고해 servletview를 작성했을 때 출력 된 오류다. 해결 방법은 이클립스를 재시작하니 정상 작동되었다.
'개발' 카테고리의 다른 글
float 사용시 부모태그에서 해제 속성 지정 (0) | 2022.01.20 |
---|---|
CSS flexbox 디버깅 (0) | 2021.12.07 |
API Platform, POSTMAN (0) | 2021.11.16 |
HeidiSQL, 데이터베이스 GUI 관리 툴 (0) | 2021.11.11 |
[이클립스] JAVA EE web.xml 저장시 오래 걸리는 현상 (0) | 2021.09.28 |
[이클립스] enum 멤버 자동 정렬 정지 (0) | 2021.09.16 |
[JAVA] String.format의 %%%ds 의미 (0) | 2021.09.14 |
[C lang] 가위 바위 보 (0) | 2021.08.26 |