[ SpringBoot + jsp + intellij ] jsp 사용을 위한 설정
백엔드/SpringBoot

[ SpringBoot + jsp + intellij ] jsp 사용을 위한 설정

- 설치 환경

intellij: IntelliJ IDEA 2021.1.3 (Ultimate Edition)
jdk: java17
spring boot: 2.6.4

 

1. spring boot 설정

Intellij Community 버전은 https://start.spring.io/ 에서 프로젝트르 세팅

 

1. *Packaging 방식을 War로 선택 (jar방식은 지원 안되는 듯)

war를 선택

JSP Limitations

When running a Spring Boot application that uses an embedded servlet container (and is packaged as an executable archive), there are some limitations in the JSP support.
With Jetty and Tomcat, it should work if you use war packaging. An executable war will work when launched with java -jar, and will also be deployable to any standard container. JSPs are not supported when using an executable jar.Undertow does not support JSPs.Creating a custom error.jsp page does not override the default view for error handling. Custom error pages should be used instead.

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#web.servlet.embedded-container.jsp-limitations

 

2. 사용할 Dependencies 추가

- 기본적으로는 Spring Web만 추가하면 사용 가능 (Lombok은 편의를 위해서 추가)

3. Gradle에 jsp에서 사용하는 Dependencie 추가

- plugins에 war 확인 필요 (jar X)

- dependencies에 tomcat-embed-jasper, javax,servlet:jstl, spring-boot-starter-tomcat 확인

plugins {
    id 'org.springframework.boot' version '2.6.7'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'war' // jsp 사용시 필수 요소
}

...

dependencies {
    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' // 추가
    implementation 'javax.servlet:jstl' // 추가

    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' // jsp 사용시 필수 요소
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

2. 소스 설정

1. 설정 파일 

- src/main/resources/application.yml 또는 src/main/resources/application.properties

- 두가지 방법 중 선택

- 필수요소는 아니지만 페이지에 반복적인 경로와 파일형식을 제거하기 위해 사용
  -> 사용하는 경우 return "home", 사용하지 않는 경우 return "/WEB-INF/views/home.jsp"

 

.yml인 경우

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


.properties인 경우

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

 

2. jsp 디렉토리 생성

- src/webapp/WEB-INF는 이름을 변경하지 않고 기본적인 디렉토리로 사용 (필수)

- views, jsp, 등의 하위 디렉토리 생성 (선택, 이름도 변경 가능)

 

3. 테스트 파일

테스트를 위한 용도로 만든 파일 예시

 

1. Controller (HomeController.java)

@Controller
public class HomeController {

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

 

2. jsp (home.jsp)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!doctype html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    테스트
</body>
</html>

 


오류 사항

1. 원인

필자는 프로젝트내에 Module을 추가하여 세팅을 하는 중 404 오류가 발생

 

2. 해결방법

- Intellij 오른쪽 상단에 콤보박스를 선택 후 Edit Configurations..를 클릭

- jsp가 실행되는 Spring Boot > MyJspApplication 선택

- Configuration 탭에 Environment 밑에 있는 Working Directory에 $MODULE_WORKING_DIR$ 입력