반응형
스프링 레거시 : 세팅을 다시 해줘야한다.
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"%>
다시 프로젝트 우클릭 설정 - server runtime 에서 톰캣 선택후 적용하기.
반응형
'개발 공부 Today I Learned' 카테고리의 다른 글
[국비 73일차 TIL] 전자정부 프레임워크 스프링 notice write login DB (0) | 2024.03.08 |
---|---|
[국비 72일차 TIL] 전자정부 프레임워크 스프링 프로젝트 (0) | 2024.03.07 |
[국비 70일차 TIL] 쿠키 & 세션, 게시판 ip 검색 (0) | 2024.03.05 |
[국비 69일차 TIL] 관리자 페이지 게시글 관리 (0) | 2024.03.04 |
[국비 68일차 TIL] ID 중복검사, 검색창 생성 (0) | 2024.02.29 |
댓글