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
감사합니다.
'Spring' 카테고리의 다른 글
nGrinder & Spring Boot API 성능 테스트 (0) | 2023.03.05 |
---|---|
nGrinder 성능 테스트 플랫폼 설치 (0) | 2023.03.05 |
[Spring][Mybatis][Logger] Spring Log4j를 이용해서 인터셉터로 로그 남기기 & MyBatis 쿼리 로그 출력 및 정렬 (0) | 2020.09.21 |
[spring] Lombok 이란? (0) | 2020.09.10 |
[jsp][servlet] Forward VS Redirect(차이점) (0) | 2020.09.03 |