WebApp HttpServletRequest 객체의 함수 모음

황제낙엽 2008.01.28 13:58 조회 수 : 582 추천:226

sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  
SERVER_NAME            request.getServerName()                            <- 서블릿 내에서만 가능
SERVER_SOFTWARE    request.getServletContext().getServerInfo()        <- 서블릿 내에서만 가능
SERVER_PROTOCOL    request.getProtocol() 
SERVER_PORT             request.getServerPort() 
REQUEST_METHOD      request.getMethod() 
PATH_INFO                  request.getPathInfo() 
PATH_TRANSLATED     request.getPathTranslated() 
SCRIPT_NAME             request.getServletPath() 
DOCUMENT_ROOT       request.getRealPath("/") 
CONTEXT_PATH          request.getContextPath() 
QUERY_STRING            request.getQueryString() 
REMOTE_HOST            request.getRemoteHost() 
REMOTE_ADDR            request.getRemoteAddr() 
AUTH_TYPE                 request.getAuthType() 
REMOTE_USER            request.getRemoteUser() 
CONTENT_TYPE          request.getContentType() 
CONTENT_LENGTH      request.getContentLength() 
HTTP_ACCEPT             request.getHeader("Accept") 
HTTP_USER_AGENT      request.getHeader("User-Agent") 
HTTP_REFERER            request.getHeader("Referer") 

 

 
out.println("SERVER_PROTOCOL : " + request.getProtocol() + "<br/>");   
out.println("SERVER_PORT : " + request.getServerPort() + "<br/>");    
out.println("REQUEST_METHOD : " + request.getMethod() + "<br/>");   
out.println("PATH_INFO : " + request.getPathInfo() + "<br/>");   
out.println("PATH_TRANSLATED : " + request.getPathTranslated() + "<br/>");   
out.println("SCRIPT_NAME : " + request.getServletPath() + "<br/>");   
out.println("DOCUMENT_ROOT : " + request.getRealPath("/") + "<br/>");
out.println("CONTEXT_PATH : " + request.getContextPath() + "<br/>");
out.println("QUERY_STRING : " + request.getQueryString() + "<br/>");   
out.println("REMOTE_HOST : " + request.getRemoteHost() + "<br/>");   
out.println("REMOTE_ADDR : " + request.getRemoteAddr() + "<br/>");   
out.println("AUTH_TYPE : " + request.getAuthType() + "<br/>");   
out.println("REMOTE_USER : " + request.getRemoteUser() + "<br/>");   
out.println("CONTENT_TYPE : " + request.getContentType() + "<br/>");   
out.println("CONTENT_LENGTH : " + request.getContentLength() + "<br/>");   
out.println("HTTP_ACCEPT : " + request.getHeader("Accept") + "<br/>");   
out.println("HTTP_USER_AGENT : " + request.getHeader("User-Agent") + "<br/>");   
out.println("HTTP_REFERER : " + request.getHeader("Referer") + "<br/>");   
out.println("==========================================================================<br/>");   
java.util.Enumeration<String> headerNames = request.getHeaderNames();   
while(headerNames.hasMoreElements()) {   
   String headerName = headerNames.nextElement();   
   String headerValue = request.getHeader(headerName);   
   out.println("<div  style='font-size=20pt; color=blue'>");   
   out.println(headerName+":"+headerValue);   
   out.println("</div>");   

 

 

<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>클라이언트 및 서버 정보</title></head>
<body>

    클라이언트IP = <%= request.getRemoteAddr() %> <br>
    요청정보길이 = <%= request.getContentLength() %> <br>
    요청정보 인코딩 = <%= request.getCharacterEncoding() %> <br>
    요청정보 컨텐트타입 = <%= request.getContentType() %> <br>
    요청정보 프로토콜 = <%= request.getProtocol() %> <br>
    요청정보 전송방식 = <%= request.getMethod() %> <br>
    요청 URI = <%= request.getRequestURI() %> <br>
    컨텍스트 경로 = <%= request.getContextPath() %> <br>
    서버이름 = <%= request.getServerName() %> <br>
    서버포트 = <%= request.getServerPort() %> <br>

</body>
</html>

 

 

04 ServletRequest와 HttpServletRequest의 구분

 

 ServletRequest는 기본적인 클라이언트 요청에 관한 모든 정보를 가지고 있습니다. 그리고 이 인터페이스는 다시 HttpServletRequest로 확장하여 HTTP프로토콜상에서 할 수 있는 일들이 포함되어져 있습니다. 이 HttpServletRequest는 서블릿의 service의 매개변수의 하나로 서블릿 프로그래머가 클라이언트의 요청에 관한 작업들을 핸들할 수 있도록 하는 중요한 역할을 담당하고 있습니다. ServletRequest인터페이스의 구조를 살펴보면 다음과 같은 부분으로 나눌 수 있습니다.

 

ServletRequest의 구조

n        클라이언트 자체에 대한 정보추출

n        클라이언트가 전송한 정보 추출

 

 이러한 구조에 따라서 ServletRequest의 메서드를 분류해 보면 다음과 같습니다.

 

ServletRequest의 멤버메서드

클라이언트 자체에 대한 정보추출

Object getAttribute(String name): 주어진 이름을 갖는 속성값을 얻습니다.

Enumeration getAttributeNames(): 이 요청이 갖는 속성들의 이름에 대한 Enumeration 객체를 얻습니다.

void setAttribute(String key, Object o): 주어진 이름의 속성을 설정합니다.

void remvoeAttribute(String key): 주어진 이름의 속성을 제거합니다.

String getProtocol(): "HTTP/1.1" 과 같은 형식으로 프로토콜 및 major/minor 버전을 얻습니다.

String getRemoteAddr(): 요청한 클라이언트의 IP(Internet Protocol) 주소를 얻습니다.

String getRemoteHost(): 요청한 클라이언트의 호스트 이름을 얻습니다.

String getScheme(): http, https, 또는 ftp 등과 같은 요청을 위해 사용된 방법의 이름을 얻습니다.

String getServerName(): 요청을 받은 서버의 이름을 얻습니다.

int getServerPort(): 요청을 받은 포트 번호를 얻습니다.

 

ServletRequest의 멤버메서드

클라이언트가 전송한 정보추출

String getCharacterEncoding(): 이 요청에 사용된 문자 인코딩을 얻습니다.

int getContentLength(): 이 요청에 포함되어 있는 데이터의 길이를 구하며, 만약 길이를 알 수 없는 경우에는 ?1이 리턴됩니다.

String getContentType(): 요청에 포함되어 있는 내용에 대한 MIME 타입 또는 모를 경우에는 null을 얻습니다.

Enumeration getParameterNames(): 매개변수들의 이름에 대한 Enumeration 객체를 얻습니다.

String getParameter(String name): 주어진 이름의 매개변수가 갖는 값을 얻습니다.

String[] getParameterValues(String name): 주어진 이름으로 전달된 매개변수가 갖는 모든 값을 문자열 배열로 얻습니다. 매개변수가 다중 선택이 가능한 리스트(list) 또는 선택박스(choicebox)의 값이라면, 여러 개의 값이 하나의 이름으로 전달될 수 있습니다.

BufferedReader getReader(): 요청 바디로부터 문자 인코딩에 따라 텍스트를 읽어들이기 위한 BufferedReader 객체를 얻습니다.

ServletInputStream getInputStream(): 이 요청의 바디로부터 바이너리 데이터를 읽어들이기 위해, 한 번에 한 라인씩 읽을 수 있는 ServletInputStream 객체를 얻습니다.

 

이와 같은 메서드들은 HTTP 프로토콜에 맞추어져 있는 것이 아니라 일반적인 네트웍 통신기반에 의해서 사용되는 메서드입니다. 그래서 HTTP프로토콜에 존재하는 Session과 Cookie같은 정보를 추출하는 작업은 할 수 없습니다. 그렇기 때문에 HTTP프로토콜을 지원하는 HttpServletRequest에서는 당연히 HTTP프로토콜에 사용되는 대부분의 기능을 포함하고 있습니다. HTTP프로토콜상에서 사용되는 기능별로 분류해 보면 다음과 같습니다.

 

HttpServletRequest의 기능별 분류

n        request객체의 요청 파라미터

n        request객체의 HTTP 헤더

n        request객체의 세션 데이터

n        request객체의 쿠키

n        request객체의 요청에 사용된 URL/URI

 

이러한 분류에 따라 메서드를 나누어 보면 다음과 같습니다.

 

request객체의 요청 파라미터

public String getParameter(String name) : 주어진 이름의 매개변수가 갖는 값을 얻습니다. 지정된 이름의 파라미터가 존재하지 않을 경우 null을 반환합니다.

public Enumeration getParameterNames(): 매개변수들의 이름에 대한 Enumeration으로 반환합니다.

public String[] getParameterValues(String name) : 주어진 이름으로 전달된 매개변수가 갖는 모든 값을 문자열 배열로 얻습니다. 매개변수가 다중 선택이 가능한 리스트(list) 또는 선택박스(choicebox)의 값이라면, 여러 개의 값이 하나의 이름으로 전달될 수 있지만 매개변수가 하나의 값을 갖는 경우라면 getParameter(String name)를 사용하는 것이 낫습니다.

 

 

request객체의 HTTP 헤더

public String getHeader(String headerName) : HTTP 요청헤더에 지정된 headerName의 값을 문자열로 반환합니다. 만약 HTTP 요청헤더에 headerName의 값이 존재하지 않는다면 null을 반환합니다.

public Enumeration getHeaderNames() : HTTP 요청헤더에 포함된 모든 헤더의 이름을 Enumeration으로 반환합니다.

public Enumeration getHeaders (String headerName) : HTTP 요청헤더에 포함된 headerName의 모든 값을 Enumeration으로 반환합니다.

public int getIntHeader (String headerName) : HTTP 요청헤더에 포함된 headerName의 값을 int로 반환합니다. 지정된 headerName의 값을 int로 변환 할 수 없는 경우 NumberFormatException이 발생하고 headerName 헤더가 HTTP 요청헤더에 존재하지 않을 경우에는 ?1을 반환합니다.

public long getIDateHeader (String headerName) : HTTP 요청헤더에 포함된 headerName의 값을 millisecond 변환하여 long으로 반환합니다. 지정된 headerName의 값을 int로 변환 할 수 없는 경우 IllegalArgumentException이 발생하고 headerName 헤더가 HTTP 요청헤더에 존재하지 않을 경우에는 ?1을 반환합니다.

 

request객체의 세션 데이터 

public HttpSession getSession() : 요청을 시도한 클라이언트에 지정된 HttpSession 객체를 얻습니다.  이전에 생성된 HttpSession 객체가 없었다면 새로운 세션 객체를 생성합니다. 

public HttpSession getSession(boolean create) : 요청을 시도한 클라이언트에 지정된 HttpSession 객체를 얻습니다. create가 false로 지정된 경우 해당 클라이언트에 대해 생성된 HttpSession 객체가 없는 경우 null을 반환합니다. create가 treu로 지정된 경우 이미 생성된 HttpSession 객체를 반환하고 만약 해당 클라이언트에 생성된 HttpSession 객체가 없는 경우 새로운 세션 객체를 생성하여 리턴합니다.

public String getRequestedSessionId(): 요청을 시도한 클라이언트의 세션 id를 문자열로 반환합니다.

public String isRequestedSessionId() : 요청을 시도한 클라이언트의 세션 id가 유효하면 true 아니면 false를 리턴합니다.

isRequestedSessionIdFromCookie() : 요청을 시도한 클라이언트의 세션 id가 쿠키로 전달된 경우 true 아니면 false를 리턴합니다.

isRequestedSessionIdFromURL() : 요청을 시도한 클라이언트의 세션 id가 URL에 포함된 경우 true 아니면 false를 리턴합니다.

 

request객체의 쿠키 

public Cookie[] getCookies() : 클라이언트의 요청에 포함된 쿠키를 Cookie배열로 리턴합니다.

 

request객체의 요청에 사용된 URL/URI 

public String getRequestURI() : 요청에 사용된 URL로부터 URI부분을 문자열로 리턴합니다.  

public String getQueryString():요청에 사용된 쿼리 문자열을 문자열로 리턴합니다..

public String getMethod() : 요청에 사용된 요청방식을 문자열로 리턴합니다.

 

 

 

1. request 객체

① JSP 페이지에서 가장 많이 사용되는 기본 객체로서 웹 브라우저의 요청과 관련이 있음

② 웹 브라우저에 웹 사이트의 주소를 입력하면 웹 브라우저는 해당 웹 서버에 연결한 후 요청 정보를 전송하는데 이 요청 정보를 제공하는 것이 request 기본 객체이다.

1) request 기본 객체의 클라이언트 및 서버 정보 관련 메서드

