프로그래밍/JSP 2014. 6. 10. 23:31

클라이언트 IP 등의 정보를 가져오거나, 쿠키, 헤더, GET/POST로 전송한 값을 가져오는데 주로 사용하는 것이 바로 Request입니다.

JSP/Servlet에서 사용하는 Request 객체의 메소드를 대략적으로 정리해 봤습니다. 

이 Request 객체는 javax.servlet.http 패키지에 속한 HTTPServletRequest 인터페이스로서 javax.servlet.ServletRequest 인터페이스에서 상속을 받았습니다. 

그래서 제가 정리하려는 내용은 javadoc의 다음 부분에 아주 자세히 나와 있습니다. 
나중에 영어로 된 거 또 읽어보기 싫어서 정리해보는 거네요~~ 

http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/HttpServletRequest.html 

http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/ServletRequest.html

주로 사용하는 정보만을 보여주는 간단한 jsp 파일을 구성해 봤습니다. 
jsp 파일 두개로 되어 있구요.. 소스는 걍 여기서 받으면 됩니다. 소스받기 : request.zip

index.jsp 파일을 열고 난 후.. 링크를 클릭하면 request에서 처리할 수 있는 정보들이 나타납니다. 
request.jsp 파일의 내용이 주로 설명할 것인데요.. 뭐 이미 잘 알려진 거라 특별히 새로울 것은 없습니다. 

먼저 local의 기본 정보(IP, Name, Port)를 보여줍니다. local이라 하면 일반적으로 서버를 의미하는 것이겠죠.. 
Local IP : <%=request.getLocalAddr()%>
Local Name : <%=request.getLocalName()%>
Local Port : <%=request.getLocalPort()%>

다음으로 클라이언트의 정보입니다. IP, Host, Port를 가져올 수 있습니다.
Remote IP : <%=request.getRemoteAddr()%>
Remote Host : <%=request.getRemoteHost()%>
Remote Port : <%=request.getRemotePort()%>

이어서 서버 이름과 포트가 있는데요.. 일반적으로 local 기본정보와 동일하겠죠.. 
Server Name : <%=request.getServerName()%>
Server Port : <%=request.getServerPort()%>

지역 정보입니다. 대부분 한국을 의미하는 ko가 나올 것 같네요..
Locale : <%=request.getLocale()%>

사용하는 프로토콜입니다. "프로토콜/메이저버전.마이너버전" 의 형태입니다.
Protocol : <%=request.getProtocol()%>

http, https, ftp와 같은 것을 의미합니다. 
Scheme : <%=request.getScheme()%>

https와 같은 보안 채널의 사용 여부입니다. true/false 값으로 되어 있네요..
Secure Channel : <%=request.isSecure()%>

요청에 대한 URI, URL, 컨텍스트 경로, 서블릿 경로, GET/POST등의 메소드를 나타냅니다.
Request's URI : <%=request.getRequestURI()%>
Request's URL : <%=request.getRequestURL()%>
Context Path : <%=request.getContextPath()%>
Servlet Path : <%=request.getServletPath()%>
Method : <%=request.getMethod()%>

세션 ID에 대한 정보들입니다. 
Session ID : <%=request.getRequestedSessionId()%>
Session ID from Cookie : <%=request.isRequestedSessionIdFromCookie()%>
Session ID from URL : <%=request.isRequestedSessionIdFromURL()%>
Session ID is still valid : <%=request.isRequestedSessionIdValid()%>


그리고 다음은 Header 정보를 보는 방법입니다. 
<%
 Enumeration eHeader = request.getHeaderNames();
 while (eHeader.hasMoreElements()) {
  String hName = (String)eHeader.nextElement();
  String hValue = request.getHeader(hName);

  out.println(hName + " : " + hValue);
 }
%>

Request 객체를 통해서 쿠키 정보를 보는 방식이구요~
<%
 Cookie cookies[] = request.getCookies();
 for (int i=0; i < cookies.length; i++) {
  String name = cookies[i].getName();
  String value = cookies[i].getValue();

  out.println(name + " : " + value);
 }
%>

HTML 폼을 통해 넘어온 데이터를 받는 부분입니다. 
<%
 Enumeration eParam = request.getParameterNames();
 while (eParam.hasMoreElements()) {
  String pName = (String)eParam.nextElement();
  String pValue = request.getParameter(pName);

  out.println(pName + " : " + pValue);
 }
%>

미리 설정한 attribute를 가져오는 부분이구요..
<%
 Enumeration eAttr = request.getAttributeNames();
 while (eAttr.hasMoreElements()) {
  String aName = (String)eAttr.nextElement();
  String aValue = request.getHeader(aName);

  out.println(aName + " : " + aValue);
 }
%>

갑자기 Request에 대한 정보를 파악할 필요가 있어 정리하면서 올려봅니다.

//