[Java] Spring boot[4] - View 설정 및 JSP 연동하기

RedPanda·2022년 12월 6일
0
post-thumbnail

저번 포스팅 때는 static 폴더에서 화면을 로드해주는 코드를 사용했고, controller로 get방식으로 화면을 띄워주는 방법을 사용했다. MVC패턴의 C를 한 것이다.
이번엔 V의 View 설정부터 화면을 띄워주기 위한 JSP를 연동하는 것까지 해보고자 한다.

++) 내장 Tomcat
이전에 추가한 디펜던시(spring-boot-starter-web)를 말하며, tomcat을 포함하고 있어 화면을 띄울 수 있지만 JSP 엔진이 없다.

JSP와 thymeleaf

JSP가 왜 안될까...?

코드를 그대로 따라 해보았는데 어찌된 영문인지 작동되지 않았다... 분명히 내 실수인데 무지성으로 따라해보니 이유도 모르고 실패했던 것 같다.

thymeleaf를 사용하여 구현해보자.

JSP는 결국 실패로 돌아갔지만 tamplate를 사용하는 thymeleaf를 사용해보기로 하였다.
사실 두 방법 모두 서버에서 받아오는 데이터를 시각화해주는 도구에 불과하기에 우선은 대충 따라해보았다.

다음 파일 경로를 따라 코드를 짜보자.

수정한 파일은 Controller를 추가할 TestController.class, 그리고 Controller에서 사용할 클래스인 TestVo, 마지막으로 화면을 띄워줄 html이다.

우선 따라 만들기는 했지만 Java의 프로젝트 구조를 얼핏 알 것 같기도 하다. 다음은 각 파일에 추가할 코드이다.

// pow.xml에 의존성 코드 추가
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

// thymeleafTest.html 추가
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello thymeleaf</title>
</head>
<body>
	<h1>Hello thymeleaf</h1>
	<h2>name = <span th:text="${testModel.name}"></span></h2>
	<h3>id =  <span th:text="${testModel.id}"></span></h3>
</body>
</html>

// application.properties에 추가
#JSP와 같이 사용할 경우 뷰 구분을 위해 컨트롤러가 뷰 이름을 반환할때 thymeleaf/ 로 시작하면 타임리프로 처리하도록 view-names 지정
spring.thymeleaf.view-names=thymeleaf/*
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
#thymeleaf를 사용하다 수정 사항이 생길 때 수정을 하면 재시작을 해줘야 한다. 이를 무시하고 브라우저 새로고침시 수정사항 반영을 취해 cache=false 설정(운영시는 true)
spring.thymeleaf.cache=false
spring.thymeleaf.check-template-location=true

// Vo에 코드 추가 -> test 밑에 vo 디렉토리 추가 후 TestVo.class 추가
package com.example.SpringTest.test.vo;
public class TestVo {
    private Long mbrNo;
    private String id;
    private String name;

    public TestVo() {
    }
    public TestVo(String id, String name) {
        this.id = id;
        this.name = name;
    }
    public Long getMbrNo() {
        return mbrNo;
    }
    public void setMbrNo(Long mbrNo) {
        this.mbrNo = mbrNo;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

// Controller 추가
@RequestMapping("/thymeleafTest")
public String thymeleafTest(Model model) {
    TestVo testModel = new TestVo("goddaehee", "갓대희") ;
    model.addAttribute("testModel", testModel);
    return "thymeleaf/thymeleafTest";
}

여기서 내 관심을 끈 것은 Model 객체였다. model에 addAttribute와 같은 것을 하는데 JSP에서 본 적이 있는 함수였다.
아래의 링크를 찾아보니 역시 Java에서 유사한 기능을 하는 객체라고 한다. 값을 넘겨줄때 model로 감싸서 보내준다. nodeJS에서 JSON으로 값을 넘겨주는 것과 유사한 것 같다. 공부를 더 해봐야겠다.

https://velog.io/@msriver/Spring-Model-%EA%B0%9D%EC%B2%B4

여담

View는 이렇게 어물쩡 넘긴 것 같은데 나중에 사용할 때 다시 공부해봐야겠다...공부할 게 자꾸 쌓이넹...ㅠㅠ

profile
끄적끄적 코딩일기

0개의 댓글