일상/일기장

[21.01.05] 작은 발걸음(17)

jmaster 2022. 1. 5. 23:47

그 길을 아는 것과 그 길을 걷는 것은 다르다!

 

 

오늘은 Servlet 공부를 했다. 새로운 것들이 많아 어렵웠다.. 하나하나 보면서 내것으로 만들자!

 

 

TODO LIST

-ERD 이해하기

-기획 정의서 만들기

-자기소개서 보충 및 수정

 

※오늘의 계획

  • servlet 학습 및 복습

※스터디 내용

Cookie

쿠키를 생성하여 클라이언트에게 전달하는 서블릿

쿠키(Cookie) : 서버(웹프로그램) 클라이언트와의 연결 지속성을 제공하기 위한 클라이언트에

저장하는 - 쿠키는 접속 서버 정보를 이름(식별자)으로 클라이언트에 저장

 

Cookie 클래스로 인스턴스 생성 

  ● Cookie : 쿠키 정보를 저장한 인스턴스

Cookie(String name, String value) : 쿠키명과 쿠키값을 전달하여 인스턴스를 생성하는 생성자

  쿠키명 : 쿠키값을 제공받기 위한 식별자

  쿠키명과 쿠키값은 영문자, 숫자, 일부 특수문자만 사용하여 저장 가능

 

Cookie idCookie=new Cookie("id", "abc123");

Cookie countCookie=new Cookie("count", "0");

 

클라이언트에 전달되어 저장될 쿠키의 유지시간 변경

Cookie.setMaxAge(int expiry) : 쿠키 유지시간() 변경하는 메소드

쿠키의 유지시간을 변경하지 않은 경우 기본값은 -1 설정

  유지시간이 -1 설정된 경우 쿠키는 브라우저가 종료될 경우 자동 소멸

 

countCookie.setMaxAge(24*60*60);쿠키 유지시간을 1일로 변경

 

쿠키를 클라이언트에 전달 - 클라이언트은 전달받은 쿠키를 저장

  유지시간을 변경하지 않은 쿠키는 브라우저 메모리에 저장

  유지시간을 변경한 쿠키는 쿠키 파일에 저장

HttpServletResponse.addCookie(Cookie cookie) :  클라이언트에게 쿠키를 전달하는 메소드

response.addCookie(idCookie);

 

HttpServletRequest.getCookies() : 클라이언트에서 전달된 모든 쿠키를 Cookie 배열로 반환하는 메소드

Cookie.getName() : Cookie 인스턴스에 저장된 쿠키명을 반환하는 메소드

Cookie.getValue() : Cookie 인스턴스에 저장된 쿠키값을 반환하는 메소드

 

File

전달된 파일을 저장하기 위한 서버 디렉토리의 시스템 경로를 반환받아 저장

 작업 디렉토리(WorkSpace) 아닌 웹디렉토리(WebApps) 시스템 경로 반환

주의)WAS 프로그램 시작시 작업 디렉토리의 프로젝트가 웹디렉토리에 동기화 처리되어 컨텍스트로 변환

 작업 디렉토리에는 업로드 파일이 없으므로 동기화 처리될 웹디렉토리의 업로드 파일이 삭제 

String saveDirectory=request.getServletContext().getRealPath("/upload");

System.out.println("saveDirectory = "+saveDirectory);

 

MultipartRequest 클래스로 인스턴스 생성

 ● MultipartRequest : 멀티파트 폼데이타를 처리하기 위한 기능을 제공하는 인스턴스

 ● MultipartRequest 인스턴스를 생성하면 모든 입력파일을 전달받아 서버 디렉토리에 저장

MultipartRequest(HttpServletRequest request, String saveDirectory, int maxPostSize

      , String encoding, FileRenamePolicy policy)

 ● request : 요청정보를 저장한 HttpServletRequest 인스턴스 전달

 ● saveDirectory : 전달파일을 저장하기 위한 서버 디렉토리의 시스템 경로 전달

 ● maxPostSize : 처리 가능한 멀티파트 폼데이타의 크기 단위 - 단위 : Byte

 ● encoding : 멀티파트 폼데이타에 저장된 전달값의 캐릭터셋 전달

 ● policy : FileRenamePolicy 인스턴스 전달

FileRenamePolicy : 파일 업로드 처리시 입력파일과 같은 이름이 파일이 업로드 되는

서버 디렉토리에 이미 존재할 경우 전달파일의 이름을 자동으로 변경하는 인스턴스

 ● FileRenamePolicy 인스턴스를 매개변수에 전달하지 않으면 기존 파일을 전달파일로 덮어씌우기(OverWrite)

MultipartRequest mr=new MultipartRequest(request, saveDirectory, 20*1024*1024, "utf-8");

 

서버 디렉토리에 저장된 파일명과 동일한 파일명의 입력파일을 전달할 경우 파일명을 변경하여

저장하기 위해 FileRenamePolicy 인터페이스를 상속받은 자식클래스로 FileRenamePolicy 

인스턴스를 생성하여 MultipartRequest 생성자의 매개변수에 전달

DefaultFileRenamePolicy : FileRenamePolicy 인터페이스를 상속받은 자식클래스

 입력파일명 뒤에 숫자를 붙여 자동으로 변경하는 기능을 제공

MultipartRequest mr=new MultipartRequest(request, saveDirectory

        , 20*1024*1024, "utf-8", new DefaultFileRenamePolicy());

 

입력값을 반환받아 저장

MultipartRequest.getParameter(String name) : 멀티파트 폼데이타에 저장된 전달값을 반환하는 메소드

String name=mr.getParameter("name");

 

입력파일명을 반환받아 저장

MultipartRequest.getOriginalFileName(String name) : 멀티파트 폼데이타에 저장된 전달파일명을 반환하는 메소드

String fileone=mr.getOriginalFileName("fileone");

String filetwo=mr.getOriginalFileName("filetwo");

 

MultipartRequest.getFilesystemName(String name) : 서버 디렉토리에 저장된 업로드 파일명을 반환하는 메소드

String fileone=mr.getFilesystemName("fileone");

String filetwo=mr.getFilesystemName("filetwo");

 

 

비정상적인 요청에 대한 처리

if(request.getMethod().equals("GET")) {

    response.sendRedirect("file_view.html");

    return;

}

POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경

request.setCharacterEncoding("utf-8");

 

전달값을 반환받아 저장

멀티파트 폼데이타로 전달된 값은 HttpServletRequest 인스턴스의 getParameter() 메소드를

호출하여 전달값 반환 불가능

String name=request.getParameter("name");

String fileone=request.getParameter("fileone");

 

멀티파트 폼데이타는 리퀘스트 메세지의 입력스트림을 사용하여 반환받아 사용

HttpServletRequest.getInputStream() : 리퀘스트 메세지의 입력스트림(ServletInputStream) 반환하는 메소드

ServletInputStream in=request.getInputStream();

InputStreamReader in=new InputStreamReader(request.getInputStream(), "utf-8");

 

 

 

반성 및 개선할 점

-아침에 계획을 세우도록 노력한다.!

발걸음