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) 사용 결과