차근차근/JAVA JSP

Request 객체

예쁜꽃이피었으면 2014. 7. 26. 01:39

 

http://www.silverwolf.co.kr/9919

ServletRequest <- HttpServletRequest

ServletRequest interface
(javax.servlet.ServletRequest)
  • getAttribute(String)
  • getContentLength()
  • getInputStream()
  • getLocalPort()
  • getRemotePort()
  • getServerPort()
  • getParameter(String)
  • getParameterValues(String)
  • getParameterNames()
  • 기타 메소드...
HttpServletRequest interface
(javax.servlet.http.HttpServletRequest)
  • getContextPath()
  • getCookies()
  • getHeader(String)
  • getIntHeader(String)
  • getMethod()
  • getQueryString()
  • getSession()
  • 기타 메소드...

파라미터 말고 Request 객체에서 얻을 수 있는 정보

 

클라이언트 플랫폼 정보 및 브라우저 정보
1.String client = request.getHeader("User-Agent");
Request에 관련된 쿠키
1.Cookie[] cookies = request.getCookies();
클라이언트의 세션 정보
1.HttpSession session = request.getSession();
Request의 HTTP 메소드
1.String theMethod = request.getMethod();
Request의 입력 스트림
1.InputStream input = request.getInputStream();

헤더 정보

헤더 정보는 이름과 값의 쌍으로 이루어져 있습니다. 이름에는 "User-Agent", "Host" 등이 있고, 값으로는 "Mozilla/5.0(Machintosh; U; PPC Mach-O; en-US; rv:1.4) Gecko/20030624 Netscape/7.1", "www.homepage.com" 이라는 값들이 있습니다. 헤더 정보는 항상 문자 값만 존재합니다. 하지만 어떤 헤더 정보의 문자열은 실제로는 숫자 값입니다. 예를 들면, "Content-Length" 헤더 정보에는 메시지 몸체에 들어있는 바이트 수가 들어있습니다. "Max-Forwards" 헤더 정보에는 얼마나 많은 라우터를 거쳐 올 수 있는가(네트워크에선 이를 홉(Hop)이라 부릅니다)하는 횟수가 들어있습니다(보통 이 값은 요청이 돌아오지 않고 어디선가 정체되어 있을 경우, 디버깅하기 위해 사용합니다).
getHeader()를 사용해서 "Max-Forwards" 값은 다음과 같이 읽어옵니다.
1.String forwards = request.getHeader("Max-Forwards");
2.int forwardsNum = Integer.parseInt(forwards);

이 코드는 제대로 작동을 하지만, 리턴되는 값이 정수라는 보장이 있을 때만 사용해야 합니다. 위의 두 행의 코딩을 한 행으로 바꿔놓은 메소드가 바로 getIntHeader()입니다.

 

1.int forwardsNum = request.getIntHeader("Max-Forwards");


getRemotePort()

이 메소드 이름을 보고 바로 드는 의문은 어디로부터 원격(Remote)이냐는 것입니다. 서버가 이 질문을 했다면 서버의 원격인 클라이언트가 원격일 테고, 클라이언트가 이 질문을 했다면 서버가 원격일 것입니다. 그런데 여기서 잘 생각해보면 이 메소드는 당연히 서버에서 실행되니깐 여기서 원격은 클라이언트가 됩니다. 따라서 getRemotePort()는 요청을 보낸 클라이언트의 포트를 의미합니다. 다시 한번 말하지만 서블릿에서 실행되는 것들의 원격지는 클라이언트를 의미합니다.

 

getServerPort(), getLocalPort()

먼저 getServerPort()를 설명하자면 "요청이 들어온 서버 포트는 어딘가?" 라는 질문을 던졌을 때 바로 그 포트를 말합니다. 그 다음 getLocalPort()는 "그래서 결국 서버의 어떤 포트에 요청이 물렸는데?" 에서의 포트입니다. 부연 설명을 하자면, 사용자의 요청은 서버가 리스닝하고 있는 특정 포트로 들어옵니다. 요청이 한 두개 들어오는 것이 아니므로, 서버는 각각의 요청을 새로운 포트를 만들어 스레드를 할당하여 처리합니다. 이것이 바로 동시에 여러 클라이언트를 핸들링하는 방식입니다. 여기서 처음 들어오는 포트가 바로 ServerPort고, 스레드를 위한 포트가 LocalPort입니다.

 

반응형

'차근차근 > JAVA JSP' 카테고리의 다른 글

URLConnection  (0) 2014.07.26
Http 기초  (0) 2014.07.26
Response 객체  (0) 2014.07.26
Response 객체를 이용한 파일 전송  (0) 2014.07.26
[Tip] getWriter() 와 getOutputStream() 차이점  (0) 2014.07.26