JSP/Servlet | HTTPServletRequest 메소드

HTTP 요청을 하면서 전송한 값, 쿠키, 헤더 및 클라이언트 정보를 가져오는데 사용되는 것이 request이다.

이 Request 객체의 메소드에 대해서 정리를 해보았다.

시작하기 전

반환값 예는 아래와 같은 URL를 받았다고 가정하였다.

http://www.devkuma.com:8080/app/request.jsp?name=devkuma

주요 정보

메소드 반환값 예 설명
request.getRequestURL() http://www.devkuma.com:8080/app/request.jsp
request.getRequestURI() /app/request.jsp URL에서 스키마, 서버이름, 포트번호를 제외한 나머지 주소와 파라미터
request.getScheme() http http, https, ftp와 같은 프로토콜
request.getServerName() www.devkuma.com 서버 이름
request.getServerPort() 8080 서버 포트
request.getContextPath() /app 컨테스트 경로
request.getMethod() GET GET/POST 등의 HTTP 메소드
request.isSecure() false SSL 보안 여부. https와 같은 보안 채널의 사용 여부 true/false
request.getLocale() ko_KR 지역 정보
request.getProtocol() HTTP/1.1 사용하는 프로토콜. 프로토콜/메이저버전.마이너버전

Local 기본 정보 (서버 정보)

메소드 반환값 예 설명
request.getLocalAddr() 127.0.0.1
request.getLocalName() localhost
request.getLocalPort() 8080

Remote 정보 (클라이언트 정보)

메소드 반환값 예 설명
request.getRemoteAddr() 127.0.0.1
request.getRemoteHost() 127.0.0.1
request.getRemotePort() 60361

Session ID

메소드 반환값 예 설명
request.getRequestedSessionId() 39AE7AC19BC174D803C2A7BD8638E382 세션 ID
request.getSession().getId() 39AE7AC19BC174D803C2A7BD8638E382 세션 ID
request.isRequestedSessionIdFromCookie() true session id가 쿠키로 제공되었는지 여부
request.isRequestedSessionIdFromURL() false session id가 URL의 일부로 제공되었는지 여부
request.isRequestedSessionIdValid() true session이 아직 유효한지

Parameter 정보

메소드 반환값 예 설명
request.getParameterNames() java.util.Enumeration 모든 페라미터명을 반환한다.
request.getParameter(name) devkuma 페라미터명으로 페라미터 값을 반환한다.

모든 Parameter 값 표시

Enumeration params = request.getParameterNames();
while (params.hasMoreElements()) {
    String name = (String) params.nextElement();
    String value = request.getParameter(name);
    logger.debug(name + "=" + value);
}

표시되는 반환 값은 아래와 같다.

name=devkuma

반환 값은 /app/request.jsp?name=devkuma와 요청 했기에 위와 같이 표시되었다.

메소드 반환값 예 설명
request.getCookies() Array 모든 쿠키 값을 반환한다.
Cookie cookies[] = request.getCookies();
for(int i = 0; i < cookies.length; i++) {
    String name = cookies[i].getName();
    String value = cookies[i].getValue();
    logger.debug(name + "=" + value);
}

표시되는 반환 값은 아래와 같다.

JSESSIONID=39AE7AC19BC174D803C2A7BD8638E382

반환 예에서는 특별히 넣은 Cookie값이 없기 때문에 JSESSIONID만 표시된다.

Attribute

메소드 반환값 예 설명
request.getAttributeNames() Array 모든 어트리뷰트 값을 반환한다.
request.getAttribute(name) 모든 어트리뷰트 값을 반환한다.

모든 Attribute 값 표시

Enumeration<String> attrs = request.getAttributeNames();
while (attrs.hasMoreElements()) {
    String name = (String)attrs.nextElement();
    String value = (String)request.getAttribute(name);
    logger.debug(name + " : " + value);
}

Header 정보

메소드 반환값 예 설명
request.getHeaderNames() java.util.Enumeration 모든 헤더 명을 반환한다.
request.getHeader(“user-agent”) Mozilla/5.0 …. 헤더명으로 헤더 값을 반환한다.

모든 Header 값 표시

Enumeration<String> headers = request.getHeaderNames();
while (headers.hasMoreElements()) {
    String name = (String) headers.nextElement();
    String value = request.getHeader(name);
    logger.debug(name + "=" + value);
}

표시되는 반환 값은 아래와 같다.

host=www.devkuma.com:8080
connection=keep-alive
cache-control=max-age=0
upgrade-insecure-requests=1
user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding=gzip, deflate
accept-language=ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6,es;q=0.5
cookie=JSESSIONID=26356CFACA2FFA1B4AA25C75D291E028

Request Body

Request Body로 넘어오는 데이터를 얻는 방법은 아래와 같다.

DataInputStream dis = new DataInputStream(request.getInputStream());
String str = null
while ((str = dis.readLine()) != null) {
    logger.debug(new String(str.getBytes("ISO-8859-1"), "utf-8") + "/n");
    // euc-kr로 전송된 한글은 깨진다.
}