본문 바로가기
개발 공부 Today I Learned

[국비 71일차 TIL] 스프링 레거시 & 스프링 부트 설정, 타임리프

by 개발자신입 2024. 3. 6.
반응형

스프링 레거시 : 세팅을 다시 해줘야한다.

1. JAVA 17버전을 다운로드 및 설치

2. 기존의 11버전은 삭제

3. 시스템 환경변수 수정 : JAVA_HOME에서 jdk-17로 변경해줌


Spring 4.21.0

IndexController.java

import java.util.ArrayList;
import java.util.List;

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

@Controller
public class IndexController {

    @GetMapping("/index")
    public String index(Model model) {
        model.addAttribute("test", "hello, index");
        List<Integer> list = new ArrayList<>();
        for (int i = 1; i < 15; i++) {
        list.add(i);
        }
        model.addAttribute("list", list);
        return "index";
    }
}

jsp 파일 사용하기 위해 마켓플레이스에서 프로그램 설치


index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
    <h1>Index!!!!!!!!!!!!!!!!</h1>
    ${test }
    ${list }
</body>
</html>

 

jakarta 코드를 build.gradle 에 추가

dependencies {

implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
// implementation 'javax.servlet:jstl:1.2'//jsp

//// 아래의 3개 jakarta 서블릿 추가 ////
implementation 'jakarta.servlet:jakarta.servlet-api'
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'
////////////////////////////////////////////////////////////////

implementation "org.apache.tomcat.embed:tomcat-embed-jasper"//tomcat사용하기
implementation 'org.mariadb.jdbc:mariadb-java-client:3.0.8'//DB
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
}

index.jsp

c태그의 uri를 jakarta로 변경

<%@ taglib prefix="c" uri="jakarta.tags.core"%>

IndexController.java

@Autowired
private TestService testService;

@Controller
public class IndexController {

    @Autowired
    private TestService testService;

    @GetMapping("/index")
    public String index(Model model) {
        model.addAttribute("test", "green index");

        List<BoardDTO> list = testService.boardList(;)

        model.addAttribute("list", list);
        return "index";
    }
}

-> TestService 생성해주기.

-> BoardDTO, boardList() 생성해줘야함.

BoardDTO 생성

(패키지 : web.dto)

package com.-----.web.dto;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class BoardDTO {
    private int board_no, board_count, comment;
    private String board_title, board_write, board_date;
}

-> boardList() 생성

TestService.java

@Service
public class TestService {

    @Autowired
    private TestDAO testDAO;

    public List<BoardDTO> boardList() {
        return null;
    }
}

-> TestDAO를 인터페이스로 생성

-> boardList()를 DAO 인터페이스에 생성

TestDAO 인터페이스

@Mapper추가

@Repository
@Mapper
public interface TestDAO {

    List<BoardDTO> boardList();
}

application.properties

mybatis의 패키지 경로를 mybatis에서 dto로 변경

* jsp path에서 .jsp 쓰는 이유 = jsp를 쓰기 위해서 경로 설정

