본문 바로가기

   
Programming/JSP

JSP request 객체

반응형

JSP request 객체

request 객체라는것은 사용자가 전송한 정보를 확인하고 데이터를 확인할수 있고 서버에 대한 정보를 제공하는 메서드 이다.


아래표를 확인하면 request 객체의 의미에 대해서 이해할수 있다.


클라이언트 및 서버 정보 관련 메서드

메서드 이름 

리턴타입 

설명 

getRemoteAddr()

String 

웹서버에 연결된  사용자의 IP주소정보를 제공. 댓글이나 게시판의 IP정보가 남는것은 대부분 이메서드를 사용한것.

getContentLength()

long 

사용자가 전송한 정보 길이 제공. 데이터 길이가 알수 없다면 -1리턴.

getCharacterEncoding()

String 

사용자가 전송한 정보의 캐릭터 인코딩 타입이 무엇인지 제공해준다. 

getContentType() 

String 

사용자가 정보 전송시 사용한 컨텐트의 타입을 제공.

getProtocol() 

String 

사용자가 요청한 프로토콜 정보 제공.

getMethod() 

String 

브라우저 정보 전송시 사용한 방식에 대한 정보제공.

getRequestURI() 

String 

브라우저가 요청한 URL 경로에 대한 정보를 제공. 

getContextPath()

String 

JSP 페이지에 속한 웹 어플리케이션의 컨텍스트 경로 정보 제공. 

getServerName() 

String 

연결시 사용한 서버 이름 정보 제공.

getServerPort() 

int 

서버가 실행 중인 포트 번호 정보 제공. 


Exam.jsp

<%@ 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>request 객체</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>

결과




jsp 환경에서 html form 요청 처리

웹환경에서 서버에 데이터를 전송할때 html에서 form 태그를 통해 데이터를 전송한다.

jsp 환경에서 html 에 form 요청을 처리하는 경우는 다음과 같다.


request 객체 파라미터 처리 메소드

메서드 이름 

리턴 타입 

설명 

getParameter(String name)

String 

가로안 name으로 html form안에 같은 name의 이름의 데이터를 찾아 준다.

getParameterValues(String name)

String[] 

위와같은 기능이지만 html form 데이터 안에 모든 같은 이름을 찾아 String 배열로 데이터를 찾아 준다.

getParameterNames()

java.util.Enumeration

웹 브라우저가 전송한 파라미터 이름을 구한다. 

getParameterMap()

java.util.Map

웹브라우저가 전송한 마라미터의 맵을 구한다.

