본문 바로가기

2023.11.21-2024.05.31

20240227 스프링(공지 게시판)

내일 할 것.

*공지 게시판  notice

NoticeController

NoticeService>2

NoticeServiceImpl

NoticeDAO

NoticeDTO >1

notice-mapper.xml

 

*dto에 들어갈 내용 >1

int nno,ndel,nlike,nread

String ntitle,ncontent,ndate

*DB >2

table name : notice

column: nno(int, auto,PK),ndel(int1, 기본1), nread(int,기본1), nlike(int, 기본1),ntitle(VARCHAR 50),ncontent( VARCHAR 500), ndate(datetime, current timestamp)

 

NoticeSerive에 들어갈 추상메소드 >3 일단 서비스만 만들기

public List<NoticeDTO> noticeList();

public NoticeDTO detail(int no);

public int noticeWrite(NoticeDTO);

public int noticeDel(int no);

public int noticeUpdate(NoticeDTO);

 

 

데이터베이스 만들기

 

 

NoticeDTO >데이터베이스 비교해서 작성, 아웃라인으로 롬복 잘 되었는지 확인

 

 

 

NoticeService>인터페이스로 만들기

package org.mask.service;

import java.util.List;

import org.mask.dto.NoticeDTO;

public interface NoticeService {

	public List<NoticeDTO>noticeList(int startPpageNo);
	public NoticeDTO detail(int no);
	public int noticeWrite(NoticeDTO dto);
	public int noticeDel(int no);
	public int noticeUpdate(NoticeDTO dto);
	public int totalRecordCount();

}

 

 

NoticeServiceImpl 만들기

new> class> 인터페이스> Add 누르기> NoticeService 선택 >finish

 

 

 

 

NoticeServiceImlp

package org.mask.service;

import java.util.List;

import org.mask.dto.NoticeDTO;

public class NoticeServiceImlp implements NoticeService {

	@Override
	public List<NoticeDTO> noticeList() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public NoticeDTO detail(int no) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int noticeWrite(NoticeDTO dto) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int noticeDel(int no) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int noticeUpdate(NoticeDTO dto) {
		// TODO Auto-generated method stub
		return 0;
	}

}

 

 

상속시켜주기 >extends AbstractService

@Service("noticeServic") 적어주기 (중요)

package org.mask.service;

import java.util.List;

import org.mask.dto.NoticeDTO;
import org.springframework.stereotype.Service;
@Service("noticeService")
public class NoticeServiceImlp extends AbstractService implements NoticeService {

	@Override
	public List<NoticeDTO> noticeList() {
		return null;
	}

	@Override
	public NoticeDTO detail(int no) {
		return null;
	}

	@Override
	public int noticeWrite(NoticeDTO dto) {
		return 0;
	}

	@Override
	public int noticeDel(int no) {
		return 0;
	}

	@Override
	public int noticeUpdate(NoticeDTO dto) {
		return 0;
	}

}

 

 

 

>>오류나는 2가지

13번줄에 오류가 나는 이유는 보내느 쪽과 받는 쪽이 달라서>

오버라이드 없애주면 부모쪽에서 받는게 아니기 때문에 오류가 사라진다.

 

 

 

10번줄에 오류가 나는 이유는 아예 다른 함수를 적었기 때문에

노티스 서비스쪽에서 존재하는 메소드가 아니기 때문에 마저 완성을 해라.> 밑줄에 마우스 올리면 새로운 메소드 형성으로 된다.

 

 

 

 NoticeDAO> 만들때 추가 클래스 해서 상속해주면 편하다.

 

 

package org.mask.dao;

import org.springframework.stereotype.Repository;

@Repository
public class NoticeDAO extends AbstractDAO {

}

 

 

NoticeServiceImpl > 어노테이션 추가

 

 

NoticeController >어노테이션  @Resource 사용해서 연결

 

package org.mask.controller;

import java.util.List;

import javax.annotation.Resource;

import org.mask.dao.NoticeDAO;
import org.mask.dto.NoticeDTO;
import org.mask.service.NoticeService;
import org.mask.util.Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;

