[2022/11/03 THU] spring - mymelon 프로젝트

kangsun·2022년 11월 3일

Spring

목록 보기
3/24
  • 졸업작품 제안서

⚠️ mediagroup 페이징 오류

  • MediagroupCont.java
  • list.jsp

◆ MediaGroupCont.java

     ◇ int startPage = Pages*pagePerBlock +1; 
      → 페이징 목록이 시작되는 숫자는(1, 11, 21···.)  Pages(페이징 목록을 그룹화한것:1~10번페이지까지는 1, 11~20번         
         페이지까지는 2)에다가 pagePerBlock(페이지 리스트 : 한줄에 페이지 1번~10번까지만 띄우겠다)을 곱한 후 +1을 해줘           
         야한다 → +1을 안하면 0도 startPage가 되기때문에 오류 발생한다. 
         ex. startPage = (0 * 10) +1;  = 1 (가장 첫 페이지리스트 목록 그룹의 첫 시작 페이징 번호) 
                                          ↑Page = (현재페이지÷페이지리스트:1~10)값을 소수점 올림 후 -1한다.
                                                       ex.  1÷10 = 0.1 → 소수점 올림 = 1 → 1 - 1 = 0
                                                            11÷10 = 1.1 → 소수점올림 = 2 → 2 - 1 = 1 
                                                            → 이러면 startPage = (1*10)+1 = 11; 이 된다. 

     ◇ int endPage = startPage + pagePerBlock -1;
      → 페이징 목록에서 마지막 숫자는(10, 20, 30···.) startPage(시작하는 페이지 숫자)에다가  
         pagePerBlock(페이지 리스트 : 한줄에 페이지 1번~10번까지만 띄우겠다)를 곱한 후 -1을 해준다. 
          ex. endPage = (1+10) - 1 = 10 (가장 첫 페이지리스트 목록 그룹의 마지막 페이징 번호)

​

◆ list.jsp

     ◇ ${endPage > pageCount} → true →  endPage = pageCount;
      → 끝나는 페이지 번호(10, 20···.)이  pageCount = totalPage(전체 페이지 수 : 전체 글 개수 / 한 페이지에 띄울 글 개 
         수)보다 크면 endPage라는 변수에 pageCount 값을 넣는다 => endPage == pageCount
         ex. 10 > 8 라고한다면 → true → endPage = 8; 이된다. (끝 페이지가 8이 됨)

     ◇  ${startPage > 1} → true → ${startPage-1} [이전]
     → 시작 페이지 번호가 (1,11···.) 1보다 크다면 시작페이지번호 - 1이라는 페이지 넘버에 이전 버튼을 삽입한다.
         ex. 11 > 1 → true → 11- 1 = 10 위치에 이전 버튼 삽입 → [이전] [11] [12] [13] ···.

     ◇  <c:forEach var="i" begin="${startPage}" end="${endPage}">
     → 반복문(JSTL)의 시작 숫자를 스타트 페이지, 끝나는 수를 엔드페이지로해서 페이징 리스트를 불러온다 
         ex. i=11; i>=20 → 11, 12, 13 ··· 18, 19, 20 = 하나의 페이징 목록 

    

     ◇  ${endPage < pageCount} → true → ${startPage + 10} [다음] 
     → 끝나는 페이지 번호(10, 20···.)가 전체 페이지 수보다 작다면(=전체 페이지 수가 많다면) 시작페이지 번호에 +10을 한 
         페이지넘버 위치에 [다음]버튼을 삽입한다.
         ex. 10 < 15 라고한다면 → true → 1 + 10 = 11 위치에 [다음] 삽입  → [8] [9] [10] [다음] 


mediagroup 삭제


그룹번호 55번을 삭제 페이지로 넘겨줘야한다.

  • 1) list.jsp
    수정 삭제버튼에 링크를 걸어주면서, 그룹번호를 넘겨준다.
  • 2) mediagroupcont.java
    컨트롤러로 이동해서 groupno 그룹번호를 넘겨주고, view단에 넘겨줄 값들을 가져온다.

  • 3) deleteForm.jsp
    view단 만들러 가기

    목록에서 온 값들을 서로 주고받는 관계를 확실히 알아야한다.

변수의 이동 흐름

  • 4) mediagroupcont.java
    POST방식으로 들어온 삭제결과 백엔드 작성

    form에서 delete.do로 전달하면 hidden속성으로 POST방식으로 전달해준다.

    int cnt=dao.delete(mediagroupno);
    sql문이 들어왔을 때 값이 0이면 실패화면 보여주고, 성공하면 글삭제(int cnt=dao.delete(mediagroupno);)시키고 목록을 보여준다.

  • 5) MediagroupDAO.java sql 백엔드 작업


