ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring Boot] 스프링부트에서 JSP 사용하는 법
    Server/Spring Boot 2020. 8. 18. 13:43
    728x90
    반응형

    이번 글에서는 스프링 부트에서 jsp를 사용하기 위해 설정하는 법에 대해서 정리하려 한다.

     

    spring-boot-starter-web 에 포함된 tomcat 은 JSP 엔진을 포함하고 있지 않다. jsp 파일은 Springboot 의 templates 폴더안에서 작동하지 않는다. 그래서 jsp를 적용하기 위해서는 아래와 같은 의존성을 추가해야한다.

     

    pom.xml

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

    build.gradle 

    dependencies {
    	implementation 'javax.servlet:jstl'
        implementation "org.apache.tomcat.embed:tomcat-embed-jasper"
    }

    기본적으로 스프링부트는 내장톰캣을 가지고 있지만, jsp 엔진이 존재하지 않기 때문에 jasper와 jsp의 라이브러리 jstl을 사용할 수 있는 의존성을 추가해줘야 한다. 

     

     

    뷰 경로 지정

    앞서 말했듯이 스프링 부트에서 jsp를 기본 지원하지 않기 때문에 아래와 같은 정보를 application.properties에 설정해서

    스프링 부트에게 jsp 뷰의 경로를 알려주어야 한다.

     

     

    application.properties

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

    위와 같이 view 이름 predix, suffix에 붙는 것들을 설정할 수 있다. 예를들면 jsp 폴더 앞에 경로는 webapp/WEB-INF/test.jsp 이다. prefix는 앞에 폴더의 경로이고 suffix는 Controller를 통해서 view의 이름을 통해서 return 하면 뒤에 .jsp가 붙게 해주는 역할을 한다.

     

     

    폴더구조는 위와 같고 webapp 디렉토리를 만들어야 한다. 이유는 아마도 webapp 이라는 디렉토리 경로가 default로 내부적으로 설정이 되어 있는 것 같다.

    예제

    @Controller
    public class TestController {
    
        @GetMapping("/post")
        public String test(Model model) {
            Post post1 = new Post(1, "lee", "book1");
            Post post2 = new Post(2, "choi", "book2");
            Post post3 = new Post(3, "kim", "book3");
            List<Post> list = new ArrayList<>();
            list.add(post1);
            list.add(post2);
            list.add(post3);
            model.addAttribute("list", list);
            return "test";
        }
    }

    List에 Post 클래스를 담기위해서 post 객체 3개를 만들어서 list에 담은 후에 model에 데이터를 담았다. 그리고 jsp에서 model에 담긴 데이터를 꺼내서 확인해보자.

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <!DOCTYPE html>
    <html lang="ko">
    <body>
    
    <div class="container">
        <table class="table table-hover table table-striped">
            <tr>
                <th>번호</th>
                <th>작성자</th>
                <th>제목</th>
            </tr>
    
            <c:forEach items="${list}" var="post">
                <tr>
                    <th>${post.getPostId()}</th>
                    <th>${post.getNickName()}</th>
                    <th>${post.getTitle()}</th>
                </tr>
            </c:forEach>
        </table>
    </div>
    
    </body>
    </html>

    위와 같이 Controller Model에 담긴 데이터를 jstl을 이용해서 list에 담긴 데이터를 꺼낼 수 있다.

     

    이번 글에서는 Spring Boot에서 jsp를 사용하는 법에 대해서 알아보았습니다. 

     

     

     

    반응형

    댓글

Designed by Tistory.