본문 바로가기
프로그래밍/스프링프레임워크

Spring Boot 웹 애플리케이션에서 jsp와 Thymeleaf 두 가지 같이 사용하기

by pentode 2019. 10. 27.

이전에 작성한 글 "스프링 프레임워크 Thymeleaf 설정하기(XML 설정, Java 설정, Spring Boot 설정)" 에서 스프링 프레임워크에서 Thymeleaf를 사용하기 위해서 설정하는 방법을 알아보면서 xml설정과 java 설정에서는 jsp와 Thymeleaf를 같이 사용할 수 있도록 설정을 해보았는데, Spring Boot 에서는 같이 사용하는것을 알아보지 못했었습니다.


이번에는 Spring Boot 웹 애플리케이션에서 뷰로 jsp와 Thymeleaf를 같이 사용하도록 설정을 해봅니다. 예제는 Spring Boot에서 최초에 jsp를 사용하도록 설정된 프로젝트에 Thymeleaf도 사용 가능하도록 추가하는 것입니다.



1. 프로젝트에 사용된 개발 도구 및 라이브러리


- Eclipse 2018-12

- JDK 1.8

- Spring Tools 4 - for Spring Boot(Eclipse Plugin)

- Spring Boot 2.1.5

- Spring 5.1.7

- Thymeleaf 3.0.11


프로젝트는 STS의 프로젝트 템플릿중에 Spring Boot -> Spring Starter Project를 사용해서 만들었습니다. 생성시 Thymeleaf는 선택하지 않았습니다. Spring 관련 라이브러리의 버전은 Spring Boot 버전을 선택하면 자동으로 결정되어 집니다.



2. pom.xml 파일에 의존성 추가


Thymeleaf를 사용하기 위한 의존성을 추가합니다. jstl은 jsp 에서 사용됩니다. spring-boot-devtools는 클래스 수정시 웹서버를 재시작하여 결과를 바로 반영하는데 사용됩니다.


<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-thymeleaf</artifactId>

</dependency>


<dependency>

    <groupId>javax.servlet</groupId>

    <artifactId>jstl</artifactId>

</dependency>


<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>



3. application.properties 파일 설정


처음 두 라인은 jsp를 위해서 필요한 부분 입니다. jsp 파일의 위치가 /src/main/webapp/WEB-INF/jsp/ 폴더 아래로 지정을하고, 컨트롤러에서 반환되는 값에 .jsp 확장자를 붙여서 만들어진 파일명으로 뷰로 사용되어지는 jsp 파일을 찾도록 합니다.


세 번째 라인에 타임리프를 위한 설정 입니다. 뷰를 구분하기 위해서 타임리프를 컨트롤러가 뷰 이름을 반환할때 thymeleaf/ 로 시작하면 타임리프로 처리하도록 view-names 를 지정했습니다.


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

spring.mvc.view.suffix=.jsp

spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.cache=false

spring.thymeleaf.view-names=thymeleaf/*

타임리프 템플릿 파일 위치의 기본값은 /src/main/resources/templates 입니다. 이 설정은 spring.thymeleaf.prefix 값을 변경하여 바꿀 수 있습니다. 또 타임리프는 기본 cache 설정이 true 이므로 개발시에는 spring.thymeleaf.cache를 false를 설정하여 두는게 수정 사항이 바로 반영되므로 편리합니다.


뷰 리졸버 설정도 있어야 한다는 문서들도 있었지만, 없어도 잘 동작하였기에 리졸버 설정을 하지 않았습니다.



4. 프로젝트 파일 구성


jsp 파일은 /src/main/webapp/WEB-INF/jsp/ 폴더 아래에 위치하고, 타임리프 템플릿 파일은 /src/main/resources/templates/thymeleaf/ 폴더에 존재합니다. 타임리프만 사용할 경우 템플릿 파일의 기본 위치가 /src/main/resources/templates/ 폴더 인데, jsp와 Thymeleaf의 구분을 위해서 타임리프에 view-names 를 지정했기 때문에 지정된 view-names와 같은 폴더 아래에 템플릿 파일이 위치합니다.




5. 컨트롤러


앞에서의 설정에 따라 컨트롤러에서 반환하는 뷰 이름이 "thymeleaf/"로  시작하면 Thymeleaf 템플릿으로 처리됩니다.


/**

 * JSP 호출 테스트

 * @return

 */

@RequestMapping("/welcome-jsp.do")

public String welcome() {

    return "welcome";

}


/**

 * Thymeleaf 호출 테스트

 * @param model

 * @return

 * @throws Exception

 */

@RequestMapping("/welcome-thymeleaf.do")

public String welcome(Model model) throws Exception {

    model.addAttribute("greeting", "Hello Thymeleaf!");

    return "thymeleaf/welcome";

}



6. 실행결과


jsp 요청을 http://localhost:8080/welcome-jsp.do 이고, 타임리프 요청은 http://localhost:8080/welcome-thymeleaf.do 입니다.




※ 전체 예제 소스


springboot-java-jsp.zip




반응형