pom.xml - dependency 추가
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
프로젝트 구조
- Spring Boot의 경우 src/main/resources/static 또는 src/main/resources/templates 폴더에 배치하는 것을 선호하기 때문에 webapp/WEB-INF와 같은 구조를 갖지 않음
- 하지만 JSP 파일을 사용하는 경우 JSP 파일은 src/main/webapp/WEB-INF 폴더에 위치해야만 톰캣이 이를 인식할 수 있다고 하여 수동적으로 src/main 아래에 webapp/WEB-INF/views 폴더를 생성해 줌
src/
├── main/
│ ├── java/
│ │ └── com.example.demo/
│ │ ├── DemoApplication.java
│ │ └── controller/
│ │ └── HomeController.java
│ ├── webapp/
│ │ └── WEB-INF/
│ │ └── views/
│ │ └── example.jsp
JSP ViewResolver 설정
- Spring Boot에서 JSP 파일을 처리하려면 View Resolver 설정이 필요
- 따라서 application.properties 또는 application.yml에 다음과 같은 설정 추가
# JSP 파일이 위치한 기본 경로
spring.mvc.view.prefix=/WEB-INF/views/
# JSP 파일의 확장자
spring.mvc.view.suffix=.jsp
Controller 작성
@Controller
public class HomeController {
@GetMapping("/")
public String home(Model model) {
model.addAttribute("message", "Hello, JSP!");
return "example"; // example.jsp로 연결
}
}
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>
<head>
<meta charset="UTF-8">
<title>JSP Example</title>
</head>
<body>
<h1>Message from Controller: ${message}</h1>
</body>
</html>
결과 확인
주의 사항
- 아래의 dependency가 없을 경우 Eclipse Console 창에 다음과 같은 메세지가 찍힘
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
o.s.w.s.resource.ResourceHandlerUtils : "Path with "WEB-INF" or "META-INF": [WEB-INF/views/example.jsp]"
- tomcat-ebed-jasper 의존성은 Spring Boot 프로젝트에서 JSP를 렌더링 하기 위해서 반드시 필요하다고 함
- 이 의존성은 JSP를 컴파일하고 실행할 수 있도록 Jasper JSP 엔진을 제공하기 때문
'Language > Spring' 카테고리의 다른 글
[SQL Mapper] Mybatis의 태그 [association, collection, sql, include] (1) | 2024.12.17 |
---|---|
[SQL Mapper] Mybatis의 ResultMap과 ResultType (0) | 2024.12.17 |
[SQL Mapper] Mybatis 개념 및 구조 (2) | 2024.12.02 |
[JPA] N+1 문제 (1) | 2024.11.18 |
[JPA] 엔티티 관계의 로딩 전략 - 즉시 로딩 / 지연 로딩 (1) | 2024.11.18 |