# mybatis
mybatis.type-aliases-package=com.-----.web.dto
mybatis.mapper-locations=static/mapper/*.xml

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="jakarta.tags.core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
    <h1>Index!!!!!!!!!!!!!!!!</h1>
    ${test }<br>
    <br>
    <table>
        <tr>
            <th>번호</th>
            <th>제목</th>
            <th>글쓴이</th>
            <th>날짜</th>
            <th>조회수</th>
        </tr>
    </table>
    <c:forEach items="${list }" var="row">
    <tr>
        <td>${row.board_no }</td>
        <td>${row.board_title }</td>
        <td>${row.board_write }</td>
        <td>${row.board_date }</td>
        <td>${row.board_count }</td>
    </tr>
    </c:forEach>
</body>
</html>

프로젝트 다시 만들어보기

New Spring Starter Project

  • Spring Boot DevTools
  • Lombok
  • Mybatis Framework
  • MariaDB Driver
  • Thymeleaf
  • Spring Web

프로젝트 생성 시 선택사항

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // 타임리프
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
    annotationProcessor 'org.projectlombok:lombok'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.3'
}

application.properties

# Mariadb
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://--------------
spring.datasource.username=------------
spring.datasource.password=--------

# mybatis
mybatis.type-aliases-package=com.-----.web.dto
mybatis.mapper-locations=static/mapper/*.xml

# 포트변경시
server.port=80

IndexController.java

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class IndexController {

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

index.html

경로 : src/main/resources - templates - index.html

thymeleaf로 생성 시, index.html으로 간단하게 만들 수 있다. (뭐가 달라..?)


spring boot + Thymeleaf 연동하기

thymeleaf란?

  • 템플릿 엔진
  • 'th:속성'

IndexController.java

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

@Controller
public class IndexController {

    @GetMapping("/index")
    public String index(Model model) {
        model.addAttribute("text","컨트롤러에서 보냅니다.");
        return "index";
    }
}

index.html

<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>인덱스스스스스스스</title>

<script th:inline="javascript">
    let txt = [[${text}]];
</script>
</head>

<body>
    <h1>인덱스입니다</h1>
    <span th:text="${text}">출력</span>
    <hr>

    <!-- 단순 출력의 용도라면 [[ ]] -->
    [[${text}]];

    <ul th:each="string : ${list}">
        <li>[[${string}]]</li>
        <!-- 위, 아래 문장은 같은 결과임 -->
        <li th:text="${string}"></li>
    </ul>

    <!-- 기본 반복문 -->
    <ul th:each="string : ${list}">
        <li th:text="${string}"></li>
    </ul>

    <!-- 추가 반복문 (반복 상태 출력) -->
    <ul th:each="name, i : ${list}">
        <li>[[${i.index }]] / [[${i.size }]] / [[${name }]] </li>
    </ul>

</body>
</html>

타임리프 기본 태그

 

 IndexDAO 인터페이스로 생성

package com.----.web.dao;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Repository
@Mapper

public interface IndexDAO {

	List<Map<String, Object>> boardList();
}

 IndexController.java

@Controller
public class IndexController {
	
	@Autowired
	private IndexService indexService;

	@GetMapping("/index")
	public String index(Model model) {
		model.addAttribute("text","컨트롤러에서 보냅니다.");
		List<String> list = new ArrayList<>();
		for (int i = 0; i < 10; i++) {
			list.add("홍길동" + i);
		}
		model.addAttribute("list", list);
		
		List<Map<String, Object>> boardList = indexService.boardList();
		model.addAttribute("list", boardList);
		
		return "index";
	}
}

IndexService.java

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.green.web.dao.IndexDAO;

@Service
public class IndexService {
	
	@Autowired
	private IndexDAO indexDAO;

	public List<Map<String, Object>> boardList() {
		return indexDAO.boardList();
	}
}

indexMapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.green.web.dao.IndexDAO">
	<select id="boardList" resultType="Map">
		SELECT board_no, board_title, board_write, board_count, comment
		FROM boardview
		LIMIT 0, 10
	</select>
</mapper>

 

★ 이유없이 안될 때는 꼭 clean을 하자...^^

index.html

	<table>
		<thead>
			<tr>
				<th>번호</th>
				<th>제목</th>
				<th>글쓴이</th>
				<th>날짜</th>
				<th>조회수</th>
			</tr>
		</thead>
		<tbody>
			<tr th:each="row : ${boardList}">
				<td th:text="${row.board_no}"></td>
				<td th:text="${row.board_title}"></td>
				<td th:text="${row.board_write}"></td>
				<td th:text="${row.board_date}"></td>
				<td th:text="${row.board_count}"></td>
			</tr>
		</tbody>
	</table>

	<!-- 변수 선언 -->
	<th:block th:with="name=홍길동" th:text="${name}"></th:block>

	<th:block th:with="name=김길동">
		<div th:text="${name}"></div>
	</th:block>
	
	<div th:text="${t}">컨트롤러에 시간 나오게 했음.</div>
	
	<div th:text="${#temporals.day(t)}">Day</div>
	<div th:text="${#temporals.month(t)}">Month</div>
	<div th:text="${#temporals.year(t)}">YEAR</div>

	<div th:text="${#temporals.hour(t)}">시</div>
	<div th:text="${#temporals.minute(t)}">분</div>
	<div th:text="${#temporals.second(t)}">초</div>


	<!-- "| 문자열 연결 |" -->
	<div th:with="id=hello" th:text="|${id}님 반갑습니다!|"></div>
	<hr>
	
	<!-- 참/거짓으로 결과값이 나옴. -->
 	<div th:text="1 gt 2">gt는  〉 </div> 
	<div th:text="1 lt 2">lt는 〈 </div>
	<div th:text="1 ge 2">ge는 〉= </div>
	<div th:text="1 le 2">le는〈= </div>
	<div th:text="1 ne 2">ne은 != </div>
	<div th:text="1 eq 2">eq는 == </div>
	
	<!-- 삼항연산자 -->
	<div th:text="1 eq 2 ? true : false"></div>
	<hr>
    
    <div th:text="${session}"></div>
    <div th:text="${param.no}"></div>
	
	<!-- Link -->
	<a href="naver">http://www.naver.com</a>
	<a th:href="@{/main}">main</a>
	<a th:href="@{/detail(no=205)}">상세보기</a>  <!-- /detail?no=205 -->
	<a th:href="@{/detail(no=205, page=5)}">상세보기</a>  <!-- /detail?no=205&page=5 -->
	
</body>
</html>

 


index.jsp

맨 위에 <% 에서 빨간줄 오류 나는 거 고치는 방법

<!-- <% 에서 빨간줄 에러가 생김 -->

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="jakarta.tags.core"%>

Download external ---- 체크하기
프로젝트 우클릭 설정
윈도우- 설정- runtime Environments - Add로 톰캣9 추가하기

 

다시 프로젝트 우클릭 설정 - server runtime 에서 톰캣 선택후 적용하기.


 

반응형

댓글