스프링 부트(Spring Boot)에서 JSP 사용하기
1. 스프링부트 프로젝트 설정
https://start.spring.io/ 에 접속하여 생성하려는 프로젝트의 환경을 설정 후 「GENERATE」 버튼을 클릭하여 프로젝트 생성
2. 생성한 프로젝트를 개발툴(인텔리제이 or 이클립스)에서 import 하여 열기
3. src/main/경로에 webapp 디렉터리 생성 (src/main/webapp)
4. View 경로 설정 (application.properties)
Controller에서 return 값을 반환할 때 연결되는 prefix(접두어)와 suffix(접미어)를 지정한다.
예제에서는 src/main/webapp/WEB-INF/jsp/ 디렉터리에 main.jsp 파일을 생성했기 때문에 아래와 같이 설정하였다.
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
5. 의존성 설정 (Gradle or Maven)
내장된 Tomcat에 JSP를 처리하는 서블릿이 없기 때문에 Tomcat의 JSP엔진인 Jasper와 JSP의 라이브러리인 JSTL의 의존성을 추가해 준다.
< Gradle(그래들)의 경우 >
build.gradle의 dependencies에 아래 내용을 추가
implementation group: 'org.glassfish.web', name: 'jakarta.servlet.jsp.jstl', version: '2.0.0'
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
< Maven(메이븐)의 경우 >
pom.xml에 아래 dependency를 추가
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
spring 3.0 이상에서
「implementation group: 'org.glassfish.web', name: 'jakarta.servlet.jsp.jstl', version: '2.0.0'」이 아닌
「implementation 'javax.servlet:jstl'」로 의존성을 추가할 경우 아래경고와 함께 404 에러가 발생하니 주의한다.
2023-12-26T17:37:55.720+09:00 WARN 4178 --- [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandler : "Path with "WEB-INF" or "META-INF": [WEB-INF/jsp/main.jsp]"
6. 설정이 끝났으니 Controller에서 JSP를 호출해 본다.
//MainController.java
package com.jg.testPj.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MainController {
@GetMapping("/main")
public String main(Model model) {
model.addAttribute("data", "hello");
return "/main";
}
}
<!-- main.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>My Spring Boot App</title>
</head>
<body>
<c:set var="world" value="world" />
<p>${data}${world}</p>
<div>${data}</div>
</body>
</html>
호출하면 Controller(컨트롤러)의 return 값이 application.properties 에서 설정해 둔 prefix와 suffix의 영향으로 src/main/webapp/WEB-INF/jsp/main.jsp 호출되고 Controller에서 model에 저장한 값과 JSP에서 jstl을 이용한 값이 잘 출력되는 것을 있다.
참조
(spring 3.0 version) jstl 이 재대로 적용되지 않을때
https://www.inflearn.com/chats/716033/spring-3-0-version-jstl-%EC%9D%B4-%EC%9E%AC%EB%8C%80%EB%A1%9C-%EC%A0%81%EC%9A%A9%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%84%EB%95%8C
[Spring] Path with "WEB-INF" or "META-INF" 에러
https://yeonyeon.tistory.com/110
글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --