본문 바로가기

언어공부/JSP(JavaServerPage)

JSP 기초 문법 - request 기본 객체

JSP 기초 문법 - request 기본 객체

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

 


클라이언트 정보 및 서버 정보 읽기

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

 

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

메소드 리턴 타입 설명
getRemoteAddr() String 웹 서버에 연결한 클라이언트의 IP 주소를 구한다. 게시판이나 방명록 등에서 글 작성자의 IP주소가 자동으로 입력되기도 하는데, 이 때 입력되는 IP 주소가 바로 이 메소드를 사용하여 구한 것이다.
getContentLength() long 클라이언트가 전송한 요청 정보의 길이를 구한다 전송된 데이터의 길이를 알 수 없는 경우 -1을 리턴한다.
getCharacterEncoding() String 클라이언트가 요청 정보를 전송할 때 사용한 캐릭터의 인코딩을 구한다.
getContentType() String 클라이언트가 요청 정보를 전송할 때 사용한 컨텐츠의 타입을 구한다.
getProtocol() String 클라이언트가 요청한 프로토콜을 구한다.
getMethod() String 웹 브라우저가 정보를 전송할 때 사용한 방식을 구한다.
getRequestURI() String 웹 브라우저가 요청한 URL에서 경로를 구한다.
getContextPath() String JSP 페이지가 속한 웹 어플리케이션의 컨텍스트 경로를 구한다.
getServerName() String 연결할 때 사용한 서버 이름을 구한다.
getServerPort() int 서버가 실행중인 포트 번호를 구한다.

 

 

실행 화면

 


요청 파라미터 처리

위 HTML태그에서 각 <input> 태그는 폼의 입력 요소를 생성한다.

 

HTML폼의 각 입력 요소는 이름을 갖는다. 이름 입력을 위한 <input>태그의 name속성은 "name"이고, 주소 입력을 위한 <input>태그의 name속성은 "address"인데, name 속성의 값이 입력 요소의 이름이 된다.

 

예를 들어, 이름, 주소, 좋아하는 동물 입력 요소에 각각 값을 입력한 뒤에 전송버튼을 누르면 웹 브라우저는 (파라미터이름 = 값) 형식으로 파라미터 목록을 웹 서버에 전송한다.

 

request 기본 객체는 웹 브라우저가 전송한 파라미터를 읽어올 수 있는 메소드를 제공하고 있다.

 

request 기본 객체의 파라미터 읽기 메소드

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

 

실제로 파라미터를 어떻게 읽어올 수 있는지 확인하기 위해 폼에 입력한 값을 출력해 주는 JSP 페이지를 만든다.

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
	request.setCharacterEncoding("UTF-8");//method=post로 전송되는 한글을 안깨지게 한다.
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>요청 파라미터 출력</title>
</head>
<body>
<b>request.getParameter() 메소드 사용</b><br/>
name 파라미터:<%=request.getParameter("name") %><br/>
address 파라미터:<%=request.getParameter("address") %>
<p>
<strong>request.getParameterValues()메소드 사용</strong><br/>
<%
String[] values=request.getParameterValues("pet");//pet 파라미터 이름에 실려온 복수개의 값을 배열로 받는다.

if(values !=null && values.length>0){
	for(int i=0;i<values.length;i++){
%>		
	<%=values[i] %>&nbsp;&nbsp;<%--두칸의 빈공백 처리 --%>
<%}
}else{ %>
선택된 좋아하는 동물이 없습니다.
<%} %>
<hr/>
<b>request.getParameterNames() 메소드 사용</b><br/>
<%
Enumeration paramEnum=request.getParameterNames();//파라미터 이름 목록을 구함
while(paramEnum.hasMoreElements()){
	String name=(String)paramEnum.nextElement();

%>
<%=name %>&nbsp;&nbsp;
<%} %>
해당 메소드가 제일 많이 사용됨.
<hr/>
<b>request.getParameterMap() 메소드 사용</b><br/>
<%
	Map parameterMap=request.getParameterMap();//파라미터 맵을 구함. 맵은 파라미터 이름, 값 쌍으로 구성됨.
	String[] nameParam=(String[])parameterMap.get("name");//name파라미터이름에 해당값 값 배열을 구함.
	if(nameParam !=null){
		out.println("name="+nameParam[0]);
	}
%>
</body>
</html>

 

실행 화면

 

데이터가 전송된 화면

 

여기서 체크박스(input type="checkbox")와 라디오버튼(input type="radio")은 선택하지 않으면 파라미터 자체가 전송되지 않는다. 하지만 텍스트(input type="text")를 위한 입력 요소들은 값을 입력하지 않더라도 빈 문자열("")이 파라미터 값으로 전달된다.