본문 바로가기
Spring

Spring Boot jsp 사용

by codeok 2024. 3. 17.
반응형

Spring Boot에서 jsp를 사용하는 방법에 대해서 정리를 해봤습니다.

 

Spring Boot에서는 기본적으로 jsp 컴파일러는 지원해주지 않습니다. 

jsp를 사용하려면 tomcat-embed-jasper 의존성을 추가하면 사용이 가능합니다.

 

Spring Boot에서는 thymeleaf와 mustache라는 템플릿 엔진은 기본적으로 지원하고 사용하는 것을 권장하고 있습니다.

(Spring Boot 권장 ->  thymeleaf) 

 

프로젝트를 진행하다보면 예외적인 상황이 생기기에 jsp를 사용하는 방법에 대해서 정리했습니다.

 

사용 버전

사용한 java와 gradle, spring boot 버전에 작성했습니다.

  • java : 11
  • gradle 7.4 
  • spring boot : 2.4.4
  • io.spring.dependency-management : 1.0.11.RELEASE

 

build.gradle 의존성 추가

Spring Boot에서 jsp를 사용하기 위해서는 3가지 의존성이 필요하고 추가해 줍니다.

첫 번째는 Spring Boot에서 web 관련 의존성을 가지고 있는 org.springframework.boot:spring-boot-starter-web 라이브러리입니다.

두 번째는 tomcat jsp 관련 컴파일러를 가지고 있는 org.apache.tomcat.embed:tomcat-embed-jasper 라이브러리입니다.

마지막은 jsp jstl 관련 문법을 사용하기 위해 필요한 javax.servlet:jstl 라이브러리입니다.

plugins {
    id 'org.springframework.boot' version '2.4.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'org.example'
version = '1.0-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation "org.apache.tomcat.embed:tomcat-embed-jasper"
    implementation 'javax.servlet:jstl'

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

 

application.yml mvc view 추가

application.yml에 spring.mvc.view.prefix와 spring.mvc.view.suffix를 추가해 줍니다.

만약, 샘플 컨트롤러에서 view 이름을 index로 반환을 하면 index 이름의 앞 뒤에 prefix, suffix가 붙어서

/WEB-INF/jsp/index.jsp 이름의 jsp 파일을 찾고 화면에 반환됩니다.

spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

 

JspController 작성

jsp를 반환하는 샘플컨트롤러를 만들어 보겠습니다.

View 이름을 반환하게 처리하기 위해서는 @RestController가 아닌 @Controller로 작성해 줍니다.

jsp 메서드를 하나 만들고 String을 반환해도 되고 ModelAndView를 반환해도 상관없지만, 

저는 ModelAndView 객체를 만들어서 뷰 이름에는 index를 넣어주고 반환하게 만들었습니다.

package org.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class JspController {

    @GetMapping("/jsp")
    public ModelAndView jsp() {
        return new ModelAndView("index");
    }
}

 

 

샘플 index.jsp 생성

Spring Boot에서 jsp view 화면 폴더의 기본 접근 위치는 src/main/webapp 폴더입니다.

src/main/webapp 하위에 WEB-INF/jsp 폴더를 만들고 index.jsp를 생성해 줍니다.

 

정말 간단한 h1, h2 정적인 데이터만 찍는 jsp를 생성했습니다.

<html>
<head><title>First JSP</title></head>
<body>
    <h1>h1 JSP</h1>
    <h2>h2 JSP</h2>
</body>
</html>

 

 

브라우저 테스트

자신의 스튜디오(eclipse, intellij)에서 서비스를 기동 해줍니다.

기동을 하고 웹 브라우저에 http://localhost:8080/jsp를 입력하면 정상적으로 index.jsp가 화면에 전달된 것을 볼 수 있습니다.

 

정리

해당 포스팅에서는 Spring Boot에서 jsp를 사용하는 방법에 대해서 알아봤습니다.

Spring Boot는 기본적으로 jsp 컴파일러를 제공하지 않아서 tomcat-embed-jasper  의존성을 추가하면 사용 가능합니다.

 

최근에는 react도 많이 쓰고 jsp는 한 물 가긴 했으니 Spring Boot에서 공식적으로 밀고 있는 thymeleaf를 쓰는 게 좋을 것 같습니다~ (jsp 사라져 ^^)

 

소스코드를 참고하고 싶으시면 하단 링크 참고해주시면 됩니다.

https://github.com/jaedeokhan/blog-code/tree/main/spring-boot-jsp

 

감사합니다.

반응형