11.12~13

1. 로그인된 회원에 한해서만 서비스를 제공 (webfolder.jsp의 최상단에 작성)
(1) 로그인 유무 확인
(1-1) session객체를 이용해 getAttribute("sid");
(1-2) 만약에 sid가 null이라면 <script>태그 열어 경고창 띄우고 location을 홈으로 지정
(1-3) return; 이거 이유? [if조건문을 중지 시키기 위함.]
2. 로그인 된 사용자가 BeomDrive를 눌렀을 때 용량정보를 띄워야 함.
(1) com.junbeom.wf 패키지 생성 / WebFolderDAO 클래스 생성
(2) DAO 초기 구성
(2-1) 절대경로, 사용자 아이디정보, 총용량,사용용량,남은용량에 대한 변수 생성
(2-2) 기본생성자생성(총용량변수에 20971520 담아놓기) / getter, setter 생성
(3) Bean객체(wf)생성 -> [scope="session" 이유? 로그인정보를 유지하기위해서]
(4) DAO클래스에 값 세팅
(4-1) wf.setAbsPath(request.getRealPath("/"));
(4-2) wf.setUserId(sid);
(4-3) wf.usedFolderExist();
(5) 기능 구현을 위한 DAO 구성
(5-1) /* 사용자폴더 생성 관련 메서드 */ (폴더생성, 총용량, 사용용량, 남은용량 구하기)
(5-1-1) 파일 생성 (absPath+"webfolder/userfiles/"+userid);
(5-1-2) 만약에 해당 파일이 존재하지 않다면 f.mkdir() 메서드를 통해 폴더생성
(5-1-3) 사용 용량(usedSize)을 0으로 초기화
(5-1-4) 용량계산 메서드 호출 settingUsedSize(f);
(5-1-5) 남은 용량(freeSize)에 총용량 - 사용용량 하여 담아놓기
(5-2) /* 용량계산 메서드 */ (파일이 추가될 때 마다 사용용량 증가를 위한 메서드)
(5-2-1) 인자값으로 경로를 갖고있는 파일객체를 받은것 인지
(5-2-2) files[] 배열에 f.listFiles();
(5-2-3) for문 진입 (0부터 files의 길이까지 1씩증가)
(5-2-4) 만약에 files[i]야 너 파일이니?
맞다면 usedSize+=files[i].length();
아니라면 settingUsedSize(files[i]); => 재귀함수 호출
3. 탐색기
(1) DAO에 crpath변수 생성 / getter,setter만들기 => 현재 사용자의 위치
(2) JSP이동 후 String 타입의 cp 변수에 request.getParameter("cp");
=> 이때 cp라는 값은 없기 때문에 무조건 null임
(3) if조건문 진입
=> 만약에 cp가 null이거나 빈문자열과 같다면 cp에 sid를 넣을게
(4) 사용자가 현재 어떤 위치에 있는지 판단하기 위해
=> wf.setCrpath(cp);
(5) 파일, 폴더들을 테이블에 띄우기 위해 <tbody>태그 열어서 스크립트릿 열기
(5-1) File f 객체 생성
(5-2) files라는 배열에 f.listFiles();
(5-3) 폴더 상위로 이동시키기
=> 폴더를 클릭 했을 때 cp는 null이 아니고 사용자ID/폴더명 이 상태임
따라서 폴더를 클릭한 시점에 (3)로 이동 해보면 cp는 null이 아니기 때문에
sid가 안 들어감
(5-3-1) if조건문 진입
=> 만약에 wf.Crpath()가 wf.getUserid()와 같지 않다라면?
int형 변수 li에 wf.getCrapth().lastIndexOf("/"); => "/"까지 짜른 길이를 넣겠다.
그리고 cp에 wf.getCrpath().substring(0, li); 짤라서 저장하겠다.
(5-3-2) <tr>태그 열고 <td>태그 열어
<a href="webfolder.jsp?cp=<%=cp%>">상위로 </a>
(5-4) 파일인지 폴더인지 판별
(5-4-1) if문 진입 => 만약 files가 null이거나 files의 길이가 0과 같다면
"등록된 파일 및 폴더가 없습니다."를 띄워주고
그게 아니라면 ?
for문 진입
<분류컬럼>
- 삼항연산자를 이용해 판별 후 분류 컬럼에 띄우기
<파일 및 폴더 컬럼>
- <a>태그를 이용하여 파일이면 파일을 폴더면 폴더를 띄우기
<삭제컬럼>
- 파일인지 폴더인지 판별 후 <a>태그 이용하여 href를 설정해주기
- 그냥 이동하게 되면 내가 어떤 정보를 지워야 할지 모르기 때문에
쿼리스트링을 통해 삭제 대상의 정보를 전달해야함.
4. 폴더생성
(1) createFolder.jsp 페이지 생성하여 컨텐츠 구조 잡기
(2) 폴더 생성 버튼클릭 시 createFolder_ok.jsp 페이지로 이동
<createFolder_ok.jsp 페이지>
(1) java.io패키지 import하기
(2) <jsp:useBean id="wf" class="com.junbeom.wf.WebFolderDAO" scope="session"/> 객체 생성
- scope를 session으로 주는 이유
-> 사용자가 브라우저를 껐을때와 로그아웃하기 전까지 폴더 생성이 되게끔 해주기 위함
(3) request.getParameter("foldername");을 통해 사용자가 입력한 폴더이름을 가져오기
(4) 객체생성 후 경로를 지정하는데 마지막에는 사용자가 입력한 폴더이름을 추가하기
(5) Boolean sw=false; 초기화
(6) <부모>if 조건문 진입
=> 만약에 f객체가 존재하지 않는다면?
f.mkdir(); 폴더 생성할게 그리고 그 결과를 sw에 담을게
<자식>if 조건문 진입
=> 만약에 sw가 true라면?
<script> 태그 사용해 알림창 ('폴더 생성 완료!') 띄우고
나를 열었던 전 페이지 reload 후 팝업창 닫아주기
=> false 라면?
<script> 태그 사용해 알림창 ('폴더 생성 실패!') 띄우고
위치이동 createFolder.jsp
5. 파일업로드
(1) uploadFile.jsp 페이지 생성하여 컨텐츠 구조 잡기
(2) 파일업로드 버튼 클릭 시 uploadFile_ok.jsp 페이지로 이동
<이때 파일 업로드를 위한 필수 사항 생각해야함.>
<uploadFile_ok.jsp>
(1) com.oreilly.servlet.* import하기
(2) <jsp:useBean id="wf" class="com.junbeom.wf.WebFolderDAO" scope="session"/> 객체 생성
(3) String savepath = 현재 사용자 폴더까지
(4) MultipartRequest mr 객체 생성
이때 크기를 (int)wf.getFreeSize()를 이용해 남은용량을 최대치로 설정
(5) <script>태그 열어서 ('파일 업로드 성공!'); 띄우고
opener.location.href='webfolder.jsp?cp=<%=wf.getCrpath()%>';
window.self.close();
6. 삭제 기능 구현 (DAO)
(1) 파일 삭제 관련 메서드<deleteFile(String target)>
(1-1) 인자값으로 삭제할 대상의 정보(target)를 받아야함.
(1-2) 파일 생성 (absPath+"webfolder/userfiles/"+target);
(1-3) 만약에 너 폴더니? true 라면?
dirDelete(f); => 폴더 삭제 기능 메서드에 파일객체 보낼게
(1-4) f.delete(); => 폴더인지 물어보는 if조건문이 끝나면 파일이니까 삭제할게
(2) 폴더 삭제 관련 메서드<dirDelete(File f)>
(2-1) 위에서 인자값으로 파일객체 f를 보냈으니 f를 받아줘야함.
(2-2) files라는 배열 생성 후 f.listFiles();
(2-3) for문 진입
만약에 files[i]야 너 폴더니? true라면?
dirDelete(files[i]); // 재귀함수 호출
조건문 끝나면 files[i].delete();
=> 폴더 삭제 클릭 시 폴더 이름이 crPath()와 files[i].getName()을 통해 처리페이지로
전달되고, 처리페이지에서 request.getParameter("target")으로 값을 받아와 wf객체가
갖고있는 deleteFile메서드의 인자값으로 전달한다. 이때 파일이면 그냥 삭제해주지만
폴더라면 폴더 삭제 관련 메서드에 인자값으로 파일 경로를 전달하고 배열을 만들어 폴더의
리스트들을 담아준다. 그 후 for문에 진입하여 만약 files[i]가 폴더인지 확인한다.
폴더가 맞다면 폴더삭제 관련 메서드의 인자값으로 files[i]를 넣어 재 호출 한다.
이렇게 된다면 폴더 내부에 있는 파일들을 모두 삭제할 수 있다.
개념
형식
<label>디스크 사용량</label>
<meter id="disk-usage" min="0" max="100" value="40" low="20" high="80">40%</meter>
절차 트레이닝과 함께 개발 목적을 달성하기 위해 가장 쉬운 부분 먼저 개발해 나가며 유지보수 하는 방식으로 개발해야 함.