반응형

Request 객체 메소드 간단정리

자바 Request 메소드들을 간단히 정리해 보았다.

자주사용하면서도 매번 찾게 되는 휘발성 기억력 때문에 정리를 해보았다.

깔끔하게 정리 해놓으신 분들도 많다는 것을 알지만 

정리를 다시 해본다는 의의를 가지고 글을 쓰게 되었다.


String getParameter(name) :  파라미터 변수 name에 저장된 변수를 얻어내는 메소드로, 이때 변수의 값은 String으로 리턴된다. 

String[] getParameterValues(name) : 파라미터 변수 name에 저장된 모든 변수값을 얻어내는 메소드로, 이때 변수의 값은 String 배열로 리턴된다. checkbox에서 주로 사용된다.

Enumeration getParameterNames() : 요청에 의해 넘어오는 모든 파라미터 변수를 java.util.Enumeration 타입으로 리턴한다. 


String getProtocol() : 웹 서버로 요청 시, 사용 중인 프로토콜(HTT/1.1)을 리턴한다.

String getScheme() : 웹 서버로 요청시, (http,https,ftp 등)을 리턴한다.

String getServerName() : 웹 서버로 요청 시, 서버의 도메인 이름을 리턴한다.

int getServerPort() : 웹 서버로 요청 시, 서버의 Port번호를 리턴한다.

String getMethod() : 웹 서버로 요청 시, 요청에 사용된 요청 방식(GET, POST, PUT 등)을 리턴한다. 

String getQueryString() : 웹 서버로 요청 시, 요청에 사용된 QueryString을 리턴한다. 

String getRequestURI() : 웹 서버로 요청 시, 요청에 사용된 URL 로부터 URI 값을 리턴한다. 

String getRemoteAddr() : 웹 서버로 정보를 요청한 웹 브라우저의 IP주소를 리턴한다. 

String getContextPath() : 해당 JSP 페이지가 속한 웹 어플리케이션의 콘텍스트 경로를 리턴한다. 

String getHeader(name) : 웹 서버로 요청 시, HTTP 요청 헤더(header)의 헤더 이름인 name에 해당하는 속성값을 리턴한다. 

Enumeration getHeaderNames() : 웹 서버로 요청 시, HTTP 요청 헤더(header)에 있는 모든 헤더 이름을 리턴한다. 

boolean isSecure() : SSL 보안 여부. https와 같은 보안 채널의 사용 여부 true/false

Locale getLocale() : 지역 정보(ko_KR)


Local 정보 (서버 정보)

getLocalAddr() : 반환값 127.0.0.1 IP 값으로 반환

getLocalName() : 반환값 localhost 도메인 값으로 반환

getLocalPort() : 반환값 8080 등


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

getRemoteAddr() : 클라이언트 IP 값 반환 

getRemoteHost() : 클라이언트 HOST 값 반환

getRemotePort() : 클라이언트 port

request.getRemoteAddr()로 IP 값이 정확하지 않을 때가 있다.

예를 들어 서버가 로드 밸런스 뒤에 있을 경우 메소드는 원격 클라이언트 IP를 찾아 주는 것이 아니고 로드 밸런스 IP를 반환한다.

이 경우에는 request에 추가로 헤더가 붙기 때문에 IP를 얻어 낼수 있다.

아래는 IP 주소를 얻을 수 있는 코드

public static String getClientIpAddr(HttpServletRequest request){

String ip = request.getHeader("X-Forwarded-For");

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getHeader("Proxy-Client-IP");  

    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getHeader("WL-Proxy-Client-IP");  

    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getHeader("HTTP_CLIENT_IP");  

    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getHeader("HTTP_X_FORWARDED_FOR");  

    }  

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  

        ip = request.getRemoteAddr();  

    }  

    return ip; 

}

request 메소드 getRequestURL() 과 getRequestURI() 차이

request.getRequestURL() : 호출된 FULL 주소를 가져 온다.

request.getRequestURI() : 도메인이후 하부 주소를 가져 온다.

예) https://www.testRequestCall.com/testcall.jsp 호출 할 경우

getRequestURL() 호출 결과 값은 

https://www.testRequestCall.com:80/testcall.jsp

프로토콜 뿐 아니라 포트까지 표시 된다.

getRequestURI() 호출 결과 값은 /testcall.jsp 값을 가져 온다.


모든 Parameter 값 표시 코드

Enumeration params = request.getParameterNames();

while (params.hasMoreElements()) {

    String name = (String) params.nextElement();

    String value = request.getParameter(name);

    logger.debug(name + "=" + value);

}


모든 Cookie 값 표시 코드

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);

}


모든 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 값 표시 코드

Enumeration<String> headers = request.getHeaderNames();

while (headers.hasMoreElements()) {

    String name = (String) headers.nextElement();

    String value = request.getHeader(name);

    logger.debug(name + "=" + value);

}


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로 전송된 한글은 깨진다.

}


우리는 모두 운이 좋다.

하나의 page가 오늘 생겼다.

감사합니다. 고맙습니다.

반응형

+ Recent posts