Develop

[spring-Boot] Tiles3 import Error (Spring 3.0버전 이상) 본문

웹 개발/Spring

[spring-Boot] Tiles3 import Error (Spring 3.0버전 이상)

개발 기록 2024. 3. 5. 15:03

 

Spring Boot로 새프로젝트를 만든 후 Tiles를 설정하려고 했음

근데 자꾸 tiles3 Class가 import 안되는 오류 발생

 

결론을 먼저 말하자면 3.2.3버전에서 2.7.5버전으로 다운해서 해결했다..

 

검색 아무리 해봐도 진짜 다들 걍 쓰면 import 되는 것처럼 그 누구도 설명이 없었음

(해결하니 당연함 그냥 import 되더라)

 

내가 pom.xml에 추가를 안해서 import가 안되나 싶었는데

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

spring-boot-starter-web은 확실하게 넣었으니 그것도 아님

 

 

이유를 알게되면 추가하는 걸로....


 

일단 spring boot 프로젝트가 있다는 가정하에

타일즈를 사용하기 위해서 pom.xml에 tiles관련 라이브러리를 추가했다

 

원래 (필수) 인것만 넣었는데 오류 해결해보려고 (선택) 까지 다 넣음

 

(필수)

- tiles-core

Maven Repository: org.apache.tiles » tiles-core (mvnrepository.com)

 

- tiles-jsp

Maven Repository: org.apache.tiles » tiles-jsp (mvnrepository.com)

 

-tiles-servlet

Maven Repository: org.apache.tiles » tiles-servlet (mvnrepository.com)

 

 

(선택)

- tiles-api

Maven Repository: org.apache.tiles » tiles-api (mvnrepository.com)

 

- tiles-template

Maven Repository: org.apache.tiles » tiles-template (mvnrepository.com)

 

- tiles-extras

Maven Repository: org.apache.tiles » tiles-extras (mvnrepository.com)

 

<!-- tiles -->
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-core</artifactId>
    <version>3.0.8</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-jsp</artifactId>
    <version>3.0.8</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-servlet</artifactId>
    <version>3.0.8</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-api</artifactId>
    <version>3.0.8</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-template</artifactId>
    <version>3.0.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-extras -->
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.8</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.8</version>
</dependency>

 

나는 다 최신 버전인 3.0.8로 추가해주었다.

 

추가로 Spring Boot 사용시 tomcat-embed-jasper 와 jstl 을 추가해줘야 한다고 한다.

 

* tomcat-embed-jasper

: Spring boot 내장 톰캣에는 jasper engine이 없기 때문에 JSP 엔진 역할을 하는 패키지

Maven Repository: org.apache.tomcat.embed » tomcat-embed-jasper (mvnrepository.com)

 

* jstl

Maven Repository: javax.servlet » jstl » 1.2 (mvnrepository.com)

 

<!-- JSP -->
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <version>9.0.58</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

 

그러나 스프링 부트 3.0버전 이상인 경우 

jstl의 1.2버전을 더이상 지원하지 않는다고 한다.

 

나는 3.2.3버전을 사용중이므로 코드를 바꿔주었다.

 

<!-- JSP -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- 스프링부트 3.0이상이면 jstl 1.2를 사용할 수 없다
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
-->
<!-- jstl 1.2 코드 대신 입력-->
<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>

 

 

이 외에도 Servlet 패키지가 변경 되는 등 변경사항이 있으니

3.0 이상인 버전을 사용한다면 세팅을 한번 확인하는 것이 좋다

 


 

스프링 버전 3.0이상일 때 변경된 사항

 

1. Servlet 패키지

javax.servlet => jakarta.servlet

 

2. 내장형 톰캣 의존성 제거 및 새로운 tomcat 의존성 주입

 

<!-- 변경 전 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

<!-- 변경 후 -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

 

 

3.  jstl

<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api -->
<dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/jakarta.servlet.jsp.jstl -->
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency>

 

 

변경된 세팅 참고 글

 

[SpringBoot] SpringBoot 3.0 에서 Jsp, Jstl 세팅 그리고 Servlet 변경점 (tistory.com)

 

[SpringBoot] SpringBoot 3.0 에서 Jsp, Jstl 세팅 그리고 Servlet 변경점

- 개요 본문은 SpringBoot 3.0 에서의 세팅을 다루고 있음을 알려드립니다. SpringBoot 3.0 으로 Jsp 를 설정하던 와중 겪었던 어려움에 대한 해결법입니다. - Servlet 우선 Servlet의 패키지가 변경되었습니다

islet4you.tistory.com


 

 

근데 Spring boot 3.2.3버전으로 사용하니까 문제가 있었다.

 

 

위의 사진과 같이 

TilesConfig Class에서 org.springframework.web.servlet.view.tiles3 가 import안되는 현상 발생....

하루를 꼬박 찾았는데 결국 포기하고 스프링부트 버전을 2.7.5로 다운했다

 

spring-boot-starter-web 의존성을 추가했는데도 왜안되는건지 참나

아님 내가 모르는게 있는듯,,

 

 

 

결국 Test1이라는 프로젝트를 새로 만들어서 2.7.5 버전으로 다운하고나니 

 

 

import 성공!

만약 같은 프로젝트에서 버전을 다운한다면

스프링 3.0버전 이상이면 바꿔줘야했던 설정들도 다시 다 되돌리는거 잊지말기

 


 

참고한 글

 

근데 오류때문에 너무 많은 글을 봐서 뭘 봤는지도 모르겠다.

Tiles 설정 방법은 다시 깔끔하게 정리할 예정

 

[ Spring ] tiles 설명 및 설정 방법 (tistory.com)

 

[ Spring ] tiles 설명 및 설정 방법

페이지 모듈 분리하기 페이지마다 Header나 Footer와 같이 공통적으로 들어가는 요소들이 있다. 만약, Header의 코드를 고쳐야 한다면 모든 페이지의 Header를 일일이 고쳐야하는 불편함이 생긴다. 이

codingwell.tistory.com

 

Spring Boot Tiles 설정하기 - Try (has3ong.github.io)

 

Spring Boot Tiles 설정하기

Spring Boot Tiles 설정하기

has3ong.github.io