메서드

리턴 타입 

설명 

getRemoteAddr()

String

웹 서버에 연결한 클라이언트의 IP 주소를 구한다. 게시판이나 방명록 등에서 글 작성자의 IP 주소가 바로 이 메서드를 사용하여 구한 것

getContentLength() 

long

클라이언트가 전송한 요청 정보의 길이를 구한다. 전송된 데이터의 길이를 알 수 없는 경우 -1을 리턴한다.

getCharacterEncoding()

String

클라이언트가 요청 정보를 전송할 때 사용한 캐릭터의 인코딩을 구함

getContentType()

String

클라이언트가 요청 정보를 전송할 때 사용한 컨텐츠의 타입을 구함

getProtocol()

String

클라이언트가 요청한 프로토콜을 구함 

getMethod()

String

웹 브라우저가 정보를 전송할 때 사용한 방식을 구함

getRequestURI() 

String

웹 브라우저가 요청한 URL에서 경로를 구함

getServerName()

String

연결할 때 사용한 서버 이름을 구함

getServerPort()

int

서버가 실행중인 포트 번호를 구함

 

​(1) 관련 메소드 사용하기 

2.jpg

 

 

(2) 사용 결과

3.jpg

 

 

 

번호 제목 글쓴이 날짜 조회 수
123 상속과 연관(association, composition) 황제낙엽 2008.04.10 436
» HttpServletRequest 객체의 함수 모음 file 황제낙엽 2008.01.28 582
121 ObjectCache클래스 와 Server/Client프로그램 file 황제낙엽 2007.11.07 490
120 ObjectCache시스템의 구현을 위한 추가 고려사항 황제낙엽 2007.11.04 459
119 문제 : 간단한 ObjectCache 프로그램을 구현하라 황제낙엽 2007.11.01 558
118 ObjectCache 클래스를 구현한 예제 소스 파일들 황제낙엽 2007.11.01 432
117 LinkedHashMap 를 이용한 LRU 캐쉬 구현 황제낙엽 2007.11.03 766
116 J2SE 5.0 에서의 QUEUE와 DELAYED 프로세싱 황제낙엽 2007.11.02 449
115 J2EE object-caching frameworks (ObjectCache) 황제낙엽 2007.11.02 1852
114 Object Caching in a Web Portal Application Using JCS (ObjectCache) 황제낙엽 2007.11.02 490
113 Java Object Cache | Patterns 'N J2EE (ObjectCache) 황제낙엽 2007.11.01 530
112 Runtime 클래스를 이용한 JVM 메모리 사용량 확인 황제낙엽 2007.11.05 470
111 자바 애플리케이션에서 동적으로 PDF 파일 생성하기 황제낙엽 2007.10.03 391
110 싱글사인온(single sign-on)으로 엔터프라이즈 자바 인증을 단순하게! 황제낙엽 2007.10.03 444
109 [BPP] 게시판 페이징 로직 분석 - M1.3 file 황제낙엽 2007.09.26 294
108 [HttpURLConnection] 2초후에 연결 끊어주는 URLConnection 예제 황제낙엽 2007.09.08 481
107 Assertions : 비교 확인, 조건 확인, Null 확인 황제낙엽 2007.09.02 418
106 [BPP] 게시판 페이징 로직 분석 - M1.2 - SQLMap(ibatis) 지원 file 황제낙엽 2007.08.29 338
105 J2SE 5.0 - 컨스턴트와 메서드에 static imports 사용하기 황제낙엽 2007.08.28 469
104 J2SE 5.0 - 향상된 루프문 황제낙엽 2007.08.27 447