[JSP] 2.5 JSP 기본 객체 : request
2022. 4. 7. 13:14ㆍJAVA/Servlet&JSP
request 객체란 무엇인가?
- JSP 페이지에서 가장 많이 사용되는 객체
- 웹 브라우저가 웹 서버에 서비스를 요청할때 서버에 보내는 정보 객체
request 객체 기능
- 클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
- 서버와 관련된 정보 읽기 기능
- 클라이언트가 전송한 요청 파라미터 읽기 기능
- 클라이언트가 전송한 요청 헤더 읽기 기능
- 클라이언트가 전송한 쿠기 읽기 기능
- 속성 처리 기능
1. 클라이언트 정보 및 서버 정보 읽기
request 기본 객체는 웹 브라우저, 즉 클라이언트가 전송한 정보 및 서버 정보를 구할 수 있는 메서드를 제공합니다.
메서드 | 리턴타입 | 설명 |
getRemoteAddr() | String | 웹 서버에 연결한 클라이언트의 IP 주소를 구함 |
getContentLength() | long | 클라이언트가 전송한 요청 정보의 길이를 구함 |
getCharacterEncoding() | String | 클라이언트가 요청 정보를 전송할 때 사용한 캐릭터의 인코딩을 구함 |
getContentType() | String | 클라이언트가 요청 정보를 전송할때 사용한 컨텐츠의 타입을 구함 |
getProtocol() | String | 클라이언트가 요청한 프로토콜을 구함 |
getMethod() | String | 웹 브라우저가 정보를 전송할 때 사용한 방식을 구함 |
getRequestURL() | String | 웹 브라우저가 요청한 URL의 경로를 구함 |
getContextPath() | String | JSP 페이지가 속한 웹 어플리케이션의 컨텍스트 경로를 구함 |
getServerName() | String | 연결할 때 사용한 서버 이름을 구함 |
getServerPort() | int | 서버가 실행중인 포트번호를 구함 |
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
클라이언트 IP = <%= request.getRemoteAddr() %><br>
요청정보길이 = <%= request.getContentLength() %><br>
요청정보 인코딩 = <%= request.getCharacterEncoding() %><br>
요청정보 컨텐트 타입 = <%= request.getContentType() %><br>
요청정보 프로토콜 = <%= request.getProtocol() %><br>
요청정보 전송 방식 = <%= request.getMethod() %><br>
요청 URL = <%= request.getRequestURI() %><br>
컨텍스트 경로 = <%= request.getContextPath() %><br>
서버이름 = <%= request.getServerName() %><br>
서버포트 = <%= request.getServerPort() %><br>
</body>
</html>
2. HTML 폼과 요청 파라미터의 처리
폼 데이터를 웹 서버로 전송하는 과정
웹 브라우저는 폼에 입력한 정보를 파라미터로 전송합니다. request 기본 객체는 웹 브라우저가 전송한 파라미터를 읽어 올 수 있는 메서드를 제공합니다. 메서드는 다음과 같습니다.
메서드 | 리턴 타입 | 설명 |
getParameter(String name) | String | 이름이 name인 파라미터의 값을 구한다. 존재하지 않을 경우 null을 리턴 |
getParameterValues(String name) | String[] | 이름이 name인 모든 파라미터의 값을 배열로 구한다. 존재하지 않을 경우 null을 리턴한다. |
getParameterNames() | java.util.Enumeration | 웹 브라우저가 전송한 파라미터의 이름을 구한다. |
getParameterMap() | java.util.Map | 웹 브라우저가 전송한 파라미터의 맵을 구한다. |
makeTestForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
폼에 데이터를 입력한 후 '전송' 버튼을 클릭하세요.
<form action="./13_viewParameter.jsp" method="post"> <!--입력한 데이터를 전달한 jsp페이지를 ./13_viewParameter.jsp로 지정한다. post 방식으로 데이터를 전송한다. -->
이름: <input type="text" name ="name" size="10"><br> <!--이름이 name인 요청 파라미터 입력 칸 생성 -->
주소: <input type="text" name="address" size="30"><br> <!--이름이 address인 요청 파라미터 입력 칸 생성 -->
좋아하는 동물:
<input type="checkbox" name="pet" value="dog">강아지
<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 language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
//요청 파라미터의 캐릭터 인코딩을 한글로 지정한다. 이렇게 해야 한글을 올바르게 처리할 수 있다.
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>요청 파라미터 출력</title>
</head>
<body>
<!-- request.getParameter()메소드를 사용하여 name파라미터와 address파라미터의 값을 출력한다. -->
<b>request.getParameter() 메소드 사용</b><br>
name 파라미터 = <%=request.getParameter("name") %><br>
address 파라미터 = <%=request.getParameter("address") %><br>
<p>
<b>request.getParameterValues() 메소드 사용</b><br>
<%
/*
request.getParameterVlues() 메소드는 String의 배열(String[])을 리턴한다.
배열의 첫번째 원소를 사용할 때에는 배열변수[0]의 형태를 사용한다.
배열 변수명을 values로 하였으므로, values[0], values[2]와 같이 파라미터값에 접근한다.
*/
String[] values = request.getParameterValues("pet");
if(values!=null)
{
for(int i=0;i<values.length;i++)
{
%>
<%=values[i] %>
<%
}
}
%>
<p>
<b>request.getParameterNames() 메소드 사용</b><br>
<%
/*
파라미터의 이름을 출력한다.
이 코드가 request.getParameterNames() 메소드를 사용하는 기본형태입니다.
*/
Enumeration e = request.getParameterNames();
while(e.hasMoreElements())
{
String name = (String)e.nextElement();
%>
<%=name %>
<%
}
%>
<p>
<b>request.getParameterMap() 메소드 사용</b><br>
<%
/*
request.getParameterMap()은 자바의 Map을 사용하여 파라미터 이름과 파라미터 값을 리턴한다.
이 Map에는 <파라미터이름, 파라미터값 배열>이 쌍을 이루고 있다.
*/
Map parameterMap = request.getParameterMap();
String[] nameParam = (String[])parameterMap.get("name");
if(nameParam!=null){
%>
name = <%= nameParam[0] %>
<%
}
%>
</body>
</html>
GET 방식 전송과 POST 방식 전송
- GET 방식
- 요청 URL에 파라미터를 붙여서 전송하는 방식
- viewParameter.jsp?이름1=값1&이름2=값2...&이름n=값n
- 파라미터를 URL에 붙여서 전송하므로 HTTP 패킷의 헤더에 포함되어 서버에 요청한다.
- 길이에 제한이 있기 때문에 데이터를 보내는 양에 한계가 있음
- URL에 파라미터가 노출되기 때문에 보안에 취약함
- POST 방식
- URL에 파라미터를 붙여서 보내지 않고 HTTP 패킷의 BODY에 데이터를 넣어서 전송합니다.
- 헤더 필드 중 BODY의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떤 데이터 타입인지 명시합니다.
- 컨텐츠 타입은 다음과 같습니다. 기본적으로 1번 컨텐츠 타입으로 셋팅됩니다.
- 1번 컨텐츠 타입은 BODY에 key, value 방식으로 데이터를 넣습니다.
- 2번 컨텐츠 타입은 BODY에 단순 txt를 넣습니다.
- 3번 컨텐츠 타입은 파일전송시 사용하며 BODY의 데이터를 이진 데이터로 넣어서 전송합니다.
1. application/x-www-form-urlencoded
2. text/plain
3. multipart/form-data
3. 요청 헤더 정보의 처리
웹 브라우저는 HTTP 프로토콜에 따라서 요청 정보를 웹 서버에 전송합니다. HTTP 프로토콜은 헤더 정보에 부가적인 정보를 담도록 하고 있습니다. 예를 들어 웹 브라우저는 웹 브라우저의 종류에 대한 정보를 헤더에 담아서 전송합니다.
JSP의 request 기본 객체는 이러한 헤더 정보를 읽어 올 수 있는 기능을 제공합니다.
메서드 | 리턴 타입 | 설명 |
getHeader(String name) | String | 지정한 이름의 헤더 값을 구함 |
getHeaders(String name) | java.util.Enumeration | 지정한 이름의 헤더 목록을 구함 |
getHeaderNames() | java.util.Enumeration | 모든 헤더의 이름을 구함 |
getIntHeader() | int | 지정한 헤더의 값을 정수값으로 읽어옴 |
getDateHeader() | long | 지정한 헤더의 값을 시간값으로 읽어옴 (1997/01/01 기준, 1/1000초 단위) |
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
Enumeration e = request.getHeaderNames();
while(e.hasMoreElements())
{
String headerName = (String)e.nextElement();
String headerValue = request.getHeader(headerName);
%>
<%= headerName %> = <%= headerValue %><br>
<%
}
%>
</body>
</html>
References
https://mommoo.tistory.com/60
JSP 2.0 프로그래밍 기초부터 중급까지
'JAVA > Servlet&JSP' 카테고리의 다른 글
[JSP] 4.1 JSP(Java Server Pages)의 처리 과정 (0) | 2022.04.07 |
---|---|
[JSP] 2.6 JSP 기본 객체 : response (0) | 2022.04.07 |
[JSP] 2.4 스크립트 요소 (0) | 2022.04.07 |
[JSP] 2.3 page 디렉티브 (0) | 2022.04.07 |
[JSP] 2.1~2 JSP 페이지의 구성 요소 (0) | 2022.04.07 |