본문 바로가기

2023.11.21-2024.05.31

20240307 전자정부(프로젝트 만들기, board, detail)

new> project> Spring Boot > Spring Strater Project

 

 

 

 

Service URL :

Name : 설정하기, demo, web 등을 사용했음

Type : Gradle

Packaging : War (꼭 확인하기, 이렇게 안해서 다시 만들었음)

Java Version : 17(설치 되어있는 자바 버젼 확인하기)

Language : Java

Group : com.mask

package : com.mask.web

선생님

 

 

 

Spring Boot Version 확인해서 Available 에 필요한것 검색하면 된다.

 

 

 

 

Spring Boot DevTools

Lombok

MyBatis Framework

MySQL Driver

Spring Web

(Thymeleaf는 추가 하지 않았음. 하지만 추가 해도 된다. )

 

url로 압축된 파일을 쓸 수 있다.

 

 

 

 

application.properties>jsp경로, DB설정, mapper설정

#	jsp경로
spring.mvc.view.prefix=/WEB-INF/views/ 
spring.mvc.view.suffix=.jsp
#	Mariadb	
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:port/db명
spring.datasource.username=c23c_22
spring.datasource.password=01234567
#	mybatis
mybatis.type-aliases-package=com.mask.web.mybatis 
mybatis.mapper-locations=static/mapper/*.xml
#	포트변경시 
server.port=80

 

datasoutce jsp경로

 

 

 

build.gradle설정 = 의존성 추가하기(jar)

선생님 창

 

 

추가한 것

	//implementation	'javax.servlet:jstl:1.2'//jsp
	implementation 'jakarta.servlet:jakarta.servlet-api' // boot 3이상에서 
	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

 

 

 

 

jsp 폴더,파일 만들기

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>인덱스</title>
</head>
<body>
	<h1>index</h1>
</body>
</html>

 

 

 

컨트롤러 생성

선생님

 

 

선생님

package com.mask.web.controller;

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

@Controller
public class IndexController {

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

 

 

 mapper 생성

 

 

 

서버에서 보내온 메시지 띄우기

 

 

 

인덱스 컨트롤러

package com.mask.web.controller;

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

@Controller
public class IndexController {

	@GetMapping("/")
	public ModelAndView index() {
		ModelAndView mv = new ModelAndView("index");
		mv.addObject("test", "테스트 입니다.");
		return mv;
	}
}

 

 

 

인덱스jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>인덱스 입니다.</h1>
	서버에서 보내온 메시지 : ${test }
</body>
</html>

서버에서 보내온 메시지

 

 

 

 

리스트 담아서 보내기

 

인덱스 서비스 컨트롤러 만들기

package com.mask.web.service;

import org.springframework.stereotype.Service;

@Service
public class IndexService {

}

 

 

컨트롤러와 연결

	@Autowired
	private IndexService indexService;

 

 

 

인덱스 서비스 dao 만들기 (인터페이스)

package com.mask.web.dao;

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

@Repository
@Mapper
public class IndexDAO {

	
}

 

 

서비스와 연결

 

인덱스 컨트롤러 >리스트 담아서 보내기

 

 

인덱스서비스

package com.mask.web.service;

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

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

import com.mask.web.dao.IndexDAO;

@Service
public class IndexService {

	@Autowired
	private IndexDAO indexDAO;

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

 

 

인덱스DAO

package com.mask.web.dao;

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

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

@Repository
@Mapper
public interface IndexDAO {

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

	
}

 

 

인덱스 매퍼

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mask.web.dao.IndexDAO">

   <select id="boardList" resultType="Map">
      SELECT board_no, board_title,
      board_write, board_date, board_count, comment
      FROM boardview LIMIT 0,
      10
   </select>

</mapper>

경로 잘 지정해주기, 나는 자꾸 짝꿍꺼 경로 복사해와서 안열린다. 화나 > mask인데 짝꿍 이름으로 경로 지정함

 

 

 

 

 

 

 

jstl 사용해서 리스트 출력하기

 

 

 

 

 

 

STS > spring initializt 에서 만들기

 

 

 

 

 

 

MySQL Driver가 없어서 MariaDB Driver 추가

MyBatis Framework

Thymeleaf

Lombok

Spring Web

Spring Boot DevTools

 

>generate

 

 

 

다운로드 받은 파일 전자정부 워크스페이스에 압축 풀기

 

 

 

import > Gradle

 

 

설정가져오기

 

선생님

# DB
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://guro.wisejia.com:3308/c23c_22
spring.datasource.username=c23c_22
spring.datasource.password=01234567

# mybatis
mybatis.type-aliases-package=com.mask.web.mybatis
# 페이지 구동되면 아래 static 하위 폴더들이 먼저 실행 됨
mybatis.mapper-locations=static/mapper/*.xml 

# 포트변경시
server.port=80

 

 

 

 

bulid.gradle > 처음에 다 추가해서 줘서 확인만 했음

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

 

 

 

 

controller 패키지, 클래스 생성

 

package > com.myhand.web.controller

class > IndexController

어노테이션 설정> @Controller

package com.mask.web.controller;

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

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

 

 

src/main/resources>templates >HTML파일 만들기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>인덱스</title>
</head>
<body>
	<h1>인덱스다~</h1>
</body>
</html>

 

 

 

구동하기

자바어플리케이션

 

웹어플리케이션 실행>프로젝트명 따라서 실행

 

 

 

데이터 보내기

 

 

IndexController

 

 

IndexController

package com.mask.web.controller;

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","테스트입니다.");
		
		return "index";
	}
}

 

 

index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>인덱스</title>
</head>
<body>
	<h1>인덱스다~</h1>
	[[${test}]]<br>
	<th:block th:text="${test}"></th:block>
</body>
</html>

 

 

 

 

 

boardList 출력하기

controller>service>dao>mapper 까지

 

IndexController > list 만들어서 보내기

 

IndexController > service와 연결

	@Autowired
	private IndexService indexService;

 

 

	@GetMapping("/")
	public String index(Model model) {
		model.addAttribute("test", "텍스트입니다");

		List<Map<String, Object>> list = indexService.boardList();
		model.addAttribute("boardList", list);

		return "index";
	}

 

 

 

com.mask.web.service 패키지, IndexService 클래스 생성

 

어노테이션으로 dao와 연결

	@Autowired
	private IndexDAO indexDAO;

 

 

 

IndexService > boardList

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

 

 

 

com.mask.web.dao패키지, IndexDAO 인터페이스 생성

@Repository
@Mapper
public interface IndexDAO {

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

 

 

 

indexMapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mask.web.dao.IndexDAO">

    <!-- <select id="boardList" resultType="Map"> SELECT board_no, board_title, board_write, board_count, comment, board_date FROM boardview LIMIT 0, 10 </select> -->

   <select id="boardList" resultType="Map">
      SELECT board_no, board_title,
      board_write, board_date, board_count, comment
      FROM boardview LIMIT 0,10
   </select>

 

 

index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h1>인덱스입니다~~~</h1>

<hr>

   <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>
</body>
</html>

 

 

 

 

 

 

디테일 만들기

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <h1>인덱스입니다~~~</h1>

<hr>

   <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>
            	<a th:href="@{/detail(no=${row.board_no})}" th:text="${row.board_title}"></a>
            </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>
</body>
</html>

 

 

 

no가 온다

 

 

 

선생님 컨트롤러

 

 

선생님 매퍼

 

 

 

 

 

 

 

디테일jsp

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   [[${detail.board_no}]]
   [[${detail.board_title}]]
   <th:block th:utext="${detail.board_content}"></th:block> <!-- th:utext 이미지 출력 -->
</body>
</html>