@Controller
public class NoticeController {

	@Resource(name = "noticeService")
	private NoticeService noticeService;

	@Autowired
	private Util util;

 

 

NoticeService(Interface)와 연결

package org.mask.controller;

import javax.annotation.Resource;

import org.mask.service.NoticeService;
import org.springframework.stereotype.Controller;

@Controller
public class NoticeController {
	
	@Resource(name="noticeService")
	private NoticeService noticeService;
	
	//2024.02.27 요규사항 확인  psd

}

 

 

 

NoticeController>notice 만들어주기

@Controller
public class NoticeController {
	
	@Resource(name="noticeService")
	private NoticeService noticeService;
	
	//2024.02.27 요규사항 확인  psd
	@GetMapping("/notice")
	public String notice() {
		return "notice"; //......./views/notice.jsp
	}

> jsp 와 연결되는지 확인하는 작업, 디비를 연결해주지 않고 화면에서 넘어가는지 확인

 

 

보드jsp복사해서 노티스jsp 만들기

500에러는 로직이 깨져서 그런것

에러나는 부분은 페이징 부분 없는데 찍으라해서 오류, 페이징 제거(나중에 만들기)

너무 길어서 jsp는 안넣음

 

 

 

 

notice.jsp

최상단에 추가하기 >fn기능 추가(펑션태그)

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

 

 

 

이부분은 못따라가서 사진으로 저장 >fn 으로 길이 비교 시켜준다 ,사이즈 같은 것

 

 

부등호 넣어주면 트루라고 뜬다.

 

아래 테이블 태그 내용 삭제하기

 

 

 

이렇게 "${fn:length(list } > 0 "> 넣으면 when이 뜨는지 otherwise 뜨는지 확인

 

>참이기 때문에 여기서는 테이블 출력으로 나온다.

 

 

이렇게 빼면

 

화면에 출력할 값이 없습니다.로 출력

 

최상단에서 임포트 된거 삭제

<%@page import="java.sql.Array"%>
<%@page import="java.util.List"%>

 

이렇게 남기기

 

NoticeList 만들기

이부분도 수업 다 끝나고 페이징 만들면서 변경된 부분이 있어서 사진으로 대체

NoticeController> notice

	//2024.02.27 요규사항 확인  psd
	@GetMapping("/notice")
	public String notice() {
		noticeService.noticeList();
		return "notice"; //......./views/notice.jsp
	}

 

 

이렇게 만들면 노티스 서비스에게 일을 시켜서 값을 가져오는것

 

 

 

모델을 써서 쉽게 가면 된다.

() 에 모델 쓰고 아래 addAttribute 써주기

 

NoticeServiceImpl>noticeList 생성

리턴값에 적기>DAO에게 일시켜줘라

 

NoticeDAO > noticeList

 

 

notice-mapper 만들기(rest 복사해서 쓰기)

 

 

 

 

데이터 베이스에 올려보기> 쿼리문으로 쓰면 나중에 쓸 수 있으니까 적어보자

 

 

데이터에 저장되었으면 된다.

notice 데이터

 

notice.jsp 수정

>이렇게 반복되니까 foreach문으로 돌리자

모르겠으니까 board에 것을 참고해보자

 

 

board.jsp

 

 

notice.jsp적어주기

                   <h2 class="section-heading text-uppercase">공지사항</h2>
                </div>
                <div class="row text-center">
               
                <c:choose>
                <c:when test="${fn:length(list ) gt 0}">
                	<table>
                		<thead>
                			<tr>
                				<th>번호</th>
                				<th>제목</th>
                				<th>날짜</th>
                				<th>읽음</th>
                			</tr>
                		</thead>
         		          <c:forEach items="${list }" var="row">
                			<tr>
                				<td>${row.nno }</td>
                				<td>${row.ntitle }</td>
                				<td>${row.ndate }</td>
                				<td>${row.nread }</td>
                			</tr>
							</c:forEach>
                		</tbody>
                		</table>
                </c:when>
               <c:otherwise>
                  <h1>공지사항이 없습니다.</h1>
               </c:otherwise>
            </c:choose>

 

 

이런식으로 나온다.

 

 

mybatis-config.xml 설정해주기

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-config.dtd">
  
