1. request
- JSP 페이지에서 가장 많이 사용되는 기본 객체로 클라이언트가 전송한 요청 정보를 제공한다.
2. 클라이언트 정보 및 서버 정보 읽기
메서드 | 반환형 | 설명 |
getRemoteAddr() | String | 웹 서버에 연결한 클라이언트의 IP 주소를 구한다. |
getContentLength() | long | 클라이언트가 전송한 요청 정보의 길이를 구한다. |
getCharacterEncoding() | String | 클라이언트가 요청 정보를 전송할 때 사용한 캐릭터의 인코딩을 구한다. |
getContentType() | String | 클라이언트가 요청 정보를 전송할 때 사용한 컨텐트의 타입을 구한다. |
getProtocol() | String | 클라이언트가 요청한 프로토콜을 구한다. |
getMethod() | String | 웹 브라우저가 정보를 전송할 때 사용한 방식을 구한다. |
getRequestURI() | String | 웹 브라우저가 요청한 URL에서 경로를 구한다. |
getContextPath() | String | JSP 페이지가 속한 웹 어플리케이션의 컨텍스트 경로를 구한다. |
getServername() | String | 연결할 때 사용한 서버 이름을 구한다. |
getServerPort() | int | 서버가 실행 중인 포트 번호를 구한다. |
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <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> <!-- 실행결과 클라이언트 IP = 0:0:0:0:0:0:0:1 요청정보길이 = -1 요청정보 인코딩 = null 요청정보 컨텐트타입 = null 요청정보 프로토콜 = HTTP/1.1 요청정보 전송방식 = GET 요청 URI = /Blog/requesttest1.jsp 컨텍스트 경로 = /Blog 서버이름 = localhost 서버이름 = 8080 -->
3. HTML 폼, 요청 파라미터 처리
- 웹 브라우저의 폼에 입력된 정보를 파라미터로 전송된다. request 객체는 전송된 파라미터 읽어온다.
- 값이 없는 텍스트입력은 빈 문자열로 전달되지만 체크박스와 라디오 버튼의 경우 선택하지 않게 되면 파라미터 자체가 전달되지 않는다.
메서드 | 반환형 | 설명 |
getParameter(String arg0) | String | 이름이 arg0인 파라미터의 값을 구한다. 없을 경우 null을 리턴한다. |
getParametervalues(String arg0) | String[] | 이름이 arg0인 파라미터의 값을 배열로 구한다. 없을 경우 null을 리턴한다. |
getParameterNames() | Enumeration | 웹 브라우저가 전송한 파라미터의 이름을 구한다. |
getParameterMap() | Map | 웹 브라우저가 전송한 파라미터의 맵을 구한다. |
<!-- memberForm.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>회원 가입 폼 테스트</title> </head> <body> <h1>회원 가입 폼</h1> <form action="memberOk.jsp" method="post"> 이름 : <input type="text" name="name" size="10"><br> 나이 : <input type="text" name="age" size="4"><br> 성별 : <input type="radio" name="gender" value="남자">남자 <input type="radio" name="gender" value="여자">여자<br> 취미 : <input type="checkbox" name="hobby" value="독서">독서 <input type="checkbox" name="hobby" value="운동">운동 <input type="checkbox" name="hobby" value="쇼핑">쇼핑<br> <input type="submit" value="가입"> </form> </body> </html>
<!-- memberOk.jsp --> <%@ page import="java.util.*"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); %> <!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=UTF-8"> <title>회원 파라미터 출력</title> </head> <body> <h2>request.getParameter() 메서드</h2> name 파라미터 : <%=request.getParameter("name") %><br> age 파라미터 : <%=request.getParameter("age") %><br> gender 파라미터 : <%=request.getParameter("gender") %><br> <h2>request.getParameterValues() 메서드</h2> <% String[] hobby = request.getParameterValues("hobby"); if (hobby != null) { for (int i = 0; i < hobby.length; i++) { out.println(hobby[i]); } // for } // if %> <h2>request.getParameterNames() 메서드</h2> <% Enumeration en = request.getParameterNames(); while (en.hasMoreElements()) { String name = en.nextElement().toString(); out.println(name); } // while %> <h2>request.getParameterMap() 메서드</h2> <% Map mp = request.getParameterMap(); Set keys = (Set) mp.keySet(); Iterator iter = keys.iterator(); while (iter.hasNext()) { String key = iter.next().toString(); Object[] value = (Object[]) mp.get(key); out.println(key + " :"); for (int i = 0; i < value.length; i++) { out.println(value[i]); } // for out.println("<br>"); } // while %> </body> </html> <!-- 실행 결과 request.getParameter() 메서드 name 파라미터 : 갱짱 age 파라미터 : 25 gender 파라미터 : 남자 request.getParameterValues() 메서드 독서 운동 쇼핑 request.getParameterNames() 메서드 age name hobby gender request.getParameterMap() 메서드 name: 갱짱 age: 25 hobby: 독서 운동 쇼핑 gender: 남자 -->
4. GET 방식 전송
- ?이름1=값1&이름2=값2 . . .&이름n=값n
- 요청 URL에 '?'와 함께 파라미터를 붙여서 전송한다. 공백은 '+'로, 알파벳과 숫자는 그대로, 특수 문자들은 %H의 형태로 표시된다.
- URL 기반으로 전송되기 때문에 굳이 폼을 사용하지 않더라도 파라미터를 전송할 수 있다.
- 웹 브라우저, 웹 서버 또는 웹 컨테이너에 따라 전송할 수 있는 파라미터 값의 길이에 제한이 있을 수 있다.
5. POST 방식 전송
- 데이터영역을 이요하여 파라미터를 전송하게 된다.
- 웹 브라우저나 웹 서버 등에 상관없이 전송할 수 있는 파라미터의 길이에 제한이 없다.
6. 파라미터 값의 인코딩 처리
- 웹 브라우저는 웹 서버에 파라미터를 전송할 때 알맞은 캐릭터 셋을 이용해서 파라미터 값을 인코딩한다.
- 반대로 웹 서버는 알맞은 캐릭터 셋을 이용해서 웹 브라우저가 전송한 파라미터 데이터를 디코딩 한다.
- 인코딩 캐릭터 셋과 디코딩 캐릭터 셋이 다를 경우 잘못된 파라미터 값을 사용하게 된다.
- 어떠한 캐릭터 셋을 사용할 지의 여부는 GET 방식과 POST 방식에 따라서 달라진다.
- POST
- 페이지 디렉티브의 캐릭터셋 속성으로 인코딩 한 결과를 setCharacterEncoding() 메서드를 사용해서 디코딩한다.
- GET
- <a> 태그의 링크에 쿼리 문자열 추가 : 웹 페이지 인코딩 사용
- HTML 폼의 method 속성 값을 GET으로 지정해서 폼을 전송 : 웹 페이지 인코딩 사용
- 웹 브라우저에 주소에 직접 쿼리 문자열 포함한 URL 입력 : 웹 브라우저마다 다름
- 톰캣에서 인코딩 타입 처리
- server.xml 파일에서 <Connector> 태그의 useBodyencodingForURI 속성의 값을 ture로 지정해준다.
- server.sml 파일에서 <Connector> 태그의 URIEncoding 속성 값으로 원하는 캐릭터 셋을지정해준다.
7. 요청 헤더 정보의 처리
- 웹 브라우저는 HTTP 프로토콜(헤더 정보에 부가적인 정보를 담는다)에 따라서 요청 정보를 웹 서버에 전송한다.
메서드 | 반환형 | 설명 |
getHeader(String name) | String | 지정한 이름의 헤더 값을 구한다. |
getHeaders(String name) | Enumeration | 지정한 이름의 헤더 목록을 구한다. |
getHeaderNames() | Enumeration | 모든 헤더의 이름을 구한다. |
getIntHeader(String name) | int | 지정한 헤더의 값을 정수 값으로 읽어온다. |
getDateHeader(String name) | long | 지정한 헤더의 값을 시간 값으로 읽어온다. |
<!-- headerList.jsp --> <%@page import="java.util.Enumeration"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!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=UTF-8"> <title>헤더 목록</title> </head> <body> <% Enumeration headerEnum = request.getHeaderNames(); while (headerEnum.hasMoreElements()) { String headerName = (String) headerEnum.nextElement(); String headerValue = request.getHeader(headerName); %> <%= headerName %> : <%= headerValue %> <br> <% } // while %> </body> </html> <!-- 실행결과 host : localhost:8080 connection : keep-alive accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 user-agent : Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36 accept-encoding : gzip,deflate,sdch accept-language : ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4 cookie : JSESSIONID=5210A7E935DEF4B5767893EAEE8E7EB4 -->
'자바 > JSP' 카테고리의 다른 글
JSP 실행(처리) 과정 (0) | 2015.12.22 |
---|---|
JSP 기본(내장) 객체 - response (0) | 2015.12.22 |
JSP 스크립트 요소 (0) | 2015.12.22 |
JSP 디렉티브(Directive)(지시자) - page (0) | 2015.12.22 |
JSP 페이지의 구성 요소 (0) | 2015.12.22 |