본문 바로가기

2023.11.21-2024.05.31

20240311 전자정부(DBeaver 24.0.0 설정, 로그인 설정, 메뉴 설정)

 

 

 

 

 

 

>이클립스 마켓에서 설치가 되지 않아서 브라우저에서 설치

 

 

로그인 설정

 

 

IndexService > write

 

	public int write(Map<String, Object> map) {
		//여러분 db에 있는mid를 넣어주세요
		
		map.put("mid", util.getSession().getAttribute("mid"));
		
		//ip도
		map.put("ip", util.getIP());
		return indexDAO.write(map);
	}

 

 

 

 

 

로그인안했으면 로그인 페이지로, 로그인했다면 아래 문장으로

 

freeboard.html

<button type="button" th:with="cate=${board[0].mtcate}" 
	class="btn btn-primary" th:onclick="|location.href='@{/write(cate=${cate})}'|">글쓰기</button>
			
			
<button type="button" class="btn btn-primary" 
	th:onclick="|location.href='@{/write(cate=${param.cate})}'|">글쓰기</button>

 

 

 

 

IndexCtroller >write

 

@PostMapping

 

 

 

 

 

글쓰고 freeboard창으로 이동하기

>return 값을 "write" 에서  "redirect:/freeboard"으로 수정 / 아래와 같이 return "redirect:/" + url; 이런 방식으로도 가능

	@PostMapping("/write")
	public String write(@RequestParam Map<String, Object> map, HttpServletRequest request) {
		//20240311 로그인검사
		//로그인안했으면 로그인 페이지로, 로그인했다면 아래 문장으로
		String ip = util.getIP();
		int result = indexService.write(map);
		System.out.println(result);

		return "redirect:/freeboard";
	}

 

 

	@PostMapping("/write")
	public String write(@RequestParam Map<String, Object> map, HttpServletRequest request) {
		// 20240311 로그인검사
		// 로그인안했으면 로그인 페이지로, 로그인했다면 아래 문장으로
		String ip = util.getIP();
		if (util.getSession().getAttribute("mid") != null) {

			int result = indexService.write(map);
			return "write";
		}
		String url = "freeboard";
		return "redirect:/"+url;
	}

 

 

 

 

AdminController 생성

package com.mask.web.controller;

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

@Controller
@RequestMapping("/admin")
public class AdminController {

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

 

 

src/main/resources> templates.admin 생성

 

 

 

 

templates.admin> menu.html 생성

package com.mask.web.controller;

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

@Controller
@RequestMapping("/admin")
public class AdminController {

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

 

 

경로 : http://localhost/admin/menu

http://localhost/admin/menu 이동

 

 

 

 

 

DB - 새로생성 - 테이블 추가

이름 : menu

 

 

 

 

열추가 : cate, catename, comment

 

cate번호 중복 안되게 UNIQUE 설정해준다.

 

 

데이터 > 추가하기>행추가

 

 

메뉴 만드는 쿼리문

CREATE TABLE `menu` (
   `cate` INT(11) NULL DEFAULT NULL,
   `catename` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
   `comment` VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
   UNIQUE INDEX `cate` (`cate`) USING BTREE
)
COMMENT='화면 상단에 보여줄 메뉴\r\n멀티보드를 활용해서 mtcate 값만 바꿔줄겁니다.\r\n'
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;

 

 

 

 

AdminController> menu 서비스와 연결

	@GetMapping("/menu")
	public String menu(Model model) {
		List<Map<String, Object>> menu = adminService.menu();
		model.addAttribute("menu", menu);
		return "admin/menu";
	}

 

 

AdminService 생성

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.AdminDAO;

@Service
public class AdminService {


}

 

 

 

AdminController  >@Autowired 추가

	@Autowired
	private AdminService adminService;

 

 

 

AdminService > menu 만들기 dao와 연결

	public List<Map<String, Object>> menu() {
		return adminDAO.menu();
	}

 

 

AdminDAO interface 생성

package com.mask.web.dao;

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

@Repository
@Mapper
public interface AdminDAO {

}

 

 

 

AdminService> @Autowired로 dao와 연결