  <configuration>
  	<typeAliases>
  		<typeAlias type="java.lang.Integer" alias="integer"/>
  		<typeAlias type="org.mask.dto.BoardDTO" alias="boardDTO"/>
  		<typeAlias type="org.mask.dto.WriteDTO" alias="writeDTO"/>
  		<typeAlias type="org.mask.dto.CommentDTO" alias="commentDTO"/>
  		<typeAlias type="org.mask.dto.LoginDTO" alias="loginDTO"/>
  		<typeAlias type="org.mask.dto.MemberDTO" alias="memberDTO"/>
  		<typeAlias type="org.mask.dto.GalleryDTO" alias="galleryDTO"/>
  		<typeAlias type="org.mask.dto.NoticeDTO" alias="notice"/>
  	</typeAliases>
  </configuration>

 

별명 가져다가 사용하는 사진

 

 

 

 

 

공지글쓰기> 어드민에서 관리해준다. 

 

NoticeController > noticeWrite 만들기(나중에 관리자 화면으로 옮겨줄 것)

	// 2024.02.07 공지 글쓰기> 어드민 관리자 화면에서
	@GetMapping("/admin/noticeWrite")
	public String noticeWrite() {
		return "admin/noticeWrite";

 

관리자 폴더>노티스롸잇만들기

 

호출 : 어드민/노티스롸이트 방식으로 한다.

 

 

 

noticeWrite.jsp> 기능적으로 구현할 수 있겠만 구성 //글써지면 된다.

 

 

> /admin/noticeWrite(경로) 이렇게 들어가면 된다.

 

 

noticeWrite.jsp> form태그에 post타입으로 받는다.

	<form action="./admin/noticeWrite" method="post">
		<input name="ntitle">
		<textarea name="ncontent"></textarea>
		<button type="submit">공지 쓰기</button>

 

 

NoticeController> post타입 만들어준다.

@PostMapping("/admin/noticeWrite")

 

	@PostMapping("/admin/noticeWrite")
	public String noticeWrite(NoticeDTO dto) {
		System.out.println(dto.getNtitle());
		System.out.println(dto.getNcontent());
		return "redirect:/notice";
	}

 

노티스 포스트타입으로 했을때

>오류 나온다. 어드민이 2개로 들어가서 404 나온다.

어드민을 뺀다. > ./ 까지가 어드민이다.

 

왜 난 안되지...계속 404인데...

 

 

noticeWrite.jsp> form태그에 경로를 수정해준다.

>./noticeWrite

 

	<form action="./noticeWrite" method="post">
		<input name="ntitle">
		<textarea name="ncontent"></textarea>
		<button type="submit">공지 쓰기</button>
	</form>

 

 

NoticeController> post타입도 경로가 noticeWrite.jsp> form태그 경로와 같아야한다.

	@PostMapping("/admin/noticeWrite")
	public String noticeWrite(NoticeDTO dto) {
		// System.out.println(dto.getNtitle());
		// System.out.println(dto.getNcontent());

		int result = noticeService.noticeWrite(dto);
		return "redirect:/notice";

	}

 

 

 

NoticeService (인터페이스) > public int noticeWrite(NoticeDTO dto); 있으면 된다.

 

 

NoticeServiceImlp

 

NoticeServiceImlp >noticeWrite

	@Override
	public int noticeWrite(NoticeDTO dto) {
		return 0;
	}

>dao에게 일하도록 리턴 수정

 

 

NoticeDAO> 리턴값  >세션 만들기

	public int noticeWrite(NoticeDTO dto) {
		return sqlSession.insert("notice.noticeWrite", dto);
	}

 

 

 

notice-mapper> noticeList 변경,  noticeWrite추가

노티스매퍼

 

 

진짜 글 써지는지 테스트 하기.

>써진다.

 

중간에 노티스 매터에 괄호 오타있어서 계속 오류....오타는 내눈으로 봐도 안보인다...