[20221020] myweb - 아이디/비밀번호 찾기, 첨부형게시판

kangsun·2022년 10월 20일

JSP

목록 보기
12/16






아이디/비밀번호 찾기


사용자에게 이름과 이메일 주소를 요청한다.
→ 데이터베이스에 있는지 확인한다.
→ (이메일 제약조건에 중복되지않게 되어있다)
→ 일치하면 임시비밀번호를 만든다. (테이블수정 UPDATE)
→ 상대방 메일에게 보내준다.
→ 임시비밀번호로 로그인을 하고
→ 회원정보수정에서 원하는 비밀번호로 바꿔서 쓸 수 있도록 만들어준다.





1. 이름과 이메일을 입력받아 일치되면 id 가져오기



(1) sql 쿼리문 작성해보기

  • 아이디/비번찾기 연습용 데이터 추가 (실제 사용하고있는 이메일 추가해줘야한다.)
  • 1) 이름과 이메일 일치하면
  • 2) 임시 비밀번호를 발급해서 테이블 수정하고, 아이디와 임시비밀번호를 메일로 전송하기



(2) findID() 함수 작성

memberDAO.jap

  • 리턴값은 boolean (true/false)


    메일이 성공적으로 전송이 되었는지, 실패했는지 리턴값을 받아야한다.

  • sql문 가져오는 함수 작성

  • ※ 임시비밀번호와 이메일 전송 기능 위치

    id 조회하는 sql문 가져온 후 임시 비밀번호 발급해서 이메일로 전송하기

    - 따로 전송해주는 페이지를 만들지 않고 임시비밀번호를 발급받은 후 try문 서버단에서 비밀번호를 이메일로 전송해준다.

2. 임시비밀번호 발급하기

  • if문 사이에 임시 비밀번호 발급

    - 대문자, 소문자, 숫자이용해서 랜덤하게 10글자 만들기

  • ※ 메일 보낼 때 이 두 변수를 보내주면 된다.

3.아이디와 임시 비밀번호를 이메일로 전송하기

  • 발급받은 임시 비밀번호로 테이블 수정하는 쿼리문 추가
  • 임시 비밀번호로 수정이 되었다면, 아이디와 비밀번호를 이메일로 전송



(3) findID.jsp 폼 생성

  • 폼을 생성해준다
  • form에 액션, 이름이메일 폼 유효성 검사할 javascript파일 걸어주기.
  • 폼 생성 결과확인



(4) findProcProc.jsp

아이디 비밀번호 찾기 결과 페이지

- 폼에 입력한 이름과 이메일 값을 가져오고 dto객체에 담아준다.


(5) 결과확인





4. 임시비밀번호로 로그인한 후, 본인이 회원정보 수정에서 비밀번호를 수정한다.





파일 첨부형 게시판

  • POST방식으로 데이터를 보내기
    POST 방식은 GET 방식과 달리, 데이터 전송을 기반으로 한 요청 메서드이다.
    GET방식은 URL에 데이터를 붙여서 보내는 반면, POST방식은 URL에 붙여서 보내지 않고
    BODY에다가 데이터를 넣어서 보낸다.
    따라서, 헤더필드중 BODY의 데이터를 설명하는 Content-Type이라는 헤더 필드가
    들어가고 어떤 데이터 타입인지 명시한다.

컨텐츠 타입으로는 여러가지가 있다
① application/x-www-form-urlencoded
② text/plain
③ multipart/form-data
등이 있다.

따라서 POST 방식으로 데이터를 보낼때는 위와 같이 컨텐츠 타입을 꼭 명시해줘야한다.
보통 작성하지 않는 경우는 1번의 컨텐츠 타입으로 셋팅된다.

①의 컨텐츠 타입은, GET방식과 마찬가지로 BODY에 key 와 value 쌍으로 데이터를 넣는다. 똑같이 구분자 &를 쓴다.
②의 컨텐츠 타입은, BODY에 단순 txt를 넣는다.
③의 컨텐츠 타입은, 파일전송을 할때 많이 쓰는데 BODY의 데이터를 바이너리 데이터로 넣는다는걸 알려준다.

자바와 같이 oop 프로그래밍에서는 BODY에 데이터를 InputStream/OutputStream 클래스를 통해서 읽고/쓰고 한다.

  • GET방식 과 POST방식에 대한 상식
    - POST방식이 GET방식보다 보안측면에서 더 좋다?
    POST든 GET이든 보내는 데이터는 전부 클라이언트측에서 볼 수 있다.
    단지 GET방식은 URL에 데이터가 표시되여 별다른 노력없이 볼 수 있어서지,
    두 방식 전부 보안을 생각한다면 암호화 해야한다.
    - GET방식이 POST방식보다 속도가 빠르다?
    빠른건 맞다. 하지만 왜 빠른지를 알아야 하는데,
    이유는 GET방식의 요청은 캐싱(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는다)때문에 빠른것이다.
    <

