도메인 호스트 정보에 따라 구분을 해줘야 하는 경우가 생겼다.
request 객체에 대한 구글링 중 이미 만들어진 함수에 대한 코드나 이런 저런 포스팅이 많았지만
기본에 가장 충실한 내용이 있어서 펌질했다.
뭐.. 영어를 어느 정도 한다면 좀 더 깊이 있는 접근을 하길 권장한다.
http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html
아.. 영어 공부 진짜!
■ local의 기본 정보 (IP, Name, Port)
Local IP : <%=request.getLocalAddr()%>
Local Name : <%=request.getLocalName()%>
Local Port : <%=request.getLocalPort()%>
■ 클라이언트의 정보
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()%><br>
■ 요청에 대한 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 + "<br>");
}
%>
■ 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 + "<br>");
}
%>
/**
* cookie 값을 설정하는 메소드.
* @param HttpServletResponse response
* @param String cookieName
* @param String cookieValue
*/
public void setCookie(HttpServletResponse response, String cookieName, String cookieValue) {
int maxAge = (60 * 60 * 24 * 15); // 15day
setCookie(response, cookieName, cookieValue, maxAge);
}
/**
* cookie 값을 설정하는 메소드.
* @param HttpServletResponse response
* @param String cookieName
* @param String cookieValue
* @param int maxAge
*/
public void setCookie(HttpServletResponse response, String cookieName, String cookieValue, int maxAge) {
cookieValue = URLEncoder.encode(cookieValue);
Cookie cookie = new Cookie(cookieName, cookieValue);
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
}
/**
* cookie 값을 찾아서 리턴하는 메소드.
* @param HttpServletRequest request
* @param String cookieName
* @return String
*/
public String getCookie(HttpServletRequest request, String cookieName) {
Cookie[] cookies = request.getCookies();
String cookieValue = null;
for (int i = 0; i < cookies.length; i++) {
if (cookieName.equals(cookies[i].getName())) {
cookieValue = URLDecoder.decode(cookies[i].getValue());
break;
}
}
return cookieValue;
}
■ HTML 폼을 통해 넘어온 데이터를 받는 부분
<%
Enumeration eParam = request.getParameterNames();
while (eParam.hasMoreElements()) {
String pName = (String)eParam.nextElement();
String pValue = request.getParameter(pName);
out.println(pName + " : " + pValue + "<br>");
}
%>
■ 미리 설정한 attribute를 가져오는 부분
<%
Enumeration eAttr = request.getAttributeNames();
while (eAttr.hasMoreElements()) {
String aName = (String)eAttr.nextElement();
String aValue = request.getHeader(aName);
out.println(aName + " : " + aValue + "<br>");
}
%>
request.XXX
=============================================================
// 클라이언트 정보 및 서버정보 읽기
=============================================================
String getRemoteAddr() 웹서버에 연결한 클라이언트의 IP 주소를 가져온다.
long getContentLength() 클라이언트가 전송한 요청 정보의 길이를 구해온다.
String getCharacterEncoding() 클라이언트가 요청 정보를 전송할 때 사용한 캐릭터
의 인코딩을 구해온다.
String getContentType() 클라이언트가 요청 정보를 전송할 때 사용한 컨텐츠
의 타입을 구해온다.
String getProtocol() 클라이언트가 요청한 프로토콜을 구한다.
String getMethod() 웹 브라우저가 정보를 전송할 때 사용한 방식을 구한다.
String getRequestURI() 웹 브라우저가 요청한 URL에서 경로를 구한다.
String getContextPath() JSP페이지가 속한 웹 어플리케이션의 콘텍스트 경로를
구한다.
String getServerName() 연결할 때 사용한 서버 이름을 구한다.
String getServerPort() 서버가 실행 중인 포트 번호를 구한다.
=============================================================
//HTML폼과 요청파라미터 처리
=============================================================
String getParameter(String name) 이름이 name인 파라미터의 값을 구한다 (Request("name") 과 동일)
String[] getParameterValues(String name) 이름이 name인 모든 파라미터의 값을 배열로 가져온다.
java.util.Enumeration getParameterNames() 웹브라우저가 전송한 파라미터의
이름을 구한다.
java.util.Map getParameterMap() 웹브라우저가 전송한 파라미터의
맵을 구한다.
ex> name파람 = request.getParameter("name")
Enumeration enum = request.getParameterNames();
while(enum.hasMoreElements)
String name = (String)enum.nextElement();
=============================================================
//요청 헤더 정보의 처리
=============================================================
String getHeader(String name) 지정한 이름의 헤더값을 구한다.
java.util.Enumeration getHeasers(String name) 지정한 이름의 헤더 목록을 구한다.
java.util.Enumeration getHeaderName() 모든 헤더의 이름을 구한다.
int getIntHeader(String name) 지정한 헤더의 값을 정수값으로
읽어온다.
long getDateHeader(String name) 지정한 헤더의 값을 시간값으로
읽어온다 (1970년1월1일 이후로
흘러간 1/1000초 단위로 읽어온다.)
ex> Enumeration enum = request.getHeaderNames();
while(enum.hasMoreElements()){
String headerName = (String)enum.nextElement();
String headerValue = request.getHeader(headerName);
}
=============================================================
//값 설정하기(Attribute)
=============================================================
void setAttribute(String name, Object values) 이름이 name인 속성의 값을 values로 저장한다.
Object getAttribute(String name) 이름이 name인 속성의 값을 구한다.
void removeAttribute(String name) 이름이 name인 속성을 삭제한다.
java.util.Enumeration getAttributeNames() 속성의 이름 목록을 구한다.
## 주의 : setAttribute 에서 값이 Object이기 때문에 int, double과 같은 기본 데이터 타입은 속성값에 할당 할 수 없다. 이유는 Object가 아니기 때문이다. 이 경우엔 레퍼 클래스를 사용해야 한다.
Integer intValue = new Integer(100);
request.setAttribute("radio", intValue);
...
Integer intValue = (Integer)request.getAttribute("radio");
int value = intValue.intValue();