본문 바로가기

java spring

spring boot 스프링부트 초기오류 잡기

OS : ubuntu Linux 20.04

JDK : OpenJDK 17.0.1

Eclipse : 2021-09(4.21.0), Eclipse MarketPlace에서 STS4(spring legacy), STS3(spring boot) 관련 플러그인 설치

 

스프링 개발하려면 JDK버전 11이하로 해야한다는 얘기가 많은데, 나는 따로 JDK를 설치한 기억이 없고 우분투다 보니

sudo apt update && sudo apt upgrade 를 자주해줬는데 나중에 보니 JDK17이 깔려있음

이왕 JDK가 최신버전으로 설치되어있으니 Eclipse도 최신버전으로 설치했음

--> 근데 이게 아니라 eclipse 2021버전 설치하면 여기에 openJDK17이 내장되어 있다는 블로그도 있음

 

Eclipse에서 STS관련 플러그인 설치후 Spring Legacy Project를 생성하려니 진짜로 생성이 안됨..

에러메세지 : An error has occurred. See error log for more details. java.lang.ExceptionInInitializerError

 

에러메세지 복사해서 검색해보니 비슷한 오류와 해결책들이 나와있는데 대부분이 JDK버전을 낮추라는 답변들..

낮은 버전을 올린다면 모를까, 설치되어서 잘 작동하고 있는(Eclipse와 JDK17로 일반java 프로젝트생성 및 컴파일&실행 잘됨)

JDK 버전을 일부러 낮추기는 싫어서, 그냥 Spring boot(Spring Starter Project)로 프로젝트 생성

 

프로젝트 생성후 역시나 오류발생, 처음에는 Controller도 제대로 못탐, 해당 함수호출부에 로그를 찍어봐도 로그가 안찍힘

 

1. controller가 있는 패키지는 메인함수가 있는 패키지 하위여야 한다.
controller가 있는 패키지가 com.example.controller 라면
메인함수 패키지는 com.example 이어야 한다.

만약 위와같이 상하관계가 아니어도 방법은  있는데, 메인함수 패키지에서 controller 패키지를 스캔할수 있도록

@SpringBootApplication
@ComponentScan(basePackages= {"com.example.controller"})
public class MyprjApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyprjApplication.class, args);
    }

}

ComponentScan 을 넣어준다. 상하관계라면 자동으로 scan하니 안넣어줘도 된다.

 

참고) Spring Legacy의 경우는 servlet-context.xml 파일안에

<context:component-scan base-package="com.example.controller" />

이렇게 들어간다. 그런데 component와 scan 사이에 - 가 있고 C가 소문자인것이 다름

 

2. 위의 방법으로 조치하니 일단 로그는 찍힌다. 근데 jsp는 못타고 있음

ViewResolver 설정
src/main/resources 밑에 application.properties 파일에 아래와 같이 넣어준다.

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

 

이 설정 역시 Spring Legacy의 경우 servlet-context.xml 파일안에 있다.

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

 

3. 마지막으로 tomcat이 jsp를 인식못하는 건지.. 이것도 검색결과 방법 찾음

 

tomcat과 jsp의 연동
pom.xml 파일에 아래와 같이 넣어준다.

<dependency>
<groupId>org.apache.tomcat.embed</groupID>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>

 

이제 잘 되네.. 코딩 시작 ㅋㅋㅋ