본문 바로가기
프로그래밍/JSP

request 기본 객체

by 가므자 2012. 2. 27.

request 기본 객체는 JSP 페이지에서 가장 많이 사용되는 기본 객체로서 웹 브라우저의 요청과 관련이 있다.
웹 브라우저에 웹 사이트의 주소를 입력하면 웹 브라우저는 해당 웹 서버에 연결한 후,
웹 서버에 요청 정보를 전송한다.
클라이언트가 전송한 요청 정보를 제공하는 것이 바로 request 기본 객체이다.

- 클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
- 서버에 관련된 정보 읽기 기능
- 클라이언트가 전송한 요청 파라미터 읽기 기능
- 클라이언트가 전송한 요청 해더 읽기 기능
- 클라이언트가 전송한 쿠키 읽기 기능
- 속성 처리 기능


클라이언트 정보 및 서버 정보 읽기
reqeust 기본 객체는 웹 브라우저, 즉 클라이언트가 전송한 정보 및 서버 정보를 구할 수 있는 메서드를 제공하고 있다.

방법 : <%=request.매소드%>
- getRemoteAddr() - 클라이언트의 IP주소를 구한다. (리턴타입 : String)
- getContentLength() - 클라이언트가 전송한 요청정보의 길이를 구한다. 데이터가 없는 경우 null. 길이 알 수 없을 때는 -1을 리턴 (리턴타입 : long)
- getCharacterEncoding() - 클라이언트가 요청 정보를 전송할때 사용한 문자셋의 인코딩을 구한다. (리턴타입 : String)
- getContentType() - 클라이언트가 요청 정보를 전송할때 사용한 컨텐트의 타입을 구한다. (리턴타입 : String)
- getProtocol() - 클라이언트가 요청한 프로토콜을 구한다.. (리턴타입 : String)
- getMethod() - 웹브라우저 전송방식을 구한다. (리턴타입 : String)
getRequestURI() - 웹 브라우저가 요청한 URL에서 경로를 구한다.. (리턴타입 : String)
- getContextPaht() - jsp 페이지가 속한 웹 어플리케이션의 콘텍스트 경로구한다.. (리턴타입 : String)
- getServerName() - 연결할때 사용한 서버이름 구한다. (리턴타입 : String)
- getServerPort() - 서버가 실행중인 포트 번호를 구한다. (리턴타입 : int)


<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<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> 

 






HTML 폼과 요청 파라미터의 처리
JSP에서 가장 많이 사용하는 기능 중의 하나는 웹 브라우저 폼에 입력한 값을 처리하는 것이다. 웹 브라우저 폼에 입력한 정보를 파라미터로 전송한다. request 기본 객체는 웹브라우저가 전송한 파라미터를 읽어 올 수 있는 메서드를 제공하고 있다.

방법 : <%=request.매소드%>
- getParameter(String name) : 리턴타입(String), 이름이 name인 파라미터의 값을 구한다. 존재하지 않을 경우 null을 리턴한다.
- getParameterValues(String name) : 리턴타입(String[]), 이름이 name인 모든 파라미터의 값을 배열로 구한다. 
존재하지 않을 경우 null을 리턴한다.
- getParameterNames() : 리턴타입(java.util.Enumeration) 웹 브라우저가 전송한 파라미터의 이름을 구한다.
- getParameterMap : 리턴타입(java.util.Map) 웹 브라우저가 전송한 파라미터의 맵을 구한다. 맵은 <파라미터 이름, 값> 쌍으로 구성된다.


makeTestForm.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<html>
<body>
<form action="/chap03/viewParameter.jsp" method="post" >
<%/*입력한 데이터를 전달한 페이지를 viewParameter.jsp로 지정했으며,
post 방식으로 데이터를 전송한다.*/ %>

name : <input type="text" name="name" size="10"><br>
address : <input type="text" name="address" size="30"><br> <!-- 이름이 nam인 요청 파라미터 입력 박스 생성 --!>
animal :
<input type="checkbox" name="pet" value="dog">똥개  <!-- 이름이 nam인 요청 파라미터 입력 박스 생성 --!>

