DAY_051[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 12월 8일
0

국비과정

목록 보기
51/99

 🌞 Day 051 

  • Paging
  • member : 회원 가입



 🎄 페이지 나누기 (2) 


 🎁 class - Paging 


 🎁 추가 수정 : class - MainAction 


 🎁 BoardDao 

  • selectAll메서드가 전부가 아니라 한 페이지에서 보여질 레코드 10개만 조회해서 가져오므로 댓글 계산하는 메서드도 다시 살려주어도 에러가 나지 않는다.

 🎁 DB : rownum 꺼내는 과정 

  • ROWNUM은 오라클에서 자체적으로 select한 레코드들에 붙이는 숫자
    SQL result에서는 숨겨져있으나 꺼내서 사용할 수 있다.
  • 시퀀스로 매긴 숫자는 해당 레코드가 삭제되고 새로 생성하면서 숫자가 비게 되는 경우도 생길 수 있기 때문에 ROWNUM을 사용하는 것이 안전
  • 일단 먼저 select를 하고 난 다음에 숫자를 매기기 때문이다.

  • 위 코드들은 필요한 rownum을 꺼낼때 and가 아니라 서브쿼리를 사용하는 이유를 보기 위한 과정 레코드 수가 너무 많으면 and로 연산할 때 과부하가 걸리거나 너무 오래 걸려서 에러가 발생할 수도 있다
  • 서브쿼리로 나누면 11보다 큰 rownum먼저 계산 => 그 결과에서 20보다 작은 rownum 이렇게 계산이 되므로 훨씬 안정적

 🎁 추가 : main.jsp (페이지 표시) 

  • 페이지 표시영역만 정리함




 🎄 Member 


 🎁 joinForm.jsp 


 🎁 class - JoinFormAction 


회원 가입

⇒ 앞 프로젝트 폴더의 코드와 거의 똑같음 url만 member.doboard.do 바꾸는 것만 조심하기

⇒ 생략한 내용들
: board.js(idCheck(), idok(id)) / IdCheckAction / JoinAction


 🎁 idcheck.jsp 

  • 아이디 중복 체크하는 팝업창
  • form태그 method="get"임 post로 잘못 보내서 한참을 헤맸음


 🎁 board.js 

  • 함수들이 전의 프로젝트 코드와 거의 비슷하다.
  • 순서나 약간 달라진 함수만 정리

 🎁 class JoinAction 


회원 정보 수정

  • 회원 정보 수정도 앞에서 했던 것과 똑같아서 생략
    : UpdateMemberForm 클래스 생성 → updateForm.jsp 만들기 → UpdateMemberAction 클래스 생성 → MemberDao에 updateMember()메서드 만들기

 🎁 class ActionFactory 

  • 최종 코드

이 프로젝트 폴더는 여기서 마무리...




새 프로젝트 폴더 시작

 🎄 File Upload 

  • 파일 업로드를 하기 위해서 다운받아서 추가할 파일이 있다.
    'cos.jar download’ 검색 ⇒ http://www.servlets.com/cos/
    → cos 22-5.zip 다운받기
    → (압축풀고) lib > cos.jar(이 파일을 web-int)폴더에 넣기

 🌟 File Upload 연습 

 🎁 upload.jsp 

  • 파일 업로드 연습 (1)
  • form에서 파일을 업로드 하려면 method는 반드시 post이어야 하며,
    enctype="multipart/form-data"가 반드시 포함되어야 한다.


 🎁 UploadServlet 

  • 파일이 업로드 될 타겟 폴더를 지정, String으로 저장해둔다.
    String savePath = "upload";
    그리고 webapp에 같은이름으로("upload") 폴더를 하나 만든다.

  • 업로드될 파일의 용량을 제한하기 위한 용량값을 int 변수에 저장해둔다.
    int uploadFileSizeLimit = 5*1024*1024;

    [ 참고 사항 ]

    • 1바이트 기준 1020byte = 1Kbyte
    • 1024Kbyte = 1MB
    • 1024Mbyte = 1GB
    • 1024Gbyte = 1TB
    • 1024Tbyte = 1PB
  • 인코딩 방식을 String 변수에 저장해둔다.
    String encType = "UTF-8";

  • 업로드될 서버의 실제 저장장소를 설정하고 그 안에 "upload"폴더를 만들어 최종 경로를 String 변수(uploadFilePath)에 저장해둔다.
    ServletContext context = getServletContext();
    String uploadFilePath = context.getRealPath(savePath);

  • MultipartRequest 객체를 만들고 매개변수를 전달한다.
    매개변수들 = jsp에서 전달한 request + 위에서 만든 변수들

  • request

    • jsp에서 전달한 HttpServletRequest 객체(매개변수)를 MultiPartRequest에 전달한다
    • enctype="multipart/form-data"으로 전달된 폼의 모든 파라미터들은 일반 request.getParameter()로 값을 얻을 수 없다.
    • MultipartRequest에 request를 넣어서 복합사용해야 담겨있는 유효한 값을 얻을 수 있다.
    • 결론적으로 multipart/form-datafh 보낸 데이터들은 multipartRequest로만 받을 수 있다.
    • multipart/form-data로 보낸 데이터들은 일반 request.getParameter()로 받으면 모두 null이 된다.
  • uploadFilePath : 서버상의 실제 저장 장소

  • uploadFileSizeLimit : 최대업로드 용량 제한

  • encType : 한글 인코딩 방식

  • new DefaultFileRenamePolicy()
    : 저장 장소에 업로드 되는 파일이름 중복시 문제 해결하는 객체

  • MultipartRequest 객체가 생성되는 순간 업로드 되는 파일을 해당 경로에 업로드를 완료

  • System.out.println("uploadFilePath: " + uploadFilePath);
    : 업로드된 파일들이 실제로 저장되는 폴더의 경로를 출력해볼 수 있다.


 🎁 01_result.jsp 


 🎁 02_upload.jsp 

  • 파일 업로드 연습 (2)
  • 여러개의 파일 업로드, 같은 이름의 같은 이미지 파일을 여러개 올렸을 때 비교

 🎁 class - MultiFileUpload 

  • 폼 안에 있던 <input type="file">의 파일들은 MultipartRequest 생성시 한 번에 업로드 된다.

  • 한 번에 전달된 "파일이름들"은 Enumeration을 사용하여 전달 받고, 하나씩 꺼내서 사용한다.
    Enumeration files = multi.getFileNames();
    파일 이름들("uploadFile01", "uploadFile02", "uploadFile03")을 Enumeration에 저장

  • while(files.hasMoreElements())
    : 파일 요소의 개수만큼 반복실행

  • String file = (String)files.nextElement();
    : 하나씩 파일요소 추출

  • 업로드된 파일이름 추출(업로드 전)
    String file_name = multi.getFilesystemName(file);

  • 업로드 후, DefaultFileRenamePolicy에 의해 구분된 실제 파일 이름 추출
    : String ori_file_name = multi.getOriginalFileName(file);

  • 02_result.jsp에서 업로드 전의 파일이름과 업로드 하면서 DefaultFileRenamePolicy에 의해서 바뀐 파일이름을 비교해보기
    위해서 변수를 생성하였다.


 🎁 02_result.jsp 



 🌟 프로젝트 시작 

 🎁 DB 준비 

  • bookproduct라는 테이블을 만들고 레코드도 2개 정도 insert한다.

  • 'java.gif'는 연습하면서 업로드 되었으나 'jquery.jpg'는 업로드 되지 않았다. upload폴더에 필요한 파일을 저장하면 깊숙이 숨어있는 업로드 파일 저장 폴더와 똑같이 취급한다.

 🎁 index.jsp 


 🎁 class - ProductServlet 

  • 이 프로젝트 폴더의 서블릿


 🎁 interface - Action 


 🎁 class - ActionFactory 


 🎁 class - IndexAction 


 🎁 ProductDto 


 🎁 Dbman 

  • package com.ezen.product.Dao
  • 코드 내용은 똑같으니 복사 & 붙여넣기

 🎁 ProductDao 


 🎁 product/productList.jsp 

  • index에서 바로 가는 첫 페이지

 ✨ css/product.css 

  • 이번 프로젝트 폴더에서 쓸 css


 🎁 class - ProductViewAction 

  • prductList.jsp에서 제목을 클릭하면, 전달된 code값으로 product를 조회해서 request에 담고, productView.jsp로 이동


 🎁 product/productView.jsp 


 🎁 class - ProductWriteFormAction 

  • productList.jsp에서 '상품등록'을 클릭하면 productWriteForm.jsp로 이동하도록 하는 클래스

 🎁 product/productWriteForm.jsp 

  • 등록할 상품의 데이터를 입력하고 보내는 페이지

product insert는 주말 숙제




profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글