반응형

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가 오늘 생겼다.

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

반응형
반응형

AJAX는 쉽게 말하면, 자바스크립트를 통해서 서버에 데이터를 요청하는 것입니다. 

HTML from 태그를 사용하지 않고 javascript를 사용하기 때문에 서버에 로딩된 데이터를 페이지에 보여주기 위해 새로운 HTML페이지로 이동 할 필요가 없기 때문에 "새로고침"을 할 필요가 없습니다.

또한 그부분만 로딩 되기 때문에 속도가 빠릅니다. 본래 명칭은 아래에 글을 참고하세요


Asynchronos 

 1. 바로해석을 하면 "비동기적" 이라는 뜻입니다.

 2. 비동기적이라는 것은, 클라이언트(사용자)가 서버에 요청을 보내놓고도 응답을 기다리며 대기 하는 것이 아닌 프로그램은 계속 실행이 된다는 의미 입니다.

    다시 말하면 먼저 요청한 것에 대한 것이 있다고 해서 그 응답을 기다리고 다음것이 실행 되는 것이 아닙니다. 

    그래서 어떠한 경우에는 나중에 요청한 결과가 먼저 실행되어 버리는 경우도 있습니다.


Javascript

 1. 자바스크립트는 웹 브라우저에 대한 스크립트 언어로 만들어진 언어 입니다.


XML

 1. XML은 우선 간단히 데이터 형식의 일종으로 이해하면 됩니다. 

 2. XML은 "Extensible Markup Language" 줄임말 입니다. 해석하면 확장가능한 표시 언어 입니다. 

    Markup Language는 데이터를 태그 항목으로 표시한다는 것입니다. 

    HTML 도 일종의 Markup Language 입니다. 

    대신 데이터를 태그항목으로 설정하는데 HTML에 비해 자유도가 높습니다. 


AJAX의 본래 명칭

 1. AJAX의 본래 명칭은 XHR(XML Http Request) 입니다. 해석하자면 HTTP request를 서버에 보낸다는 의미 입니다.


JSON

 1. JSON도 일종의 데이터 형태 입니다. XML은 자바스크립트에서 사용하기 불편한 점이 많기 때문에 주로 JSON 데이터 형식을 많이 씁니다.

 2. JSON은 객체 또는 배열 등을 이용해서 표현 됩니다. 


AJAX 4단계 과정

 1. XMLHTTP request object를 생성합니다.

    request(요청)를 보낼 준비를 브라우저에게 시키는 과정입니다.

 2. callback 함수를 만듭니다.

    서번에서 response(응답)이 왔을때 실행되는 함수 입니다.

 3. open request

    브라우저에게 두가지 정보를 넘깁니다. 

    request를 보내기 위해 사용할 메소드 예를들면 post 이고 request 가 이동할 URL 입니다. 

 4. request를 보냅니다.



예제 코드 

---------------------------------------------------------------------------------------------------------------------

var xhr = new XMLHttpRequest();  // xhr 객체를 생성한다.

xhr.onreadystatechange = function(){  // request 변화여부를 확인할수 있는 객체로 function을 실행한다.

 if(xhr.readyState===4{

 document.getElementById('ajax').innerHTML = xhr.responseText; //response 이다.

 }

}

xhr.open('GET',"test.html");  // html get 방식 메소드와 URL를 낼 준비를 한다.

xhr.send();

---------------------------------------------------------------------------------------------------------------------

onreadystatechange

 1. AJAX에서 이벤트는 사용자가 form를 submit하는 것이 일종의 이벤트이다. 이 form이 제대로 입력되었는지 AJAX에 어떠한 변화가 있는지 여부에 대응하는 프로그램이다.


readyState

 1. XHR object는 response가 돌아 왔는지 아닌지를 추적하는 property 이다.

    response 값이 4 이면 response 가 돌아 온것이다.


open send 

 1. open()는 보낼 준비를 시키는 것이지 보내는 것은 send() 메소스가 한다. 


감사합니다. 고맙습니다. 운이 좋습니다. 

반응형

+ Recent posts