본문 바로가기
study/spring boot

[spring boot] Jsp 적용 과정 (패키징 배포 방식 JAR에서 WAR로 변경)

by eunoia_DB 2023. 4. 21.

spring boot에서 Jsp를 사용하기 위해 필요한 설정과 적용 후 발생한 에러 해결 과정에 대해 정리했다.

 

 

1. pom.xml - dependency 추가

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

 

 

2. application.properties 설정

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

Controller에서 GetMapping 시 jsp 파일을 불러오기 위해서 파일 경로를 설정해야 한다.

application.properties에서 상위 폴더 경로(prefix)와 확장자명(suffix)을 작성한다.

이때 WEB-INF 폴더는 src > main > webapp 폴더 아래 있어야 한다.

 

 

 

위 설정을 마치고 서버를 실행하면 화면에 Jsp 파일이 정상적으로 불러와질 것이다.

Controller에서 GetMapping을 통해 간단한 테스트를 해보았다.

 

 

3. Controller 클래스 - GetMapping

@Controller
public class MainController {

    @GetMapping("/")
    public String main() {
        return "main";
    }
}

 

하지만 위와 같은 과정을 마치고도 jsp 파일 경로를 찾지 못하거나 매핑이 되지 않는다면

다음과 같은 원인을 추측할 수 있다.

 

먼저 초기 프로젝트 생성 시 Packaging 방식을 Jar로 선택했을 경우 오류가 발생할 수 있다. 이는 Jar와 War가

패키징 하는 방식에 있어서 지원하는 파일 구조가 다르기 때문에 Jsp를 사용 시에는 반드시 War로 설정해야 한다.

(spring boot 공식 가이드에서는 Jar 사용 지향, Jsp 사용을 지양한다)

 

 

 


 

 

 

패키징 방식 변경 방법 (JAR -> WAR)

 

1. pom.xml 설정 추가

<packaging>war</packaging>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
</dependency>

 

 

2. ServletInitializer Class 생성

public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return super.configure(builder);
    }
}

 

 

Tomcat이 내장되어 있는 Jar와 다르게 War는 서블릿을 생성 후 배포해야 하기 때문에 SpringBootServletInitializer를

상속받아 서블릿을 초기화해야 한다. 그러면 tomcat 같은 Servlet Container 환경에서

Spring Boot 애플리케이션 동작이 가능하다.

 

이외에도 Jsp와 비슷한 Tymeleaf와 같은 템플릿 엔진의 dependecy가 존재할 경우

오류가 발생할 수 있으니 있다면 삭제 후 빌드를 수행해야 한다.

 

 

에러 해결 후 페이지 출력 결과

 

 

 

 

 

 

 


Reference

 

https://hue9010.github.io/spring/springboot-war/

https://hye0-log.tistory.com/27 

https://velog.io/@wnsqud70/%EC%9B%B9%EC%84%9C%EB%B2%84%EC%99%80-%EC%84%9C%EB%B8%94%EB%A6%BF%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88

댓글