mediagroup 수정 Update

  • 1) mediagroupDAO.java
    수정하는 sql문 작성

    list의 이부분만 WHERE절로 바꿔주면 상세보기가 된다.


  • 2) MediagroupCont.java 백엔드
    get방식으로 가져오기 - update.do URL로 들어오면 값을 가져오는 것


  • 3) updateForm.jsp 프론트
    수정하는 폼 만들어주기 - hidden 속성으로 post방식으로 보내주는 폼


  • 4) MediagroupCont.java 백엔드
    수정 처리 결과
    post로 보내준 폼을 post방식으로 MediagroupCont에 받아오기

결과확인




net.utility 팩키지 생성

utility 파일 넣기 (myweb)에서 했던 것 복사


media (mp3듣기페이지)


media_sql 테이블 생성

-- media_sql.txt

-- 미디어 테이블 생성
CREATE TABLE media (
  mediano  	   NUMBER        NOT NULL PRIMARY KEY,          -- 미디어 번호
  title    	   VARCHAR2(255) NOT NULL,                      -- 제목
  poster   	   VARCHAR2(255) DEFAULT 'poster.jpg' NOT NULL, -- 포스터 이미지
  filename 	   VARCHAR2(255) NOT NULL,                      -- 음원 파일명
  filesize 	   NUMBER        DEFAULT 0 NOT NULL,
  mview    	   CHAR(1)       DEFAULT 'Y' NOT NULL,          -- 출력모드
  rdate    	   DATE          NOT NULL,                      -- 등록일
  mediagroupno NUMBER    	 NULL                           -- 부모테이블 PK
);


-- 시퀀스 생성
create sequence media_seq;


commit;
  • 보여주는 부분, 보여주지않을 부분

    y값이 들어가있는 부분만 보여준다.

  • 테이블, 시퀀스, 커밋

media 팩키지 생성


MediaCont.java 컨트롤러 생성


MediaCont.java @Repository 생성


spring framework의 탄생배경


웹과 DB서버를 왔다갔다하는데 시간이 오래걸리고 복잡하다.
분산형 시스템의 최적화
자동 객체 생성


@Autowired

@Autowired를 사용하면 MediaDAO 객체를 자동 생성해준다.

  • MediaCont

  • MediaDAO

MediaDTO

기본생성자, getter, setter, toString 생성


음원목록

  • 1) mediagroup/list.jsp에 링크걸기


    mediagroupno는 계속 가지고다녀야하는 값이다.

  • 2) 결과확인


    <a href="../media/list.do?mediagroupno=${dto.mediagroupno}">
    링크에 이 값이 잘 들어왔는지 확인한다.
    아직 페이지를 만들어주지 않았기 때문에 오류가 난다.

파일 확인
02_스프링부트 JdbcTemplate기반 mymelon프로젝트_media



  • 3) MediaCont 백엔드
    media폴더의 list.do가 URL로 들어오면, view단과 매핑시켜준다.



  • 4) list.jsp 프론트


  • 5) MediaDAO 백엔드
    데이터베이스에서 음원목록 데이터 가져오기
SELECT mediano, title, poster, filename, filesize, mview, mediagroupno
FROM media
WHERE mview='Y' AND mediagroupno=?
ORDER BY mediano DESC


FROM 미디어 테이블에서
WHERE 미디어뷰가 Y로 되어있고, 미디어그룹번호가 ?번인곳에
SELECT 미디어번호, 제목, 포스터이미지, 파일명, 파일크기, 미디어뷰, 미디어그룹번호를
ORDER BY 미디어번호 내림차순(10 → 1)으로 가져와주세요.

미디어 그룹 목록 페이지 결과확인


미디어 그룹 목록 실행 흐름


media 쓰기

  • 1) 미디어 그룹 목록에서 음원등록 버튼에 링크 걸기
    create.do페이지로 가면 mediagroupno 그룹번호를 가지고 가는 링크.
  • 2) MediaCont.java 백엔드 @RequestMapping GET방식
    list페이지 링크에 들어온
  • 3) createForm.jsp 프론트
    createForm 대충 생성해서 페이지에 접속되는지 확인

음원등록페이지 접속되는지 중간확인


  • 4) 첨부파일을 넣어줄 것이기 때문에, enctype을 작성해줘야한다.
  • 5) 인풋으로 히든속성으로 부모글번호를 항상 가져와야한다.
  • 4) MediaDAO에 create()함수 만들기
    글작성해주는 sql문 작성

  • 헷갈렸던 개념
profile
코딩 공부 💻

0개의 댓글