(맵은 <파라미터 이름, 값> 이와 같은 형태로 구성됨


Exam.jsp

<%@ 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>request 객체</title>
</head>
<body>
	회원가입<br>
	<form action="Check.jsp" method="post">
		아이디 : <input type="text" name="id"><br>
		패스워드 : <input type="password" name="pw"><br>
		별명 : <input type="text" name="nick"><br>
		이메일 주소 : <input type="text" name="email"><br>
		좋아하는 취미 : <br>
		<input type="checkbox" name="hobby" value="게임" checked> 게임<br>
		<input type="checkbox" name="hobby" value="영화">  영화<br>
		<input type="checkbox" name="hobby" value="만화"> 만화<br>
		<input type="checkbox" name="hobby" value="드라마"> 드라마<br>
		<input type="submit" value="확인">		
	</form>
</body>
</html>

결과



Check.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
	//한글 처리를 위해 응답 결과를 euc-kr로 처리
	request.setCharacterEncoding("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>
	getParameter이용해 전송한 아이디 확인 : <%= request.getParameter("id") %><br>
	getParameter이용해 전송한 비번 확인 : <%= request.getParameter("pw") %><br>
	getParameter이용해 전송한 별명 : <%= request.getParameter("nick") %><br>
	getParameter이용해 전송한 이메일 : <%= request.getParameter("email") %><br>
	getParameterValues이용해 체크된 취미 리스트 :  
	<%
		//사용자가 전송한 값을 담기위해 ParameterValues는 배열을 반환하므로 배열로 데이터를 받아야함.
		String[] result = request.getParameterValues("hobby");
	
		//만약 result 안에 든값이 비어있지 않다면 진행
		if(result != null){
			//반복문을 이용해 result안에 크기만큼 반복해라
			for(int i=0; i<result.length; i++){
	%>		
		<%= 
			//result에 값을 웹에 표현하기 위해 result 안에 0번째부터 출력
			result[i] 
		%>
	<%
			}
		}
	%>
	<br>
	getParameterNames :
	<%
		//리턴 타입이 Enumeration 이기 때문에 Enumeration 객체를 사용하여 담을 변수를 선언
		Enumeration param = request.getParameterNames();
		//전달받은 데이터가 요소가 있다면 계속진행 그렇지 않다면 while문을 나온다.
		while(param.hasMoreElements()){
			//루프를 돌면서 다음요소를 계속 name 변수에 담는다. 출력하기위해 String형변환 
			String name = (String)param.nextElement();
	%>
		<%= name %>
	<%
		}
	%> 
	<br>
	getParameterMap :
	<%
		//getParameterMap의 리턴타입이 map이므로 Map객체 사용하여 map변수 선언
		Map map = request.getParameterMap();
		String[] name = (String[])map.get("id");
		
		//만약 데이터가 있다면 
		if(name != null){
	%>
		<%= name[0] %>
	<%
		}
	%> 
	<br>
</body>
</html>

결과



JSP GET 방식과 POST 방식

웹브라우저 환경에서 데이터를 전송하는 방식에는 2가지가 있습니다.

바로 get 방식과 post 방식으로 브라우저를 통해 데이터를 주고 받을수 있습니다.


get 방식 : 전송되는 데이터가 http 주소에 어떤 데이터를 전송하는지 표시된다. 주로 의미가 없는 값을 전달할때 사용 길이에 제한이 있다. get 방식 4,096바이트 전송까지 가능


post 방식 : 로그인, 회원가입등 보안이 필요한 데이터 전송시에 주로 이용된다. post방식은 길이 제한이 없다.


아래 예제를 보면 좀더 이해하기 쉬울듯 합니다.


Exam.jsp

<%@ 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>get 방식과 post 방식이란?</title>
</head>
<body>
	회원가입<br>
	<!-- get 방식과 post 방식을 결정하는건 form 태그에서 method="get" 이나 post로 선택이 가능하다 -->
	<form action="Check.jsp" method="get">
		아이디 : <input type="text" name="id"><br>
		패스워드 : <input type="password" name="pw"><br>
		별명 : <input type="text" name="nick"><br>
		이메일 주소 : <input type="text" name="email"><br>
		좋아하는 취미 : <br>
		<input type="checkbox" name="hobby" value="게임" checked> 게임<br>
		<input type="checkbox" name="hobby" value="영화">  영화<br>
		<input type="checkbox" name="hobby" value="만화"> 만화<br>
		<input type="checkbox" name="hobby" value="드라마"> 드라마<br>
		<input type="submit" value="확인">		
	</form>
</body>
</html>


Check.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
	//한글 처리를 위해 응답 결과를 euc-kr로 처리
	request.setCharacterEncoding("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>
	getParameter이용해 전송한 아이디 확인 : <%= request.getParameter("id") %><br>
	getParameter이용해 전송한 비번 확인 : <%= request.getParameter("pw") %><br>
	getParameter이용해 전송한 별명 : <%= request.getParameter("nick") %><br>
	getParameter이용해 전송한 이메일 : <%= request.getParameter("email") %><br>
	getParameterValues이용해 체크된 취미 리스트 :  
	<%
		//사용자가 전송한 값을 담기위해 ParameterValues는 배열을 반환하므로 배열로 데이터를 받아야함.
		String[] result = request.getParameterValues("hobby");
	
		//만약 result 안에 든값이 비어있지 않다면 진행
		if(result != null){
			//반복문을 이용해 result안에 크기만큼 반복해라
			for(int i=0; i<result.length; i++){
	%>		
		<%= 
			//result에 값을 웹에 표현하기 위해 result 안에 0번째부터 출력
			result[i] 
		%>
	<%
			}
		}
	%>
	<br>
	getParameterNames :
	<%
		//리턴 타입이 Enumeration 이기 때문에 Enumeration 객체를 사용하여 담을 변수를 선언
		Enumeration param = request.getParameterNames();
		//전달받은 데이터가 요소가 있다면 계속진행 그렇지 않다면 while문을 나온다.
		while(param.hasMoreElements()){
			//루프를 돌면서 다음요소를 계속 name 변수에 담는다. 출력하기위해 String형변환 
			String name = (String)param.nextElement();
	%>
		<%= name %>
	<%
		}
	%> 
	<br>
	getParameterMap :
	<%
		//getParameterMap의 리턴타입이 map이므로 Map객체 사용하여 map변수 선언
		Map map = request.getParameterMap();
		String[] name = (String[])map.get("id");
		
		//만약 데이터가 있다면 
		if(name != null){
	%>
		<%= name[0] %>
	<%
		}
	%> 
	<br>
</body>
</html>

결과

form태그에서 get 방식으로 지정했을때 주소 url에 데이터가 넘어가는게 보입니다.

url을 잘보시면 지정한 이름 뒤에 값이 넘어가는걸 확인하실수 있습니다.


데이터를 각각 구분하는것은 &을 이용해 데이터를 구분합니다.





반응형