<input type="checkbox" name="pet" value="cat">야옹이
<input type="checkbox" name="pet" value="pig">돼지
<br>
<input type="submit" value="전송">
</form>
</body>
</html>


viewParameter.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
request.setCharacterEncoding("utf-8"); // 요청 파라미터의 캐릭터 인코딩을 utf-8로 지정
%>
<html>
<body>
<b>request.getParameter() 메소드 사용</b><br>
name 파라미터 = <%= request.getParameter("name") %><br> // request.getParameter() 메서드를 사용해서 name 파라미터와 address 파라미터의 값을 출력한다
address 파라미터 = <%= request.getParameter("address") %>

<p>
<b>request.getParameterValues() method use </b><br>
<%
// String의 배열(String[])을 리턴한다. 배열의 첫번째 원소를 사용할 때에는 배열 변수[0]의 형태를 사용한다. 배열 변수 이름을 values로 하였으므로, values[0], values[2]와 같은 형식으로 파라미터 값에 접근한다. --!>
String[] values = request.getParameterValues("pet");  // request.getParameterValues() 메서드를 사용하여  pet파라미터의 값을 String 배열로 읽어온다. pet 파라미터 값을 string 배열로 읽어 오는 이유는 pet 파라미터의 값이 한개 이상 전달 될 수 있기 때문이다. 이름이 pet인 체크박스를 3개를 생성 했을 때 이름이 같은 것이 존재하면 파라미터로 전송될때에도 같은 이름으로 전송된다.
예를 들어 각 파라미터의 값 'dog'와 'cat'을 선택했다고 하자. 그럼 이 경우 두개의 pet 파라미터가 전송되며, 각 파라미터의 값은 "dog"와 "cat"이다. 이렇게 같은 이름으로 전송되는 파라미터를 request.getParameter() 메서드로 읽어 오지 못하며, 오직 한개의 값만을 가져 올수 있다.   

if (values != null) {
for(int i = 0 ; i < values.length ; i++) {
%>
<%= values[i] %>
<%
}
}
%>
<p>
<b>request.getParameterNames() 메소드 사용</b><br>
<%
//1.4이하 버전은 enum을 1.5이상버전은 enum_do를 사용한다.
Enumeration enum_do = request.getParameterNames();
while(enum_do.hasMoreElements()) {
String name = (String)enum_do.nextElement();
%>
<%= name %>
<%
}
%>
<p>
<b>request.getParameterMap()메소드 사용</b><br>
<%
Map parameterMap = request.getParameterMap();
String[] nameParam = (String[])parameterMap.get("name");
if(nameParam != null) {
%>
name = <%= nameParam[0] %>
<%
}
%>
</body>
</html>

①GET 방식과 POST 방식 전송
<form action="/chap03/viewParameter.jsp" method="post" >

GET 방식은 요청 URL에 파라미터를 붙여서 전송한다.
POST 방식은 데이터 영역을 이용해서 파라미터를 전송하게 된다.

②파라미터 값의 인코딩 처리
*웹브라우저
파라미터 값 인코딩
최범균 → %C3%D6%B9

*웹 서버(WAS)
%C3%D6%B9 → 최범균

요청 헤더 정보의 처리
웹 브라우저는 웹 브라우저의 종류에 대한 저보를 헤더에 담아서 웹서버에 전송한다.
request객체는 이러한 헤더 정보를 읽어 올 수 있는 기능을 제공하고 있다.

사용자_지정_1(14).png

예제소스
사용자_지정_1(15).png

사용자_지정_1(16).png

'프로그래밍 > JSP ' 카테고리의 다른 글

필수 이해 요소  (0) 2012.02.28
response 기본객체  (0) 2012.02.28
스크립트 요소  (0) 2012.02.27
Page 디렉티브  (1) 2012.02.24
JSP로 시작하는 웹프로그래밍  (0) 2012.02.24

댓글