본문 바로가기

Language/Spring

[STS] JSP 사용법

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 엔진을 제공하기 때문