Web Dev

60일차 Study

수오니니 2022. 1. 7. 10:22

<<스터디 주제>>

- Servlet(입력값 검증, 요청 전달, 업로드, Cookies)

 

<<스터디 내용>>

 

입력값 검증 요청 전달

전달값과 변수의 이름은 동일할 것을 권장!

전달값도 캐릭터셋을 정해줘야 한글이 깨지지 않는다.

POST 방식으로 웹프로그램을 요청한 경우 리퀘스트 메세지의 바디(BODY)에 값을 저장하여 전달

→ 리퀘스트 메세지의 BODY의 기본 캐릭터셋은 ISO-8859-1(서유럽어)로 설정

→ HttpServletRequest.setCharacterEncoding(String encoding) : 리퀘스트 메세지의 바디에 저장되어 전달되는 값에 대한 캐릭터셋 변경해야 한다.

  • request.setCharacterEncoding("utf-8");

같은이름으로 전달된 값이 있는 경우 첫번재 전달값만 반환받아 저장 (ex) checkbox, select 등 다중 선택기능)로 전달된 값을 반환받을 때 사용

HttpServletRequest.getparameterValues(String name) : 같은 이름으로 전달되는 모든 값들을 얻어와 문자열 배열로 반환하는 메소드

  • String[] hobby=request.getParameterValues(”hobby”);

입력페이지(form.html)의 form태그를 이용하여 POST 방식으로 요청하여 실행되는 서블릿

⇒ 서블릿을 GET 방식으로 요청한 경우 비정상적인 요청

클라이언트가 웹프로그램을 비정상적인 요청한 경우에 대한 처리 방식

Form에서 버튼을 통해 전달받은 페이지가 아닌 응답페이지만을 url을 통해 접근하게 되면

에러페이지를 나오게 하는것이 정상적이다.

따라서 아래와 같은 메소드를 이용해 특정페이지를 정상적이지 않은 경로(정보)를 이용해 접근할 경우 에러페이지를 발생되게 해준다.

 

에러코드 발생페이지 응답

HttpServletRequest.getMethod() : 클라이언트의 요청방식을 반환하는 메소드

HttpServletResponse.sendError(int sc) : 클라이언트에게 에러코드 전달하는 메소드

response.sendError(HttpServletResponse.SC_BAD_REQUEST) = 400

response.sendError(HttpServletResponse.SC_BAD_REQUEST) = 405

if(request.getMethod().equals("GET")) {//서블릿을 GET 방식으로 요청한 경우 - 비정상적인 요청
(Status Code - 4XX or 5XX)를 전달하는 메소드
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}

 ★ HttpServletResponse.sendRedirect(string url)

: 클라이언트에게 301 상태코드와 URL 주소를 전달하는 메소드

⇒ 301 : 전달된 URL 주소의 웹프로그램을 요청하기 위한 상태 코드

  1. alert()를 사용해서 표시해도 괜찮음!

파일은 대용량일 수도 있기때문에 form태그를 사용 method는 post로 설정해야함!

enctype=”multipart/form-data”

 

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

→ 전달값을 문자로 읽어옴

전달값을 반환받아 저장 멀티파트 폼데이터로 전달된 값은 HttpServletRequest 인스턴스의 getParameter() 메소드를 호출하여 반환 불가능

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

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

 

★ UPLOAD

입력페이지에서 전달된 멀티파트 폼데이터를 처리하기 위한 클래스를 사용하여 서블릿 작성 → Apache 그룹에서 배포한 commons-fileupload 라이브러리의 클래스 사용 - 선택적 파일 업로드 → Oreilly 그룹에서 배포한 cos 라이브러리의 클래스 사용 - 무조건 파일 업로드

Oreilly 그룹에서 배포한 cos 라이브러리 파일을 다운로드 받아 프로젝트에 빌드(Build) 처리하는 방법

  1. http://www.servlets.com >> COS
  2. cos-20.09.zip 파일 압출 풀기 >> 압축 폴더 >> lib >> cos.jar 복사
  3. 프로젝트 >> src/main/webapp >> WEB-INF >> lib 폴더에 붙여넣기 ⇒ 라이브러리 파일이 자동으로 프로젝트에 빌드 - Web App Libraries 확인

폴더 = 디렉토리

깊숙히는 폴더 = 논리, 디렉토리 = 물리(unix)

 

전달된 파일을 저장하기 위한 서버 디렉토리의 시스템 경로를 반환받아 저장 ⇒ 작업 디렉토리(Workspace)가 아닌 웹디렉토리(WebApps)의 시스템 경로 반환

 

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

⇒ 작업 디렉토리에는 기존 업로드 파일이 없으므로 동기화 처리될 때 웹 디렉토리의 업로드 파일이 삭제가 된다.

 

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

MultipartRequest 클래스로 인스턴스 생성

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

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

 

MultipartRequest(HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy)

request : 요청정보를 저장한 HttpServletRequest 인스턴스 전달**(필수)**

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

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

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

⇒ policy : FileRenamePolicy 인스턴스 전달

⇒ FileRenamePolicy

    : 파일 업로드 처리시 입력파일과 같은 이름의 파일이 업로드 되는 서버 디렉토리에 이미 존재할 경우 전달파일의

    이름을 자동으로 변경하는 인스턴스

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

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

     ⇒ 인터페이스를 상속받아 객체 생성해줘야함!!!! 단, 자바는 가져다 쓰면 됨!!!

 

입력값을 반환

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

입력파일명을 반환

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

서버 디렉토리에 저장된 파일명과 동일한 파일을 전달할 경우 파일명을 변경하여 저장하기 위해 FileRenamePolicy 인터페이스를 상속받은 자식 클래스로 FileRenamePolicy 인스턴스를 생성하여 MultipartRequest 생성자의 매개변수에 전달

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

JoinServlet에 있는 메서드 다 확인!!!!

FileUploadServlet도 확인!!!!

 

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

쿠키(Cookie) : 서버(웹프로그램)와 클라이언트와의 연결 지속성을 제공하기 위한 클라이언트에 저장하는 값 - 쿠키는 접속 서버 정보를 이름(식별자)으로 하여 클라이언트에 저장

 

Cookie 클래스로 인스턴스() 생성

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

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

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

'Web Dev' 카테고리의 다른 글

62일차 Study  (0) 2022.01.11
61일차 Study  (0) 2022.01.11
59일차 Study  (0) 2022.01.06
58일차 Study  (0) 2022.01.04
57일차 Study  (0) 2022.01.04