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을 잘보시면 지정한 이름 뒤에 값이 넘어가는걸 확인하실수 있습니다.
데이터를 각각 구분하는것은 &을 이용해 데이터를 구분합니다.