요청과응답
요청 : 웹 클라이언트가 웹 서버에게 특정 페이지의 전송을 요구하는 것
응답 : 웹 서버가 웹 클라이언트에게 결과를 전송해 주는 것
request 객체와 response 객체(서블릿 컨테이너가 요청을 받고 응답을 제공할 수 있어야 함)
request 객체(클라이언트의 요청을 표현하는 JSP 내장 객체)
- 서블릿 컨테이너는 요청 정보를 서블릿에게 제공하기 위해 request 객체를 만들어 서블릿의 서비스 메소드 deGet(), doPost()에 인자로 제공
기능
클라이언트 관련 정보 읽기
메서드
getRemoteAddr()
- 리턴타입 : String
- 기능 : 클라이언트 컴퓨터의 IP주소를 리턴
getContentLength()
- 리턴타입 : long
- 기능 : 클라이언트가 전송한 요청 정보의 길이를 리턴 길이를 알 수 없는 경우 -1을 리턴
getCharacterEncoding()
- 리턴타입 : String
- 기능 : 클라이언트가 요청 정보를 전송할 때 사용한 문자열 인코딩을 리턴
getContentType()
- 리턴타입 : String
- 기능 : 클라이언트가 요청 정보를 전송할 때 사용한 문서 타입을 리턴
getProtocol()
- 리턴타입 : String
- 기능 : 클라이언트가 요청한 프로토콜을 리턴
getMethod()
- 리턴타입 : String
- 기능 : 클라이언트가 데이터를 전송할 때 사용한 방식을 리턴
getRequsetURI()
- 리턴타입 : String
- 기능 : 클라이언트가 요청한 URL에서 경로를 리턴
서버 관련 정보 읽기
메서드
getContextPath()
- 리턴타입 : String
- 기능 : JSP 페이지가 속한 웹 어플리케이션의 JSP 페이지의 경로를 리턴
getServerName()
- 리턴타입 : String
- 기능 : 연결할 때 사용한 서버 주소를 리턴
getServerPort()
- 리턴타입 : int
- 기능 : 연결할 때 사용된 서버의 포트 번호를 리턴
클라이언트가 전송한 데이터(파라미터) 읽기
메소드
getParameter(String name)
- 리턴타입 : String
- 기능 : 입력 폼을 통해 전송된 이름이 'name'인 파라미터 값을 리턴. 해당 이름이 없을 경우 null
getParameterValues(String name)
- 리턴타입 : String[]
- 기능 : 이름이 'name'인 파라미터의 모든 값을 배열로 리턴. 없을 경우 null
getParameterNames()
- 리턴타입 : Enumeration
- 기능 : 웹 브라우저가 전송한 파라미터의 이름 리턴
getParameterMap()
- 리턴타입 : Map
- 기능 : 웹 브라우저가 전송한 파라미터를 Map 형식으로 리턴. Map은 <파라미터 이름, 값>으로 구성
클라이언트가 전송한 헤더, 쿠키 정보 읽기
메소드
getHeader(String name)
- 리턴타입 : String
- 기능 : 지정한 이름의 헤더 값을 리턴
getHeaders(String name)
- 리턴타입 : Enumeration
- 기능 : 지정한 이름의 헤더 목록을 리턴
getheaderNames()
- 리턴타입 : Enumeration
- 기능 : 모든 헤더의 이름을 리턴
getIntHeader(String name)
- 리턴타입 : int
- 기능 : 지정한 헤더의 값을 정수로 리턴
getDateHeader(String name)
- 리턴타입 : long
- 기능 : 지정한 헤더의 값을 시간 값으로 리턴. 이때 시간은 1970년 1월 1일 이후로 흘러간 1/1000초 단위의 값을 가진다.
- 속성 처리
reponse 객체(클라이언트에게 응답을 제공하기 위한 인터페이스를 구현한 객체)
- 서블릿이 응답을 표현할 수 있도록 response 객체를 만들어 제공
기능
- 응답 헤더 정보 설정하기
- 다른 페이지로 강제 이동 시키기
쿠키 추가
- addCookie()
상태 코드 설정하기
- setStatus()
- 응답 메시지의 몸체를 만들기 위한 출력 스트림 객체 제공
- - getWriter() 또는 getOutputStream()
HTML 폼과 요청 파라미터의 처리
HTML 폼
- 입력을 위한 틀
- 서버로 전송할 데이터를 사용자가 입력하기 위한 것
폼과 request 객체
- 폼에 입력된 정보는 파라미터로 전송됨
- 서버는 request 객체를 이용하여 사용자가 보낸 데이터를 읽을 수 있음
웹 브라우저의 데이터 전송 방식
GET 방식에 의한 요청
- URL에 쿼리 문자열을 붙여 요청
- 예 : http://search.naver.com/search.naver?where=nexearch&query=JSP프로그래밍
길이에 제한이 있으며 보안에 취약
- 단순한 질의나 검색에 사용
- 서버는 파라미터의 이름과 값을 인코딩할 필요가 있음
POST 방식에 의한 요청
- HTTP 메시지의 몸체에 데이터를 전달
- 예 : <FORM ACTION="form_process.jsp" METHOD='POST'>
길이에 제한이 없으며 보안이 상대적으로 유리
- 게시글을 포스팅 할 때
- 암호나 신용 카드 정보를 보낼 때
전송 데이터의 인코딩
- 클라이언트는 특정 charset을 이용하여 데이터를 인코딩하여 전송
- 서버는 같은 charset으로 디코딩해야 함
request.setCharacterEncoding()
- 파라미터의 값을 디코딩할 때 사용할 charset을 지정할 수 있음