cos.jar파일 다운

http://www.servlets.com/

java SE, javaEE
cos.jar 안에있는 클래스를 이용해서 파일을 쉽게 전송할 수 있다.
→ 파일이 깨지지 않도록 원상복구해주는 기능이 들어있다.


I:\java202207\setup\cos-22.05\lib\cos.jar

pds, storage 파일 생성


- storage는 파일을 저장하기위한 폴더

파일 첨부 테스트

pdsTest.jsp


  • 파일 첨부 서버에 잘 넘어갔는지 확인하는 방법


파일 첨부 테스트 결과

pdsTestProc.jsp

  • enctype="multipart/form-data" 넣어줬을 때 결과 → null값이 들어간다.
  • enctype="multipart/form-data" 빼줬을 때 결과
  • 값이 들어온다.

- 마지막 파일첨부 부분에 파일명이 전송된다.
- 파일이 전송된 것이 아니다.

1. cos.jar 메뉴얼 파일 다운

http://www.servlets.com/cos/

가장 중요한 세가지 클래스

  • class MultipartRequest : 파일 저장

    - 똑같은 파일이 존재하면 중복을 제거해준다.

  • class FileRenamePolicy : 중복된 이름을 내가 지정한 다른이름으로 저장

  • class DefaultFileRenamePolicy : 중복된 이름을 정해진 다른 이름으로 저장해준다. (1,2,3)



- 이 파일을 storage 폴더에 저장할 것이다.
- 파일을 데이터베이스에 저장시키면 안된다. (DB용량 감당못함)
- DB에는 업로드된 파일명과 확장명, 파일크기 정도만 저장을 시키고, 실제파일은 웹서버의 하드디스크에 저장을 시킨다.
→ 데이터베이스에 저장된 파일명과 다른 폴더에 저장된 파일명끼리 일치를 시키면 된다.

2. 파일업로드 관련 라이브러리 생성에 필요한 파일 다운

  • (3) 파일 옮기기

    압축 해제후 library jar 파일 commons-fileupload-1.2.1.jar 와 commons-io-2.4.jar 을 WEB-INF/lib 폴더에 복사



1. 첨부된 파일 저장하기

pdsTestProc.jsp

  • 결과확인

    - 이클립스에서 서버를 돌리고 있기 때문에 나오는 경로고 실제론 존재하지 않는다.

  • 경로 확인해서 폴더 열어놓기
    I:\java202207\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\myweb\storage
    → 맥북에선 .metadata폴더가 보이지 않는데, command+shift+. 눌러주면 숨김폴더가 노출된다.

  • ※ 클래스 Class MultipartRequest

    http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html

  • MultipartRequest

    - request: 원본 파일 가져와라
    - s
    - FileRenamePolicy policy에는 중복된 파일명이 있으면 지정된 이름으로 변경해주는 class DefaultFileRenamePolicy를 넣어주면 된다.

  • ※ 작성시 주의할 점 - 같은 이름 주의



    - com.oreilly.servlet 을 선택할 것

  • 변수 생성 후 MultipartRequest 객체 사용하기

    - 이대로 넣어주면 된다.

  • pdsTest.jsp에서 폼을 입력한 후 전송을 누르면 storage폴더에 파일이 생성된다.

  • 뭐지이거



2. mr 참조변수가 가리키고 있는 텍스트 정보 가져오기


- MultipartRequest를 담은 mr변수로 가져와야한다 그렇지 않으면 null값이 나온다.

  • 결과확인


    - 폼에 입력한 내용+파일첨부 모두 확인


3. /storage폴더에 저장된 파일 정보 확인하기

파일명, 파일 정보, 파일 용량은 어느정도인지 ?

  • mr변수에서 꺼내오면 된다.

  • 1) mr에서 <input type="file">을 전부 수거


    - 이부분을 수거하는 것이다.

  • 2) 1)의 files가 가지고 있는 값들 중에서 개별적으로 접근하기 위해 name가져오기


    nextElement()

  • 3) 2)의 item 이름(filenm)이 가지고 있는 실제 파일을 mr객체에서 가져오기


    ↳ 여기서 가져와야 한다

  • 4) /storage폴더에 저장된 파일의 기타 정보 확인하기

    - 파일 클래스를 사용하면 된다.

  • (20221021 수업 예정) 테이블 저장 : 리네임된 파일명을 테이블에 저장한다. 파일크기도 같이 저장할 것이다.
    - MultipartRequest 클래스에서는 파일크기까지는 전송해주지 않기 때문에 다른 클래스를 추가로 사용해야한다.
    - 이전에 배웠던 File클래스를 사용해서 저장하면 된다.









profile
코딩 공부 💻

0개의 댓글