[21.01.05] 작은 발걸음(17)
그 길을 아는 것과 그 길을 걷는 것은 다르다!
오늘은 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");
※반성 및 개선할 점
-아침에 계획을 세우도록 노력한다.!
발걸음