	@Autowired
	private AdminDAO adminDAO;

 

 

 

 

adminMapper생성

<?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.AdminDAO">
   <select id="menu">
   		SELECT cate, catename, comment
   		FROM menu
     
   </select>

</mapper>

 

 

 

menu.html(출력해보기)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>메뉴 페이지 입니다. </h1>
	여기서 메뉴에 보여줄 순서를 지정할 수 있습니다. 
	현 등록되어있는 메뉴를 여기에 노출합니다 .
	
	[[${menu }]]
</body>
</html>

아 중괄호 진짜 기억해라 계속 오류나잖아./

 

 

menu 불러오기 > 온갖곳에 메뉴추가해주기

 

 

메뉴불러오기 추가

		// 메뉴 불러오기
		List<Map<String, String>> menu = indexService.menu();
		model.addAttribute("menu", menu);
		return "index";

 

 

IndexController > index

	@GetMapping({ "/index", "/" }) // /index 하고 /하고 같이 처리합니다
	public String index(Model model) {
		// 메뉴 불러오기
		List<Map<String, String>> menu = indexService.menu();
		model.addAttribute("menu", menu);
		return "index";
	}

 

 

 

 

IndexController > freeboard

	// 멀티보드 20240308
	@GetMapping("/freeboard")
	public String freeboard(@RequestParam(value = "cate", defaultValue = "1") int cate, Model model) {
	      // 메뉴 불러오기
	      List<Map<String, String>> menu = indexService.menu();
	      model.addAttribute("menu", menu);
	      
	      List<Map<String,Object>> board = indexService.freeboard(cate);
	      model.addAttribute("board", board);
	      return "freeboard";
	   }

 

 

 

IndexController > detail

	// 상세보기
	@GetMapping("/detail")
	public String detail(@RequestParam("no") int no, Model model) {
		// 메뉴 불러오기
		List<Map<String, String>> menu = indexService.menu();
		model.addAttribute("menu", menu);
		
		Map<String, Object> detail = indexService.detail(no);
		model.addAttribute("detail", detail);
		return "detail";
	
	}

 

 

IndexController > notice

	@GetMapping("/notice")
	public String notice(@RequestParam(value = "cate", defaultValue = "2") int cate, Model model) {
		// 메뉴 불러오기
		List<Map<String, String>> menu = indexService.menu();
		model.addAttribute("menu", menu);
		
		List<Map<String, Object>> board = indexService.freeboard(cate);
		model.addAttribute("board", board);
		return "notice";
	}

 

 

 

IndexController > write

	public String write(Model model) {
		// 메뉴 불러오기
		List<Map<String, String>> menu = indexService.menu();
		model.addAttribute("menu", menu);
		// 로그인 검사
		return "write";
	}

 

 

 

IndexController > postUpdate

	@GetMapping("/postUpdate")
	public String postUpdate(@RequestParam("no") int no, Model model) {
		if (util.getSession().getAttribute("mid") != null) {
			// 메뉴 불러오기
			List<Map<String, String>> menu = indexService.menu();
			model.addAttribute("menu", menu);

			Map<String, Object> update2 = indexService.detail(no);
			model.addAttribute("update", update2);
			return "update";
		} else {
			return "redirect:/login";
		}
	}

 

 

추가부분

		//메뉴 불러오기
		List<Map<String, String>> menu = indexService.menu();
		model.addAttribute("menu", menu);

 

 

IndexService > menu

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

 

 

IndexDAO

List<Map<String, String>> menu();

 

 

인덱스 매퍼

	<select id="menu" resultType="Map">
		SELECT cate, catename
		FROM menu
	</select>

 

 

 

 

메뉴

 

		<nav class="navbar navbar-expand-lg navbar-light fixed-top shadow-sm" id="mainNav">
            <div class="container px-5">
                <a class="navbar-brand fw-bold" href="/">Start Bootstrap</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                    Menu
                    <i class="bi-list"></i>
                </button>
                <div class="collapse navbar-collapse" id="navbarResponsive">
                    <ul class="navbar-nav ms-auto me-4 my-3 my-lg-0">
                    
