자바 스프링/부트 블로그 JPA 프로젝트

#8 스프링 부트의 yml과 jsp파일 리턴

daramG 2022. 5. 4. 19:26

 

우선 시작 전에, 혹시 sts4에서 jsp나 html 파일을 생성할 수 없는 경우

플러그인을 설치해주어야 한다.

마켓에서 이 플러그인을 설치하면 된다.

 

 

이제 yml에 대해 알아보자

 

내가 기존에 만들던 스프링 레거시 게시판에서는

web.xml, root-context.xml, servlet-context.xml 파일들이 있었다.

하지만 스프링 부트에선 이 세 파일들의 합본으로 application.yml을 사용한다.

 

application.yml

server:
  port: 9090
  servlet:
    context-path: /blog
    encoding:
      charset: UTF-8
      enabled: true
      force: true
    
spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp
      
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Seoul
    username: cos
    password: cos1234
    
  jpa:
    open-in-view: true
    hibernate:
      ddl-auto: create
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate.format_sql: true

  jackson:
    serialization:
      fail-on-empty-beans: false

 

코드 :

server:
  port: 9090
  servlet:
    context-path: /blog
    encoding:
      charset: UTF-8
      enabled: true
      force: true

설명 :

context-path라는 것은 내 프로젝트에 들어가기 위한 진입점이다.

미설정시 context-path: /

설정 이전에 주소 예시 http://localhost:9090/http/lombok

설정 이후 http://localhost:9090/blog/http/lombok

 

 

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

설명 :

 

이해를 위해 우선 TempControllerTest.java를 작성한다.

실행시키면 

찾을 수 없다는 오류가 발생한다. home.html.jsp ??

이건 지금 application.yml 파일에 작성되어 있는

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

이 코드 때문이다.

이 코드를 드래그해 다음과 같이 주석처리를 해주고,

 

이제 다시 실행해보면

 

해당 오류가 발생한다.

왜냐하면 @Controller는 해당 경로 이하에 있는 파일을 리턴하는데

 

지금 코드로는 이와 같이 src/main/resources/statichome.html과 같이 리턴하기 때문이다.

따라서 리턴명에 다음과 같이 반드시 슬래시(/)를 붙여줘야 한다.

이제 실행해보면

제대로 실행되는 것을 확인할 수 있다.

 

이와 같이 @RestController 가 문자 그 자체를 리턴했다면

@Controller 는 해당 경로 이하에 있는 파일을 리턴해준다.

 

이제는 html이 아니라 jsp를 리턴해보겠다.

그런데 스프링 부트는 기본적으로 jsp 지원을 하지 않는다.

jsp 파일을 리턴해도 스프링 부트가 정상적으로 동작하지 않는다.

 

 

 

부트에서 jsp파일 인식

 

그래서 첫 번째로 필요한 것이 pom.xml에서 JSP 템플릿 엔진의 의존성 설정을 해주는 것이다.

그래야 jsp가 부트에서 동작할 수 있다.

pom.xml

 

그리고 src/main/webapp/WEB-INF/views 디렉토리를 생성해서 jsp파일을 둔다.

jsp파일은 정적 파일이 아니므로 웹서버인 아파치가 처리하지 못한다.

톰캣이 대신 컴파일해서 웹브라우저에게 전달한다.

 

 

application.yml 주석처리 했던 코드들의 주석을 다시 해제한다.

prefix와 suffix는 이렇게 앞 뒤로 붙게된다.

 

이제 jsp파일을 리턴해보면

 

스프링 부트에서 jsp파일이 제대로 리턴되는 것을 확인할 수 있다.

 

 

 

 

 

참고자료 : https://youtu.be/U9OnYKiSf4g