티스토리 뷰

안녕하세요!

이번 포스팅에서는 Spring Boot를 사용하여 간단하게 폼 값을 넘겨받아

Thymeleaf로 출력하는 예제를 작성해보겠습니다.

 

여담이지만, 저는 프로젝트를 하다가 막히거나 모르는게 있으면

구글링 해서 예제 프로젝트 작성 후 블로그에 정리하는 편입니다.

 

예제를 만들어보기 전에 먼저 Intellij에서 프로젝트를 생성하겠습니다.

좌측 Gradle 누르고 우측 Java 체크하고 생성하면 되겠습니다.

저는 spring-example로 생성했습니다.

본인이 원하는 이름으로 생성하시면 되겠습니다.

 

프로젝트 생성하면 Gradle 빌드툴이 초반에 작업을 하는데요.

여기서 조금만 기다려주면 세팅이 끝납니다!

(네트워크 작업이 이루어지므로 이더넷 연결은 필수입니다.)

 

그 다음, build.gradle 파일을 열어서 스프링 부트 의존성 셋팅을 해줍니다.

참고로 저는 gradle 버전 7.1로 되어 있습니다.

 

gradle 버전 확인하는 방법은 좌측 메뉴에 있는 gradle 폴더에서 gradle-wrapper.properties 파일 열어보면

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

distributionUrl에서 확인 할 수 있습니다.

 

plugins 부분에 다음과 같이 입력해줍니다.

plugins {
    id 'java'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'org.springframework.boot' version '2.4.1'
}

그 다음, dependencies 부분에도 다음과 같이 입력합니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.webjars:bootstrap:4.6.1'
}

단축키 ctrl + shift + O를 누르면 빌드 작업과 함께 설정을 완료합니다. (맥 단축키 : command + shift + i)

 

스프링 부트 의존성 설정을 마쳤으면 자바 패키지를 만들고 서버를 실행해보겠습니다.

저는 패키지를 com.gf.spring으로 했습니다.

 

그 다음, Application 클래스를 만들어줍니다.

package com.gf.spring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

 

자바를 공부하셨다면 코드 어렵지 않죠?

SpringBootApplication 어노테이션 선언하고 main 메소드에서 톰캣 서버 구동한다는 코드입니다.

 

톰캣 서버가 잘 돌아가는 모습을 확인했으면 잠시 끄고 다시 코드를 작성하겠습니다.

 

좌측 메뉴에서 src/main/resources 폴더 아래에 templates 폴더를 만들어줍니다.

그 다음, index.html 파일을 생성하겠습니다.

 

index.html에 아래와 같이 작성해주세요.

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" th:href="@{/webjars/bootstrap/4.6.1/css/bootstrap.min.css}">
    <style>
        @import url(//fonts.googleapis.com/earlyaccess/notosanskr.css);
        html, body {
            font-family: 'Noto Sans KR';
        }
        .container {
            padding: 5% 0;
        }
        .form-group {
            margin: 32px 0;
        }
        .card {
            margin: 10% 0;
        }
        h1 {
            margin: 10% 0;
        }
    </style>
</head>
<body>

<div class="container">
    <h1>Parameter Test</h1>

    <form action="/" method="post">
        <div class="form-group">
            <label for="name">이름</label>
            <input type="text" id="name" name="name" class="form-control">
        </div>
        <button type="submit" class="btn btn-success float-right">제출</button>
    </form>

    <div class="card">
        <div class="card-header">결과</div>
        <div class="card-body">
            <p th:text="${name}"></p>
        </div>
    </div>
</div>

<script th:src="@{/webjars/jquery/3.5.1/jquery.min.js}"></script>
<script th:src="@{/webjars/bootstrap/4.6.1/js/bootstrap.min.js}"></script>
</body>
</html>

부트스트랩과 타임리프로 만든 간단한 예제입니다.

코드 내용은 대충 봐도 어렵지 않습니다.

 

우선 헤더 부분에 있는 코드부터 설명하겠습니다.

타임리프를 사용하기전에 타임리프 문법을 사용한다는 선언을 해줘야 합니다.

그 부분이 html 태그에 명시되어 있습니다.

xmlns:th="http://www.thymeleaf.org"

 

그 다음, link 태그에 th:href 속성으로 방금 전에 의존성 설정한 webjars 라이브러리로 불러온 부트스트랩 경로를 지정하였습니다.

 

body 부분은 간단한 폼 태그로 name 값을 컨트롤러에 넘기고 결과값을 화면에 보여주는 코드입니다.

 

화면을 만들었으니 컨트롤러를 만들어보겠습니다.

 

먼저 자바 패키지를 생성합니다.

저는 com.gf.spring으로 생성했습니다.

 

그 다음 IndexController를 생성합니다.

생성이 되었으면, @Controller 어노테이션을 선언합니다.

@Controller
public class IndexController {

그 다음, index.html로 맵핑하는 메소드를 작성하겠습니다.

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

간단하게 설명하면 http://localhost:8080/ 로 접속하면 thymeleaf가 index.html를 찾아서 화면을 보여주는 코드입니다.

 

그 다음 서버를 실행시켜 화면이 제대로 나오는지 확인해보겠습니다.

실행하면 다음과 같은 화면이 나옵니다.

 

이름 입력칸에 입력받고 제출 버튼을 누르면 컨트롤러가 값을 받아 다시 결과창에 보여주는 화면입니다.

 

그 다음에는 폼 값을 넘겨받을 메소드를 작성해봅시다.

 

@PostMapping("/")
public String test(@RequestParam("name") String name, Model model) {
    model.addAttribute("name", name);
    return "index";
}

RequestParam으로 값을 넘겨 받으면 Model 객체에 name 속성을 설정하고 다시 index로 넘기는 코드입니다.

 

package com.gf.spring;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class IndexController {

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

    @PostMapping("/")
    public String test(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "index";
    }
}

IndexController 전체 코드입니다.

 

자 이제 코드는 완성되었습니다.

제대로 값이 넘어가는지 확인해볼까요?

 

aaa를 입력하고 제출버튼 누르면 결과창에 출력하면 성공입니다.

 

정상적으로 결과창에 출력되었습니다.

 

이렇게 해서 폼 값을 서버에서 넘겨 받아 출력하는 예제 코드를 작성하고 테스트까지 확인했습니다.

사실 원래는 이렇게 테스트를 하는게 아니라 JUnit을 이용해서 테스트하는게 더 정확하지만

화면으로 확인하는게 눈에 보기 편하지요 ㅎㅎ

 

긴 글 읽어주셔서 감사합니다 ^^

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함