                    	<th:block th:each="m : ${menu}">
                        <li class="nav-item"><a class="nav-link me-lg-3" href="|/freeboard?cate=${m.cate}|">[[${m.catename }]]</a></li>
                      
                        </th:block>
                        <th:block th:if="${session.mid ne null}">
                        <li class="nav-item"><a class="nav-link me-lg-3" href="/myInfo">[[${session.mname}]]님</a></li>
                        <li class="nav-item"><a class="nav-link me-lg-3" href="/logout">logout</a></li>
                        </th:block>
                        <th:block th:unless="${session.mid ne null}">
                        <li class="nav-item"><a class="nav-link me-lg-3" href="/login">login</a></li>
                        </th:block>
                    </ul>
                </div>
            </div>
        </nav>

 

<th:block th:each="m : ${menu}">
	<li class="nav-item"><a class="nav-link me-lg-3" href="|/freeboard?cate=${m.cate}|">[[${m.catename }]]</a></li>

 

 

로그인 전 메뉴

 

로그인 후 메뉴

 

 

 

AdminController

 

 

admin> 메뉴html >table ,form 추가

	<table border="1">
		<tr>
			<th>카테고리번호</th>
			<th>카테고리이름</th>
			<th>비고</th>
		</tr>
		<tr th:each="m : ${menu}">
			<td th:text="${m.cate}"></td>
			<td th:text="${m.cate}"></td>
			<td th:text="${m.catename}"></td>
			<td th:text="${m.comment}"></td>
		</tr>
	</table>
	
	<form action="./menu" method="post">
		<input type="number" name="cate" placeholder="카테고리 번호">
		<input type="text" name="catename" placeholder="카테고리 이름">
		<input type="text" name="comment" placeholder="실명을 적어주세요">
		<button type="submit">추가하기</button>
		
	</form>

>cate가 두개여서 출력될때 표가 이상하게 나온다

 

 

AdminController

 

 

	@GetMapping("/menu")
	public String menu(Model model) {
		List<Map<String, Object>> menu = adminService.menu();
		model.addAttribute("menu", menu);
		return "admin/menu";
	}
	@PostMapping("/menu")
	public String menu(Map<String, Object> map) {
		System.out.println(map);
		return "redirect:/admin/menu";
	}

 

잘못된 옠ㅋㅋㅋㅋㅋㅋ

 

 

 

 

	@PostMapping("/menu")
	public String menu(@RequestParam Map<String, Object> map) {
		System.out.println(map);
		return "redirect:/admin/menu";
	}

> 콘솔창에 오지 않음, 와야한다^^

 

 

 

AdminController > @PostMapping("/menu")

	@PostMapping("/menu")
	public String menu(@RequestParam Map<String, Object> map) {
		//System.out.println(map);
		adminService.menuInsert(map);
		return "redirect:/admin/menu";
	}

 

 

 

 

AdminService > menuInsert

	public void menuInsert(Map<String, Object> map) {
		adminDAO.menuInsert(map);
		
	}

 

 

 

AdminDAO

void menu(Map<String, Object> map);

 

 

adminMapper

	<insert id="menutInsert" parameterType="Map">
		INSERT INTO menu VALUES(#{cate},#{catename}, #{comment})
	</insert>

 

 

 

 

 

 

 

 

 

 

 

application.properties 에러 페이지 추가

#에러페이지
server.error.whitelabel.enabled=true
server.error.include-stacktrace=always
server.error.include-exception=true

 

 

 

ErrorController 생성

package com.mask.web.controller;

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

@Controller
public class ErrorController {

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

 

 

 

 

error.html 생성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>Error</h1>
	<h3>문제가 발생했습니다. </h3>
</body>
</html>

 

 

 

 

 

삭제하기

 

 

 

수정하기

html에서 수정

 

컨트롤러~매퍼까지 생성하지 않음 > detail과 똑같이 동작하기 때문에 재활용

	@PostMapping("/postUpdate")
	public String postUpdate(@RequestParam("no") int no, Model model) {
		//model에 싣기, detail과 똑같이 동작하기 때문에 재활용
		model.addAttribute("update", indexService.detail(no));
		
		return "update";
	}