728x90
반응형

1. 스프링부트 프로젝트 설정

https://start.spring.io/ 에 접속하여 생성하려는 프로젝트의 환경을 설정 후 「GENERATE 버튼을 클릭하여 프로젝트 생성

프로젝트생성


2. 생성한 프로젝트를 개발툴(인텔리제이 or 이클립스)에서 import 하여 열기


3. src/main/경로에 webapp 디렉터리 생성 (src/main/webapp)


4. View 경로 설정 (application.properties)

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

글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --

 

728x90
반응형